aboutsummaryrefslogtreecommitdiff
path: root/exampleData
diff options
context:
space:
mode:
authorGravatar Rogan Creswick <creswick@gmail.com>2013-06-14 15:02:14 -0700
committerGravatar Rogan Creswick <creswick@gmail.com>2013-06-14 15:02:14 -0700
commita62026d7e1e0327b741d74c8a02bfcb3765f8b86 (patch)
tree5eb0e09bbf64ae0e640ad83d4e5bacdf69bc7459 /exampleData
parentef740f9e1cd29ec2f72ad9b900ccbb3b317093dc (diff)
example of up goer five rule
Diffstat (limited to 'exampleData')
-rw-r--r--exampleData/ruleSets/language-processing/jspos/POSTagger.js118
-rw-r--r--exampleData/ruleSets/language-processing/jspos/README.txt81
-rw-r--r--exampleData/ruleSets/language-processing/jspos/lexer.js66
-rw-r--r--exampleData/ruleSets/language-processing/jspos/lexicon.js_7
-rw-r--r--exampleData/ruleSets/language-processing/jspos/libpeerconnection.log0
-rw-r--r--exampleData/ruleSets/language-processing/jspos/license.txt56
-rw-r--r--exampleData/ruleSets/language-processing/jspos/sample.html173
-rw-r--r--exampleData/ruleSets/language-processing/jspos/test.js23
-rw-r--r--exampleData/ruleSets/language-processing/natural/1-1000.js133
-rw-r--r--exampleData/ruleSets/language-processing/natural/1-1000.txt133
l---------exampleData/ruleSets/language-processing/natural/browserify1
-rwxr-xr-xexampleData/ruleSets/language-processing/natural/jquery.js9472
-rw-r--r--exampleData/ruleSets/language-processing/natural/libpeerconnection.log0
-rw-r--r--exampleData/ruleSets/language-processing/natural/nattest1-gen.js17749
-rw-r--r--exampleData/ruleSets/language-processing/natural/nattest1.js66
-rw-r--r--exampleData/ruleSets/language-processing/natural/natural-test1.html31
-rw-r--r--exampleData/ruleSets/language-processing/natural/underscore-min.js1
-rw-r--r--exampleData/ruleSets/language-processing/natural/upGoerFive-gen.js17930
-rw-r--r--exampleData/ruleSets/language-processing/natural/upGoerFive.js212
-rw-r--r--exampleData/ruleSets/language-processing/natural/upGoerFive.json5
m---------exampleData/ruleSets/language-processing/node-browserify0
21 files changed, 46257 insertions, 0 deletions
diff --git a/exampleData/ruleSets/language-processing/jspos/POSTagger.js b/exampleData/ruleSets/language-processing/jspos/POSTagger.js
new file mode 100644
index 0000000..7efc831
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/POSTagger.js
@@ -0,0 +1,118 @@
+/*!
+ * jsPOS
+ *
+ * Copyright 2010, Percy Wegmann
+ * Licensed under the LGPLv3 license
+ * http://www.opensource.org/licenses/lgpl-3.0.html
+ *
+ * Enhanced by Toby Rahilly to use a compressed lexicon format as of version 0.2.
+ */
+
+function POSTagger(){
+ this.lexicon = POSTAGGER_LEXICON;
+ this.tagsMap = LEXICON_TAG_MAP;
+}
+
+/**
+ * Indicates whether or not this string starts with the specified string.
+ * @param {Object} string
+ */
+String.prototype.startsWith = function(string){
+ if (!string)
+ return false;
+ return this.indexOf(string) == 0;
+}
+
+/**
+ * Indicates whether or not this string ends with the specified string.
+ * @param {Object} string
+ */
+String.prototype.endsWith = function(string){
+ if (!string || string.length > this.length)
+ return false;
+ return this.indexOf(string) == this.length - string.length;
+}
+
+POSTagger.prototype.wordInLexicon = function(word){
+ var ss = this.lexicon[word];
+ if (ss != null)
+ return true;
+ // 1/22/2002 mod (from Lisp code): if not in hash, try lower case:
+ if (!ss)
+ ss = this.lexicon[word.toLowerCase()];
+ if (ss)
+ return true;
+ return false;
+}
+
+POSTagger.prototype.tag = function(words){
+ var ret = new Array(words.length);
+ for (var i = 0, size = words.length; i < size; i++) {
+ var ss = this.lexicon[words[i]];
+ // 1/22/2002 mod (from Lisp code): if not in hash, try lower case:
+ if (!ss)
+ ss = this.lexicon[words[i].toLowerCase()];
+ if (!ss && words[i].length == 1)
+ ret[i] = words[i] + "^";
+ if (!ss)
+ ret[i] = "NN";
+ else
+ ret[i] = this.tagsMap[ss][0];
+ }
+
+ /**
+ * Apply transformational rules
+ **/
+ for (var i = 0; i < words.length; i++) {
+ word = ret[i];
+ // rule 1: DT, {VBD | VBP} --> DT, NN
+ if (i > 0 && ret[i - 1] == "DT") {
+ if (word == "VBD" ||
+ word == "VBP" ||
+ word == "VB") {
+ ret[i] = "NN";
+ }
+ }
+ // rule 2: convert a noun to a number (CD) if "." appears in the word
+ if (word.startsWith("N")) {
+ if (words[i].indexOf(".") > -1) {
+ ret[i] = "CD";
+ }
+ // Attempt to convert into a number
+ if (parseFloat(words[i]))
+ ret[i] = "CD";
+ }
+ // rule 3: convert a noun to a past participle if words[i] ends with "ed"
+ if (ret[i].startsWith("N") && words[i].endsWith("ed"))
+ ret[i] = "VBN";
+ // rule 4: convert any type to adverb if it ends in "ly";
+ if (words[i].endsWith("ly"))
+ ret[i] = "RB";
+ // rule 5: convert a common noun (NN or NNS) to a adjective if it ends with "al"
+ if (ret[i].startsWith("NN") && word.endsWith("al"))
+ ret[i] = i, "JJ";
+ // rule 6: convert a noun to a verb if the preceding work is "would"
+ if (i > 0 && ret[i].startsWith("NN") && words[i - 1].toLowerCase() == "would")
+ ret[i] = "VB";
+ // rule 7: if a word has been categorized as a common noun and it ends with "s",
+ // then set its type to plural common noun (NNS)
+ if (ret[i] == "NN" && words[i].endsWith("s"))
+ ret[i] = "NNS";
+ // rule 8: convert a common noun to a present participle verb (i.e., a gerund)
+ if (ret[i].startsWith("NN") && words[i].endsWith("ing"))
+ ret[i] = "VBG";
+ }
+ var result = new Array();
+ for (i in words) {
+ result[i] = [words[i], ret[i]];
+ }
+ return result;
+}
+
+POSTagger.prototype.prettyPrint = function(taggedWords) {
+ for (i in taggedWords) {
+ print(taggedWords[i][0] + "(" + taggedWords[i][1] + ")");
+ }
+}
+
+//print(new POSTagger().tag(["i", "went", "to", "the", "store", "to", "buy", "5.2", "gallons", "of", "milk"])); \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/jspos/README.txt b/exampleData/ruleSets/language-processing/jspos/README.txt
new file mode 100644
index 0000000..d12f12d
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/README.txt
@@ -0,0 +1,81 @@
+ABOUT:
+
+jspos is a Javascript port of Mark Watson's FastTag Part of Speech Tagger which
+was itself based on Eric Brill's trained rule set and English lexicon.
+jspos also includes a basic lexer that can be used to extract words and other
+tokens from text strings.
+
+LICENSE:
+
+jspos is licensed under the GNU LGPLv3
+
+FILES:
+
+lexicon.js_ - Javascript version of Eric Brill's English lexicon
+lexer.js - Lexer to break a sentence into taggable tokens (e.g. words)
+POSTagger.js - the Part of Speech tagger
+
+You'll typically need to include all 3 files.
+
+USAGE:
+
+var words = new Lexer().lex("This is some sample text. This text can contain multiple sentences.");
+var taggedWords = new POSTagger().tag(words);
+for (i in taggedWords) {
+ var taggedWord = taggedWords[i];
+ var word = taggedWord[0];
+ var tag = taggedWord[1];
+}
+
+ACKNOWLEDGEMENTS:
+
+Thanks to Mark Watson for writing FastTag, which served as the basis for jspos.
+
+Thanks to Toby Rahilly for compressing the lexicon.
+
+TAGS:
+
+CC Coord Conjuncn and,but,or
+CD Cardinal number one,two
+DT Determiner the,some
+EX Existential there there
+FW Foreign Word mon dieu
+IN Preposition of,in,by
+JJ Adjective big
+JJR Adj., comparative bigger
+JJS Adj., superlative biggest
+LS List item marker 1,One
+MD Modal can,should
+NN Noun, sing. or mass dog
+NNP Proper noun, sing. Edinburgh
+NNPS Proper noun, plural Smiths
+NNS Noun, plural dogs
+POS Possessive ending Õs
+PDT Predeterminer all, both
+PP$ Possessive pronoun my,oneÕs
+PRP Personal pronoun I,you,she
+RB Adverb quickly
+RBR Adverb, comparative faster
+RBS Adverb, superlative fastest
+RP Particle up,off
+SYM Symbol +,%,&
+TO ÒtoÓ to
+UH Interjection oh, oops
+VB verb, base form eat
+VBD verb, past tense ate
+VBG verb, gerund eating
+VBN verb, past part eaten
+VBP Verb, present eat
+VBZ Verb, present eats
+WDT Wh-determiner which,that
+WP Wh pronoun who,what
+WP$ Possessive-Wh whose
+WRB Wh-adverb how,where
+, Comma ,
+. Sent-final punct . ! ?
+: Mid-sent punct. : ; Ñ
+$ Dollar sign $
+# Pound sign #
+" quote "
+( Left paren (
+) Right paren ) \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/jspos/lexer.js b/exampleData/ruleSets/language-processing/jspos/lexer.js
new file mode 100644
index 0000000..a010701
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/lexer.js
@@ -0,0 +1,66 @@
+/*!
+ * jsPOS
+ *
+ * Copyright 2010, Percy Wegmann
+ * Licensed under the GNU LGPLv3 license
+ * http://www.opensource.org/licenses/lgpl-3.0.html
+ */
+
+function LexerNode(string, regex, regexs){
+ this.string = string;
+ this.children = [];
+ if (string) {
+ this.matches = string.match(regex);
+ var childElements = string.split(regex);
+ }
+ if (!this.matches) {
+ this.matches = [];
+ var childElements = [string];
+ }
+ if (regexs.length > 0) {
+ var nextRegex = regexs[0];
+ var nextRegexes = regexs.slice(1);
+ for (var i in childElements) {
+ this.children.push(new LexerNode(childElements[i], nextRegex, nextRegexes));
+ }
+ }
+ else {
+ this.children = childElements;
+ }
+}
+
+LexerNode.prototype.fillArray = function(array){
+ for (var i in this.children) {
+ var child = this.children[i];
+ if (child.fillArray)
+ child.fillArray(array);
+ else if (/[^ \t\n\r]+/i.test(child))
+ array.push(child);
+ if (i < this.matches.length) {
+ var match = this.matches[i];
+ if (/[^ \t\n\r]+/i.test(match))
+ array.push(match);
+ }
+ }
+}
+
+LexerNode.prototype.toString = function(){
+ var array = [];
+ this.fillArray(array);
+ return array.toString();
+}
+
+function Lexer(){
+ // Split by numbers, then whitespace, then punctuation
+ this.regexs = [/[0-9]*\.[0-9]+|[0-9]+/ig, /[ \t\n\r]+/ig, /[\.\,\?\!]/ig];
+}
+
+Lexer.prototype.lex = function(string){
+ var array = [];
+ var node = new LexerNode(string, this.regexs[0], this.regexs.slice(1));
+ node.fillArray(array);
+ return array;
+}
+
+//var lexer = new Lexer();
+//print(lexer.lex("I made $5.60 today in 1 hour of work. The E.M.T.'s were on time, but only barely.").toString());
diff --git a/exampleData/ruleSets/language-processing/jspos/lexicon.js_ b/exampleData/ruleSets/language-processing/jspos/lexicon.js_
new file mode 100644
index 0000000..5da0679
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/lexicon.js_
@@ -0,0 +1,7 @@
+/*
+ * Javascript version of Eric Brill's English lexicon, compressed by Toby Rahilly.
+ */
+
+var POSTAGGER_LEXICON = {Ranavan:0,"pro-Soviet":1,"Hydro-Electric":2,"waste-disposal":3,chameleons:4,clotted:1,spiders:4,verses:4,hanging:5,"Hawaiian\\/Japanese":1,hastily:6,comically:6,REIS:2,localized:7,spidery:1,disobeying:8,"marketing-wise":1,"plant-closing":1,Archuleta:2,refunding:9,Western:10,"wrought-iron":1,Gravesend:2,"government-to-government":1,Euro:2,slothful:1,Valle:2,Famed:1,Blade:2,Poetry:11,Mizell:2,"plant-modernization":1,Rizopolous:2,seamier:12,wooded:1,grueling:13,Muniz:2,Amparano:2,Saco:2,Sack:2,virtuosos:4,Raptopoulos:2,Multilateral:2,immunities:4,"all-news":1,Pinkerton:2,gaskets:4,Kibbutzim:4,Shocked:14,deadheads:4,Dixiecrat:2,Honorable:2,Olde:2,"":15,snuggled:16,inanimate:1,errors:4,Initially:6,"self-reliant":1,defenses:4,Hamilton:2,HCFA:2,designing:8,pawed:17,Kosonen:2,Designcraft:2,mailings:4,perforations:4,Sussman:2,affiliates:18,"advanced-ceramics":19,perfunctorily:6,affiliated:14,Footnotes:4,confronts:20,"small-screen":1,Manger:2,Manges:2,Bereuter:2,kids:18,uplifting:13,Downfall:2,deferring:8,Keillor:2,"electric-power":1,orthographies:4,Hafiz:2,"sheep-lined":1,"inflation-induced":1,Harvey:2,stern:3,Vernor:2,inevitable:1,Vernon:2,distortions:4,reasserting:8,sermons:4,"grounds-care":1,populations:4,exuberantly:6,Sindona:2,Hardshell:2,"whole-heartedly":6,Pedone:2,"pay-movie":1,"co-marketing":1,morally:6,Indigo:2,"non-advertising":1,Reichhold:2,Gastronomy:2,"old-guard":1,wiretapping:21,deputy:22,"R.G.":2,"grass-fed":1,Darling:23,Tippecanoe:2,nondiscretionary:1,"well-armed":1,Editorials:4,"electrical-engineering":1,McCamant:2,travel:24,Attention:25,Businessland:2,Nussbaum:2,Bates:2,exposited:17,Feelers:4,assimilated:14,dinosaurs:4,iodocompounds:4,Fogg:2,stipulate:26,sentencing:27,Tenants:28,CFM:2,FINANCIAL:2,CFD:2,CFC:11,subplots:4,"b-Current":29,Shimon:2,CFP:2,Retention:2,sprawling:30,snugly:6,Capistrano:2,Blackstone:31,Sabreliner:2,benefited:32,Robertson:2,"Soviet-trained":1,activating:8,"gay-ess":33,"H.L.":2,WPS:2,"ex-dividend":34,His:35,Hit:36,fit:37,Albrights:28,Schroeder:2,screaming:5,Admirers:4,Bischofberger:2,Kavanagh:2,Walesa:2,Hid:2,Rubins:4,reentered:16,Ciminero:2,Him:38,Galanter:2,effecte:39,Plebian:1,Aloe:2,vouchers:4,"top-quality":1,Civics:28,Pavlovitch:2,effects:18,Specialized:40,McArtor:2,whacking:8,castigating:8,wooden:1,Pergamon:2,Combine:39,uninfluenced:17,Weakening:8,Dairies:41,Eyewear:2,parasites:4,Bullocks:2,Pamorex:2,Crowds:4,ANNOUNCED:16,Pomerania:2,Denizens:4,Susie:11,Sidestepping:8,adapt:42,Chivas:2,Kahler:2,Impressionists:28,MEDIA:2,underfoot:6,Schwarz:2,Corinne:2,Argabright:2,elsewhere:43,stereotypical:1,Bergelt:2,Transformers:28,estimate:44,obliterans:4,Egg:11,silent:1,Nigel:2,nucleoli:4,Woodberry:2,Domestically:6,SIGNED:17,disturbed:45,"dinner-hour":1,Facts:46,Niger:2,breed:44,Varadero:2,Activity:47,Gingerly:6,megabytes:4,Nerves:4,Lurie:2,olds:4,LAND:2,renovated:14,needed:48,master:49,specters:4,"Russo-American":1,Hammerstein:2,Aztar:2,scrapes:4,yield:50,"mid-June":11,mutilated:14,Daddy:2,heftiest:51,positively:6,Guardsmen:28,SPAN:2,anniversaries:4,"ozone-destroying":1,Moonlighting:47,Zeta:2,feeling:21,"movie-themed":1,Escadrille:2,"third-round":1,"value-story":1,neuroselective:1,Chicago:2,"straight-from-the-shoulder":1,"index-options":4,consenting:30,pecs:4,brawny:1,recapitalized:17,Theo:2,Then:6,Them:52,scraped:32,wholesome:1,Ashenberg:2,Grodnik:2,Thee:53,Tschilwyk:2,Myron:2,They:38,"v-senv5":2,shipments:4,diminishing:8,resonates:20,Jessye:2,tensely:6,Hubacher:2,Pandora:2,resonated:16,transverse:3,KEARNEY:2,Encore:2,semicircular:1,Pastern:2,Lanvin:2,"state-directed":1,"Journal-Bulletin":2,willinge:1,Civilized:1,fugitives:4,"conservative-led":1,purged:54,saying:55,ffreind:39,"U-2":2,Euralliance:2,Mignanelli:2,Jacobson:2,padded:7,Butterfinger:2,Cunha:2,Basinger:2,hounded:16,apace:6,Taiyo:2,clicked:32,Rizvi:2,Geste:2,TEACH:39,"L.C.":2,familistical:1,"photo-montage":1,INSEAD:2,Warnke:2,Sibson:2,outfielders:4,Dionne:2,Comenico:2,"Bancorp.":2,affronted:17,Senators:56,Ecology:47,"Baden-Wuerttemburg":2,nicely:6,Andover:2,succumb:39,Dances:57,Dancer:2,pipers:4,Jabe:2,programmatic:1,"concretistic-seeming":1,Centerbank:2,Anderson:2,"Boon-Sanwa":2,news:19,McChicken:2,advisedly:6,Mosle:2,"above-market":1,Heinkel:2,Trinitron:2,motional:1,"guided-missile":3,Chugoku:2,Dexedrine:2,Tarzana:2,Eichner:2,Hurst:2,requisites:4,wage:25,redistricting:55,extend:58,nature:22,Eisai:2,fruits:4,lapping:8,superficial:1,brainwashed:17,Bajakian:2,tendons:4,Resolute:2,Camusfearna:2,Orkem:59,Handmaid:2,"lumber-like":1,Altairians:28,"Oil-related":1,fearlessly:6,Apartment:47,foreclosing:8,SCHWARTZ:2,Reuter:11,wearying:8,unhealed:1,fondled:17,minuses:4,"self-consistent":1,"month-long":1,humming:21,Instantly:6,fro:6,".":60,Nischwitz:2,much:61,Jorio:2,Closely:6,dehumanised:17,unleavened:1,fry:24,Ellman:2,Goals:28,INMAC:2,spit:62,Clayt:2,Clays:2,Donovan:2,doubts:18,Akerson:2,"two-hundredths":4,Cipolla:2,spin:63,Volksgeist:64,skilfully:6,wildcat:22,"near-irrelevant":1,"U.N.-chartered":1,"Ben-Gurion":2,"bargain-hunters":4,contingencies:4,microbiological:1,misconstrued:17,"low-smoke":1,"red-figured":1,Courtrai:2,prostrate:1,Crusaders:65,biddies:4,"slide-packs":4,cupful:1,Berridge:2,Innumerable:1,embargos:4,conditioned:45,"to-morrow":6,Stanhope:2,Brookings:2,"half-billion":1,hone:42,memorial:22,WFXT:2,inventively:6,"C/NNP.A.J.":2,mummified:17,honk:33,"slash-mouthed":1,Tahitian:66,conformed:54,visitations:4,HOSPITALS:4,saluted:32,myocardial:1,"Front-runners":4,Maybe:67,Alienus:2,torpedoes:4,"low-grade":1,pfffted:16,torpedoed:54,holystones:4,spotty:1,peremptory:1,Verges:2,mentors:4,Stearn:2,academic:3,ALPA:2,lonelier:68,EBS:2,"J.MBB":2,Table:47,corporate:1,massaging:8,Hickey:2,absurdities:4,golden:1,"half-starved":1,valleys:4,Feigenbaum:2,"salt-crusted":1,lasso:25,Vitalie:2,"out-of-town":1,Oscar:2,"bull-roaring":1,Schlemmer:2,Mohammedanism:2,hay:25,vicitims:4,has:69,Spence:2,Housekeeping:47,elders:4,Serieuses:2,constrictors:4,unequivocally:6,objective:22,indicative:1,Seaboard:2,ERNST:2,"solid-state":1,Eurocell:2,Kontrollbank:2,Wedtech:2,Brenda:2,Perfecta:2,Stiller:2,Pentagon:2,"double-step":1,misdemeanors:4,Swedish:66,Quadrex:2,crowd:24,mosques:4,Expressways:2,crown:25,culpas:64,Bourcier:2,captive:3,Avdel:2,emphases:4,"anti-epilepsy":1,fiduciary:1,"debt-rating":1,"leather-hard":1,perchance:6,Nixdorf:2,bottom:70,inhuman:1,Wangenheim:2,Celebration:2,Lasorda:2,Calls:18,"non-porous":1,considerin:8,Kentuck:2,brigades:4,starring:30,caskets:4,Scwhab:2,accelerations:4,benches:4,"Transmanche-Link":2,anomalous:1,officeholders:4,catchy:1,"newly-emerging":1,sticle:39,ribozymes:4,"classical-music":1,lemmings:4,Cydonia:2,"pre-tax":1,Concerned:71,honeymoon:25,Valdez:2,"Pontiac-Cadillac":2,shoots:72,appropriators:4,Ends:73,despised:32,Inherently:6,raped:45,Carolco:2,grasping:8,GERMANY:2,rapes:18,avocados:4,Endo:2,perfumes:4,"Bonds-b":74,denoting:8,Telesphere:11,perfumed:7,Roast:39,Nineteenth:66,Bensonhurst:2,Interferon:2,congratulations:75,"dark-squared":1,Whom:76,"Year-to-date":1,Jaya:2,Household:11,VTOL:2,County:77,Merom:2,"open-air":1,nicest:51,"appeals-court":22,soldering:13,"slow-bouncing":1,Jays:28,Manderscheid:2,passenger:22,Ladas:2,Tales:56,YOUNG:66,VARIAN:2,"two-day":1,Fukuda:2,"ECU-based":1,"taxable-equivalent":1,Fennessy:2,Velasco:2,Resler:2,crowns:4,Burke:2,wordlessly:6,Demagogues:4,thoroughgoing:1,Checchi:2,hawked:32,Melbourne:2,SONGsters:4,Bucer:2,smelling:8,Filofax:2,Ida:2,continentally:6,Debutante:2,Oriole:2,Dragonetti:2,BURNHAM:2,Wiley:2,chain:78,whoever:79,Agura:2,Spector:2,Cairoli:2,Ipswich:2,chair:25,Beyeler:2,ballet:80,grapples:20,freelance:1,Yemma:2,"sweat-suits":4,balled:17,grappled:16,underlining:55,circumstances:4,tenacious:1,Barret:2,windshields:4,paychecks:4,jerk:25,enflamed:17,Barred:17,gloomy:1,Levittown:2,Barren:2,locked:81,"upper-lower":1,exact:82,minute:22,"Tri-State":2,Hellman:2,reining:8,skewed:45,illustrators:4,erasures:4,reimpose:83,"M$":84,Silvio:2,hindered:54,"M.":11,ogles:20,"M4":2,Olgivanna:2,chopping:55,hegemonic:1,"SFr3":2,"SFr2":2,DeRita:2,celebrated:85,Premise:2,"S*/NNS&Ls":2,"non-caffeine":1,celebrates:20,unintentionally:6,Metrecal:2,Me:86,Md:2,Ma:87,Mc:2,climbs:72,blunted:85,Mo:2,Mi:87,plucking:8,Mt:2,Ms:2,Mr:2,dwindling:8,My:88,ME:53,MG:2,MF:2,MC:2,MB:2,impacted:14,MO:2,Pestillo:2,Haddix:2,snowbirds:4,sprouted:32,MP:2,MS:2,MR:2,"ill-fated":1,Kylberg:2,Jardin:2,stockbuilding:8,Dilantin:2,POWs:4,"Germano-Slavic":1,redevelopers:4,"ex-wives":4,BOOSTS:18,opposes:20,August:2,perished:32,Watsonville:2,ARNOLD:2,"non-Magyars":28,Rima:2,unjust:1,Pinsk:2,Those:89,perishes:20,Iris:2,Szocs:2,ADVANCES:4,Proposals:4,Bars:2,Henley:11,consoles:18,Barr:11,ADVANCED:2,"gray-black":1,Pianos:2,Mikoyan:2,Hershey:2,"pre-financed":1,Laotian:1,Wetherell:2,following:5,renew:42,Revolutionaries:4,unoriginals:4,want:90,mailboxes:4,Symphony:2,Chula:2,Dayna:2,Shige:2,photoelectronic:1,Mantha:2,"petroleum-related":1,Broglie:2,Broglio:2,"T-bills":4,"anti-toxic":1,"mid-September":11,thanking:8,Sprizzo:2,Significant:1,Dumb:1,Bard:2,epidemiologic:1,Zucker:2,convincingly:6,fueled:54,Wiesel:2,"warm-blooded":1,"extended-care":1,"under-achievers":4,Crobsy:2,"advertiser-sponsored":1,inhabiting:8,"middle-income":3,forebears:4,Gillespie:2,Centredale:2,Lumex:2,"gold-based":1,shirked:17,Bowie:2,LIN:2,Hiroaki:2,copious:1,LIT:2,"anti-Semites":91,Trustees:92,Elias:2,Cromwell:2,Wetten:64,disconnect:39,milked:32,Stoltzman:2,Agencies:56,Hopis:28,"revenue-raisers":4,"First-hand":1,librarians:4,spotlighting:8,"gold-leaf":3,"oral-care":1,Veil:2,Hiding:8,shacked:17,Iraqis:28,ENERGY:47,bashful:1,"EL-10":2,overpowering:1,Gordon:2,"now-standard":1,workmanlike:1,henpecked:1,sorted:54,bedevil:39,didn:16,pealing:8,Yellow:40,Bubenik:2,Roslyn:2,"Merieux-Connaught":2,growthy:1,bursting:8,Yoshiaki:2,presages:20,growths:4,Venturesome:1,frames:4,irremediable:1,entering:8,Soiree:2,salads:4,disasters:4,Deborah:2,Jiangsu:2,assessors:4,Imasdounian:2,Michigan:40,Nightclubs:28,"staff-written":1,seriously:6,TIGRs:2,calming:30,"cash-back":1,Bouvier:2,Westpac:2,incentives:4,Recital:2,Johsen:2,inwardly:6,crazies:4,"la-la":1,backfiring:8,"Sun-3\\":2,Ventes:2,"precious-metals":93,modest:1,Kepler:2,Voegtli:2,socking:8,Yucaipa:2,hemorrhoids:4,Norwalk:2,"top-heavy":1,Latchford:2,"cigarette-vending":1,spoken:14,twined:32,Pixley:2,"NIH-appointed":1,spokes:4,Sinyard:2,affords:20,Palos:2,Drouot:2,Monday:2,"Cia.":2,"inflation-offsetting":1,"carbide-products":4,Stuckey:2,Mounted:2,lingering:30,subcompacts:4,Omron:2,RAISED:16,"solid-waste":22,surges:18,snatch:42,retrogressive:1,Smaby:2,"Hamilton-oriented":1,absorbs:20,surged:32,"drug-cartel":1,History:47,"government-guaranteed":1,Equinox:2,Ciao:64,crossroads:91,"so-so":3,oerations:4,wandering:8,Waring:2,sumptuous:1,turned:32,jewels:4,Field:11,Hubay:2,uninterrupted:1,Nummi:2,"Exchange-listed":1,politicos:4,fashionable:3,Forester:2,"market-monitoring":1,Klesken:2,pistachio:1,opposite:94,discerning:1,"below-investment-grade":1,spewing:8,Darman:2,Plentywood:2,Depositors:4,Wong:2,Depository:2,Melsungen:2,Sochaux:2,"non-vaccinated":1,touchy:1,Hurwitt:2,Instances:4,jitters:91,jittery:1,scavanged:17,Sibley:2,"lung-function":1,unmistakable:1,imagines:20,Ethiopia:11,inconsistent:1,imagined:45,"area-sales":1,ensembles:4,reconciling:8,transact:39,Duponts:28,aimlessly:6,Adia:2,Dolmabahce:2,"seven-unit":1,Alfieri:2,rejoiced:16,Surprising:1,revolutionized:32,balconies:4,skiffs:4,rejoices:20,etcetera:80,recombinant:1,keenly:6,Winnie:2,recurred:32,Facilities:41,airily:6,YES:2,Pawtucket:2,"Old-time":1,WTBS:2,"gold-share":1,"printing-ink":1,Osbert:2,Nearing:8,Ringo:2,MerchantsBank:2,FIAT:2,defensively:6,"Arabian-American":2,"foreign-investment":1,Lermer:2,"field-services":1,Designated:2,Wisdom:11,vaccines:4,unlocks:20,moons:4,Kadane:2,Ziegfeld:2,welcomes:20,"food-sector":1,Rademacher:2,"severe-looking":1,Harbor:2,Wachter:2,Oglethorpe:2,VGA:2,Katzenjammer:2,Mazowsze:2,Teeth:4,menacing:13,wickedly:6,Cosmos:2,uncharacteristically:6,"Ashington-Pickett":2,majestically:6,Collectors:4,Hwang:2,catcalls:4,workplace:22,grooming:21,fix:95,Yosemite:2,Kaganovich:2,Fairbanks:2,Whiteley:2,Smiths:28,Carnegey:2,cribs:18,Nedelya:2,Shouldering:8,Alperstein:2,Chaseman:2,Caius:2,"network-buying":1,"A.C.":2,west:96,Interscience:2,Asheville:2,motives:4,MountainBikes:28,BankAmerica:2,readings:4,photos:4,tightened:32,offshore:97,abject:1,extant:1,Prompted:17,Adjusted:98,Muenchen:2,Pozzatti:2,bankrupts:20,Cooch:2,graphed:17,Zhitzhakli:2,"over-stitched":1,limping:30,depressors:4,demolition:22,Norcen:2,ingrained:1,sinuously:6,Profili:2,Apocrypha:28,Kiko:2,Kiki:2,Blood:11,Bloom:2,visually:6,assigns:72,Map:2,"saber-toothed":1,Clear:2,IRS:2,"anti-Honecker":1,IRI:2,Anywhere:6,Clean:99,Barend:2,IRA:11,Temper:47,Tappan:2,wane:95,Whiting:2,Mednis:2,"Non-lawyers":4,Longley:2,flatish:1,May:100,peculiarities:4,nonunionized:17,Berlitz:2,Sigmund:2,"highest-ranking":1,Magellan:11,persistently:6,NAB:2,NAC:2,Mudugno:2,Conceivably:6,being:101,Diesel:11,NAM:2,NAR:2,NAS:2,Aeschylus:2,"B.G.":2,Megargel:2,Completed:17,adroit:1,plunderers:4,Mac:2,plumed:1,saddened:7,plumes:4,Crane:2,Completes:20,FOREAMI:2,"foot-loose":1,"customer-oriented":1,unerring:1,Tarnoff:2,rejoin:42,decomposed:1,sums:18,romps:4,spokespersons:4,decomposes:20,Manon:2,sensational:1,Coontz:2,Millenbruch:2,conpired:17,Sergio:2,Electrochemical:2,Warming:8,Valiant:2,"pizza-eating":1,Suggs:2,obstruct:42,Case:11,satisfactory:1,NAFTA:2,Aligning:8,Expressed:17,pervading:8,Expresses:20,Sorkin:2,Hanifen:2,Pharaoh:2,Verwoerd:2,ravines:4,"bench...":102,Chausson:2,"bravest-feathered":1,averse:1,disparaging:8,Pooling:2,Gaul:2,KCs:4,Knows:20,exasperating:30,Bramah:2,ferromagnetic:1,revolutionists:4,"one-iron":1,Agoura:2,KCS:2,Gloria:2,Lindzen:2,Hesburgh:2,perturbed:103,commingled:17,tangoed:16,revivified:17,Herber:2,Celie:2,lively:97,Celia:2,pivot:104,biches:4,gnashing:8,bubbly:3,gleam:78,glean:39,Galamian:2,Peninsula:2,Calder:2,Steckles:2,sealed:45,cupids:4,bubble:24,"Political-Military":2,"tire-makers":4,secreted:17,emigres:4,societal:1,Southgate:2,with:105,Redevelopment:2,abused:81,rage:25,"self-seeking":3,"upper-level":1,chomped:17,rags:4,operationally:6,FRANKLIN:2,abuses:4,Berea:2,trips:4,"dance-committee":1,Beaubien:2,Hormats:2,Cinderella:2,POLITICAL:1,Auerbach:2,watches:18,Meineke:2,incepting:8,associating:8,"follow-up":22,creak:25,tremble:63,"C.H.":2,cream:22,Ladd:2,Lada:2,Burnley:2,sympathetically:6,unparalleled:1,Savior:11,Bunyan:2,Incinerator:2,Lady:11,Amadee:2,faxes:4,refunded:17,waving:55,Kaufnabb:2,faxed:32,hairsplitting:1,linebackers:4,LeFevre:2,tricky:1,Krims:28,twinges:4,Henh:106,"Mercer-Meidinger-Hansen":2,Explained:2,maliciously:6,Casinos:4,Lyric:2,"pre-Revolutionary":1,Moorhead:2,accreted:17,Hens:57,"industry-government":3,legislatures:4,"head-to-head":107,Drinkhouse:2,caused:54,beware:42,ceramic:1,unitholders:4,About:108,"tax-loss":22,Farley:2,Alperts:4,causes:18,Galsworthy:2,"Rodney-Miss":2,predawn:1,"front-desk":22,"contraction-extension":1,overexpose:39,Grappelly:2,"break-neck":1,floated:32,TRANSCANADA:2,Menzel:2,Wilkes:109,Maniffature:2,Wilkey:2,insufficiently:6,sang:110,Hoxa:2,sane:1,Semifinished:17,sana:64,senselessly:6,sank:16,abbreviated:1,OEP:2,ultravehement:1,Thrice:6,"strong-willed":1,topcoats:4,psychosomatic:1,straggle:33,"Dutch\\/Shell":2,"computing-services":1,PAYS:20,Ogilvy:11,dwells:20,hash:44,obtrudes:20,Huntley:2,Departments:111,strata:4,daunted:112,OEC:2,unrewarding:1,hast:33,"less-complicated":1,MANHATTAN:2,Histadrut:2,Concept:2,Fawkes:2,Mercer:2,Rodman:2,Vaikule:2,periodic:1,"free-on-board":1,Quintet:2,Chazanoff:2,dehumanized:17,Alsatian:2,depart:42,retroactive:1,reclaimed:45,Scorpio:2,traumatized:32,"full-sized":1,Puttin:2,cynics:4,launchings:4,"shape-up":1,Crash:11,prejudging:8,Dumpster:2,Bamford:2,"cat-and-mouse":1,"act...":102,"failure-to-supervise":1,initiated:54,Frumil:2,corrected:45,Subways:4,initiates:72,Subic:2,"survey-type":1,Cybill:2,stampings:4,Willows:4,Gods:113,installing:8,Corsicas:4,CORTES:2,resorcinol:22,"ice-breaker":3,knocked:32,grope:42,scramble:24,Panasonic:40,bogs:20,Guppy:2,meaner:12,Called:114,Somali:66,clotheslines:4,allegro:1,"electric-driven":1,Grits:2,recapitalize:39,Wolfson:2,Quinta:2,Glasgow:2,bonded:14,huge:1,Murkland:2,hugh:1,dismissed:32,Frances:2,"top-selling":1,Hering:2,hugs:4,dismisses:20,Sigmen:2,Skorich:2,thickened:54,disgraced:17,variant:22,ineffectively:6,Declan:2,malevolent:1,"loan-to-value":1,resemble:42,twisting:55,"France.":2,Nero:2,media:91,exclusions:4,Ikle:2,everlastingly:6,accuse:42,Oilfields:4,peppy:1,installed:81,enrollments:4,paper:25,spirituals:4,sceneries:4,bummed:17,Parental:1,boomerangs:4,Fisheries:74,bypass:63,"non-subcommittee":1,Brussels:113,reintroduced:54,Loma:2,Lomb:2,abandons:20,"MS-DOS":2,deliberating:8,Berkman:2,idols:4,Markovic:2,Ameritech:2,Curley:2,"cigar-making":1,Satires:28,"anti-price-fixing":1,Authority:11,courses:4,"Day-to-day":1,Oswald:2,shocking:13,chipping:55,begged:32,Bosak:2,cicadas:4,"C.W.":2,Bergman:2,"scarcely-tapped":1,scoops:72,"boxed-in":1,research:44,"life-changing":1,Report:115,Jewett:2,electricals:4,cables:4,Muzo:2,Canute:2,Bohane:2,CIRCUIT:2,ecologically:6,Nino:2,Buell:2,"carry-on":3,Exitosa:2,MGM:2,Fawaz:2,Thyssen:2,precautionary:1,Remains:4,Dalai:2,Delancy:2,Agonale:2,peaceable:1,CH:47,Started:17,swipe:25,Giraffe:2,"intra-EC":1,calculations:4,Homebrew:2,essays:4,Starter:2,"scimitar-wielding":1,"hand-covered":1,"age-and-sex":1,Bugs:113,cheekbones:4,Trinen:2,Dludsky:2,stifle:39,evicting:8,Treble:2,Hogg:2,Cancer:11,Hoge:2,"de-emphasized":17,Hogs:4,dismantling:55,Shiloh:2,"mass-producing":8,"country-and-Western":1,Speculative:1,exuberant:1,"forward-moving":1,swanky:1,"Metro-Goldwyn-Mayer":2,Oldsmobile:2,"Anti-Deficiency":2,mutilates:20,blond:3,Etess:2,odors:4,Founding:116,fermented:17,"single-B-minus":117,peridontal:1,recognizing:8,Othello:2,Addis:2,Recreation:11,singles:18,Consultant:11,Pollare:2,Energetic:1,understands:20,wiggled:16,seize:42,Brownapopolus:2,OTC:2,proliferated:118,cultivating:8,administrate:39,Indirect:1,OTS:2,harvests:4,ambiguities:4,"husband-and-wife":3,"far-flung":1,exterminate:39,agonize:42,Deadly:1,Motown:2,affix:39,Amgen:2,Pepperdine:2,Behold:39,overwhelmed:45,Bast:2,Basu:2,Bass:11,"two-room":1,Premiere:2,Patrolmen:2,gooey:1,Basf:2,Maxxam:2,Base:11,Dire:1,Dirk:2,Palash:2,"non-wealthy":1,columns:4,chiefdoms:4,uncontested:1,mousetraps:4,"pleasure\\":119,Cooker:2,Lesley:2,adventurers:4,Aroostook:2,Cooked:14,remedy:25,"Delaware-based":1,Finevest:2,compass:25,damnit:106,sects:4,incapacitated:17,"well-off":1,tanked:17,Improper:1,Surveying:8,rumored:45,insane:1,Criticisms:2,handcuffs:4,GROUP:11,Sener:2,bundling:8,activists:18,"Thirty-ninth":2,collectively:6,Founders:41,semidrying:1,analog:22,Osram:2,Straightening:8,Roukema:2,dipole:3,Peggy:2,exclaimed:16,Tieken:2,ablated:17,thrive:42,Hollowell:2,pantomimed:16,"hunter-gatherers":4,NEKOOSA:2,condoned:54,Fulton:2,empowering:8,Neil:2,legitimately:6,KRENZ:2,"Boy-Lady":2,Wilde:2,"al-Husseini":2,Acapulco:2,retarded:3,Wisely:6,Breton:2,Clyde:2,Mecholyl:2,Peanuts:46,nimbler:12,Cary:2,Blaikie:2,Leiby:2,Cars:41,Stoutt:2,imperfections:4,longs:20,extravagant:1,Carl:2,Cara:2,Card:11,Care:120,Polly:2,"N.C.":2,"Spike-haired":1,Polls:4,complements:72,awake:121,Sinfonia:2,Pollo:2,Harriet:2,Harrier:2,Hiroshima:2,Giblen:2,"lace-drawn":1,presses:18,"Slim-Fast":2,Markel:2,Drennen:2,budget:25,Colston:2,Biopharm:2,Markey:2,pressed:54,Brauerei:2,Market:11,"error-laden":1,averaging:5,binding:122,"deferred-maintenance":1,"signal-processing":3,Expressway:11,"contract-services":4,Bouwer:2,raiders:4,Norwick:2,Norwich:2,Leibowitz:2,"U.S.A":11,behemoths:4,Spencerian:1,Tidal:2,Payments:123,affairs:4,"most-watched":1,"U.S.$":84,cardholders:4,Miners:2,Likud:2,nickname:44,infamous:1,Regulator:2,Oregonian:2,Haas:2,"Mexico-based":1,Manny:11,Taster:2,Mockowiczes:28,copes:20,clasped:32,Reidy:2,"O.":2,"quick-fix":1,uncouth:1,salvo:80,"World-Wide":40,Boyde:2,Grenier:2,Orphic:1,"harness-emotions":1,Colorliner:2,salve:25,Marsh:2,Harland:2,avionics:91,"no-strike":1,"pool-side":3,"F.O.":2,Brando:2,Nationally:6,Brande:2,"multi-year":1,Brandy:2,parents:4,Brands:46,"Old-House":2,Brandt:2,On:124,Ol:1,Ok:11,Oi:2,Oh:125,Of:124,couple:70,emanating:8,Pepinsky:2,oneyear:1,polemic:1,Oz:2,Oy:2,Buzz:2,colonials:4,"credit-reporting":3,Or:119,"Cairo-sponsored":1,OK:126,Schacht:2,OF:127,Show:128,Schotter:2,Kaydon:11,Heideman:2,OR:119,Treatment:11,Burlingham:2,crapshoot:25,bounce:95,bouncy:1,"gold-filled":1,"earthquake...":102,greener:12,sorbed:17,orderings:4,Yacos:2,"Japanese-based":1,microbes:4,Rosty:2,Frank:74,Witter:2,Frans:2,Ogisu:2,Witten:2,"Drexel-underwritten":1,Franz:2,Aviation:11,Hells:2,Sculley:2,Liaisons:4,"electronics-instruments":1,"less-aggressive":1,Reeder:2,Hello:106,browny:1,disjointed:14,"Soft-spoken":1,scraggly:1,Kassebaum:2,Oso:2,Winnetka:2,Rican:10,canning:27,Suhey:2,"well-versed":1,"seven-figure":1,Herslow:2,terrorists:4,disturbingly:6,"disease-resistance":1,bloodspots:4,Flights:4,controversies:4,"el-Fna":2,controllers:4,Corvallis:2,Pellicano:2,uncertainties:4,discoid:1,Dime:2,gases:4,atheists:4,"four-jet":1,fragmented:7,Natcher:2,Principal:129,"market-reform":1,Natchez:2,"junior-year-abroad":1,carping:5,Boswell:2,HelmsleySpear:2,Resolution:11,intestines:4,Spinnaker:2,Consolidated:98,testaments:4,paired:81,retaliatory:1,purges:72,Magoun:2,Apex:2,Goudsmit:2,Enthoven:2,deadliest:51,haunt:95,Vauxhall:2,bobbed:16,Twins:130,nectaries:4,"self-victimized":1,"tragi-comic":1,unsaturated:1,"non-Fed":1,intrepid:1,puzzling:13,Hollins:2,Hazel:2,Noticing:8,Last:131,Gephardt:2,Senor:2,depredations:4,myofibrils:4,"trans-illuminated":1,litigants:4,Larchmont:2,Longwood:2,Ludie:2,bibliographies:4,interfaith:1,Dort:2,Devery:2,methodologies:4,"Pitman-Moore":2,"time-share":1,"Sacramento-based":1,transient:1,Stamford:2,"F.E.":2,Hodson:2,Bolivar:2,Doubt:78,hepatitis:47,"Aguirre-Sacasa":2,conservative:3,"two-seater":1,Shortridge:2,detectives:4,unforseen:3,glows:4,Bobar:2,carelessly:6,Bince:2,dicker:39,account:24,Ornithological:2,Loantech:2,minerals:4,detested:32,Intercity:1,"Scobee-Frazier":2,extraditing:8,Negus:2,"less-than-brilliant":1,vouchsafes:20,Bankruptcy:11,"stair-step":1,Begins:20,Haqvin:2,Winchester:11,cannibals:4,"castle-themed":1,progenitors:4,Catskills:28,Hollsworth:2,dynamics:4,tempted:54,lawbreakers:4,sweats:4,Association:11,"alpha-beta-gammas":4,waning:8,Kathryn:2,multimedia:4,sweaty:1,flowing:30,Handels:2,continously:6,harassing:8,Brasilia:2,"wishy-washy":1,Luciano:2,Puppies:4,squirming:8,"garbage-to-energy":1,Seddon:2,"hi-tech":1,credits:18,Recycling:11,ould:1,"information-technology":1,Alien:2,makes:132,hasps:4,panicked:112,Tito:2,Pigeon:2,NASDA:2,Beronio:2,nibbling:55,McKusick:2,desiring:8,Solo:40,Bookman:2,Presently:6,HEARS:20,incertain:1,Sold:17,Sole:11,Siegel:11,Masami:2,Neutral:40,surrogates:4,NATO:2,Kauffmann:2,Jadwiga:2,"ex-FDA":1,"arbitrage``":133,Chatsworth:2,EURODOLLARS:134,rich:135,stolidly:6,undeclared:1,Laporte:2,Hiawatha:2,Growing:8,Blackfriar:2,Madam:2,Shurtleff:2,integrating:8,Fiedler:2,"trans-lingually":6,unknowns:4,reserves:18,retell:33,Overland:2,"English-language":3,Lawford:2,scatter:25,Harnischfeger:2,"field-service":1,murmuring:8,billboards:4,rode:16,"Democratic-controlled":1,Panmunjom:2,bolstered:54,Rosie:11,"cross-eyed":1,Vesole:2,clasping:8,"fine-looking":1,SCRAP:33,disassociated:16,"re-entering":8,Glowering:8,Forseth:2,Spanberg:2,Ono:2,Ong:2,Grosse:2,Bleeker:2,Laugh:2,Maccario:2,"Nine-month":1,Madson:2,evolutionary:1,"non-church":1,volts:4,Shigeru:2,altogether:6,Fitzgerald:2,"Lincoln-Mercury-Merkur":2,"summer-holiday":1,Mikie:2,"long-lived":1,Reconsider:39,Emergency:11,"cut-rate":1,BRIDGEPORT:2,"high-price":1,accompaniments:4,"barrel-wide":1,derivative:3,Home:11,LYNCH:2,physicians:4,prosper:39,Yongjian:2,Teleprompter:2,Fortified:17,Morrill:2,Register:2,creedal:1,"Long-Term":40,"junior-high":1,Extensions:4,Sense:47,"nose-dived":32,Creators:4,grimaced:16,STOCK:47,"off-center":1,"five-party":1,"far-famed":1,concave:1,Riely:2,Wenceslas:2,invertebrates:4,Bonanno:2,reproducing:8,homogeneous:1,Landis:2,Molloy:2,Dunes:41,"gravel-voiced":1,Recyclers:28,Anniversary:11,Dropping:8,Cheng:2,Seiyu:2,patch:25,witness:25,Treausry:2,Noting:8,frowns:20,"market-on-close":1,DuroTest:2,Shortly:6,unwieldy:1,greedy:1,Monopolies:111,convolutions:4,ServantCor:11,Hammersla:2,Ecco:2,Oros:2,Angola:2,Juliano:2,"U-I":2,Zayre:2,Plenary:2,underinvestigated:1,troughed:16,BOSSES:2,Calvert:2,receding:8,"upper-class":1,imprecates:20,jurists:4,REINSURERS:4,Refco:2,"landlord-tenant":1,Kubek:2,Connecting:2,Backstairs:4,WORKS:2,vetoed:32,Dunston:2,erstwhile:1,"foul-ups":4,Pinter:2,onslaughts:4,Kikkoman:2,interests:18,Boardman:2,Dill:2,Roosevelt:2,Xenia:2,Copperman:2,incongruities:4,Heckman:2,Existing:30,"non-research":1,orchestrated:32,"Ashton-Tate":2,gays:4,Doswell:2,Tennesse:2,Negotiable:1,Oldenburg:2,false:97,shrinks:20,chivalrous:1,Fenimore:2,"cost-reduction":3,tonight:43,Secret:40,Ledge:47,"wave-setting":1,mustachioed:1,depict:42,Mulloy:2,"how-to":1,Fukuyama:2,cloakrooms:4,teetered:16,Invisible:2,Lansbury:2,"tall-masted":1,Sysco:2,"Brown-tobacco":1,Fizkultura:2,"hoof-and-mouth":1,cipher:39,Mode:2,jimmied:16,"oil-slicked":1,Wheatena:2,"so-called":117,Barasch:2,Soderblom:2,bred:54,Adaptaplex:2,Belisle:2,lots:4,consorting:8,brew:25,"back...":102,Unstained:1,Hasenauer:2,Brandes:2,Reliance:11,"free-traders":4,Brandel:2,replaster:39,taps:18,trying:5,Betsey:2,quickened:32,Curzon:2,entities:4,irk:39,tape:44,"reggae-and-rock":1,riding:5,Storekeepers:4,preliminaries:4,Schlieren:2,undivided:1,Hooked:16,Tasso:2,"I.R.S":2,unbundle:39,EnClean:2,Keen:2,wring:39,strollers:4,monkish:1,Rating:11,"five-block":1,"State-run":1,"fez-wearing":1,comprising:8,taxes:18,"low-value":1,stuff:44,"cabaret-like":1,taxed:81,Landesrentenbank:2,Brent:2,guessing:55,deathward:6,frame:24,AmeriGas:2,Joachim:2,Fe:2,"knee-type":1,Hooker:2,Linden:2,Nagayama:2,Yanks:123,Issam:2,nuclear:1,Hindoo:2,Issak:2,roiled:17,STUBBED:17,"onward-driving":1,Linder:2,"incumbent-protection":1,"post-bankruptcy":1,Succasunna:2,Courbet:2,"hot-selling":1,Clairson:2,staring:8,handstands:4,challengers:4,marts:4,Circus:2,Leontief:2,"Zurich-based":1,Ione:2,"award-winning":1,Musmanno:2,exalting:8,"near-term":3,Ledger:11,indict:39,stylistically:6,scapulars:4,"Certificates-a":74,Meadows:2,balloonists:4,decanting:8,"open-shelf":1,genetic:1,willing:13,entitle:42,Aziz:2,feather:25,GRiDPad:11,"Land-based":1,commutes:18,commuted:54,Vicks:2,Kupor:2,MARKS:4,swindling:8,Vicky:2,banish:39,countermeasures:4,sourly:6,Widener:2,Verbrugge:2,Ebersol:2,OECD:2,Bethlehem:2,"Mahal-flavor":2,Virginians:28,westerly:97,"Greek-speaking":1,Noces:87,Dalfen:2,Yazov:2,greater:136,ostentatious:1,descendants:4,Judie:2,Regular:40,Stanbury:2,chronicling:8,unimaginable:1,Mandelbaum:2,nondescriptly:6,"high-standard":1,diplomatically:6,Decker:2,polyesters:4,heathenish:1,"Hanover-Precious":2,Dulles:113,"non-fortress-like":1,off:137,EYP:2,provocatively:6,SHIBUMI:2,southeastern:1,oft:6,windowless:1,"Bambi-syndronists":4,reefs:4,newest:138,Similarly:6,"peer-group":1,Lover:11,resuspended:54,Siegman:2,Joyo:2,Camdessus:2,monetarist:22,Ramcharger:2,granulocytic:1,"W.D.":2,Schering:2,"too-expensive":1,moralities:4,"hot-rolled":1,neoliberal:1,Countrywide:2,crack:139,Unfurling:8,"one-percentage-point":1,Lebo:2,Qualitative:1,stooped:16,falters:20,Ghent:2,RESOURCES:2,debatable:1,Virdon:2,bulge:25,"Insta-Care":2,"sharp-jawed":1,Gino:2,Agents:56,Hondurans:4,become:140,Earthbeat:2,Lauritsen:2,Purves:2,Newburgh:2,Kidder:141,"stress-producing":1,"Rykoff-Sexton":2,"Food-price":1,castorbeans:4,hissing:21,Feldstein:2,Belvidere:2,Warrior:2,"cutting-tools":4,"five-by-eight-inch":1,Fruehauf:2,Kikuyu:2,Komurasaki:2,Telefonos:74,Jaggers:2,"last-resort":1,Utopia:11,torched:32,tubing:142,imaginary:3,Judgments:4,debentures:4,grayer:12,SalFininistas:2,Cos:74,Replace:39,Glassell:2,"moss-covered":1,curative:1,grayed:1,swimming:5,cultivates:20,"high-priced":1,letters:4,Somewhere:143,Propulsion:2,Caesars:74,"Ravel-like":1,Schmalzried:2,unstanched:17,cultivated:81,HOLIDAY:11,bothers:20,glistened:16,brownies:4,"Corton-Charlemagne":2,nonfarm:1,splintered:103,pairing:21,"faster-growing":12,providential:1,"solid-muscle":1,terminates:20,Billings:123,sommelier:64,"Majdan-Tartarski":2,Exact:1,Wimpys:2,"public-housing":3,Sanitation:11,Kloman:2,"Lo-Jack":2,"cancer-gene":1,FormBase:2,Bohn:2,Lifson:2,Healthcare:129,Milstar:2,"Nu-West":2,"Guber\\/Peters":2,tossed:112,evident:1,shrunk:17,Terrizzi:2,wheellike:1,tosses:4,"office-supply":1,"man-to-man":6,Bumkins:2,Cementos:113,Argonne:2,obese:1,Nath:2,Alleghany:2,"fine-featured":1,Nate:2,"smoothed-muscled":1,nonetheless:6,tubular:1,Somers:2,decisional:1,Khare:2,details:18,"D.W.":2,"Corp.":11,rebelled:32,Accord:2,Trickster:2,Matais:2,Peery:2,Druse:1,outlets:4,treelike:1,ULI:2,"Monterrey-based":1,Delwin:2,Michaels:113,"export-driven":1,Octoroon:2,Corps:144,compete:42,villainous:1,Philly:6,Infotab:2,"non-Alternative":2,"near-strangers":4,clamoring:8,Agile:145,magnetic:1,Kensington:2,Interlude:2,Roche:2,Rocha:2,tenuous:1,Partecipazioni:2,stinks:20,Brainard:2,"self-consuming":1,Assemblyman:2,periodicals:4,Immediate:40,propellants:4,neighbours:4,Greenshields:2,"over-the-road":1,worth:146,alternating:8,Aaawww:106,Ametek:2,perishable:1,Mancini:2,Shaughnessy:2,Pipe:2,summarized:54,"pre-employment":3,"Hands-off":1,"white-collar-defense":1,"five-ply":1,blanche:3,"by-election":22,Subsidies:4,debunked:17,samurai:147,superlunary:1,Zagaria:2,Conning:2,"weapons-plant":1,professionally:6,Boats:123,Thema:2,Troubled:148,shatteringly:6,Capra:2,machines:4,Salle:2,"food-service":22,Fireman:11,"time-tested":1,Grandis:2,offshoots:4,Whirling:1,Mazda:2,Sedan:2,Olatunji:2,Nietzsche:2,Photograph:47,"No-o-o":106,viewings:4,Caradon:2,PARIS:2,"sub-therapeutic":1,Linville:2,equals:72,remarried:32,Cadre:2,Algonquin:2,Taisei:2,"non-Mexican":1,Marshal:2,stresses:18,bilevel:1,Duero:2,fireballs:4,"catch-up":22,Barabba:2,Riefling:2,stressed:85,otters:4,Absolute:1,Brownell:2,Economdis:2,inequitable:1,Raymonda:2,inequitably:6,"building-supplies":4,Satan:11,compulsively:6,HOLLYWOOD:2,Cestre:2,Shootin:8,Bellini:113,fulfull:39,"W.I.L.D":2,unrehearsed:1,Poughkeepsie:2,spearhead:63,administering:8,sweated:32,exacts:20,Competes:20,Consort:2,Skye:2,Extracts:4,simperers:4,ascribe:149,"two-drug":1,regrouping:21,championships:4,"profits-optimism":1,overstretch:39,Thurmond:2,"Count-Duke":2,Ormoc:2,Normally:150,Svevo:2,divorced:81,Steele:2,honeymooners:4,cuddly:1,divorces:4,Steels:113,Abe:2,quivering:8,relativistic:1,DiLorenzo:2,Abt:2,Abu:2,Schenley:2,"RTC-owned":1,totaled:151,Caniglia:2,impassive:1,confidential:1,Seafirst:2,rationed:17,nuts:152,photoelectrons:4,"corporation-socialist":1,Lelogeais:2,LATEST:51,chines:4,Griggs:2,Invoking:8,Duluth:2,misleads:20,Huard:2,Farrell:2,"Anglo-Dutch":66,purging:55,"pre-1986":1,CALL:153,Mandom:2,"well-born":1,crystallographic:1,Colucci:2,greasies:4,Brasiliaaircraft:2,Guest:11,slimmed:17,undetected:1,ancients:4,slimmer:154,coiling:8,"counter-drill":39,understates:20,defrauded:32,understated:45,"single-A-1-plus":2,fumigants:4,Cherwell:2,underperform:83,Oman:2,Keepers:4,Motion:11,Omar:2,Hamburger:47,sizenine:1,"Cross-Purposes":28,"Reno-Lake":155,principals:4,Schoenberg:2,reasonably:6,routines:4,reasonable:1,Broadcasters:56,Volatile:1,feeds:72,"Turin-based":1,volcanos:4,unfocused:1,dumping:55,emeralds:4,Type:47,Brunswig:2,chauvinistic:1,Aubrey:11,Gumucio:2,trainers:4,ruggedly:6,"out-of-sight":1,"drawn-out":1,"self-important":1,disputed:45,bellhops:4,Ubberroth:2,certifies:20,"funn-eeee":1,disputes:18,enlightened:7,certified:14,scabs:4,chortled:32,Ugh:106,Parade:2,AFFLUENT:1,flawless:1,chortles:20,manias:4,generalizations:4,JERSEY:2,Amendments:65,Tracey:2,"re-enact":39,railroads:4,hamstring:39,another:156,Manfred:157,Vulturidae:4,Flavel:2,Azoff:2,alcoves:4,illustrate:42,reconfirming:8,"public-sector":22,tossers:4,takeovers:4,"more-than-ordinary":1,"sweat-saturated":1,Sangamon:2,"mail-sorting":8,dogs:18,incitements:4,Pike:2,Rushdie:2,Rare:1,"over-large":1,offhand:1,Spaarbank:2,Andersson:2,enmeshed:17,"anti-missile":3,"luxuriosly-upholstered":1,"volume-decliner":1,Lewtas:2,Spontex:2,Hazzard:2,lanzador:64,microfossils:4,Hiltunen:2,resettable:1,"well-meaning":1,Lendrum:2,Zamislov:2,respecting:8,Venable:2,Lincoln:158,Talbott:2,sportsmen:4,Kinnear:2,admittances:4,refreshingly:6,impelled:54,DeKalb:2,contents:4,"Q.":2,Pravda:2,"semi-conductors":4,"field-based":1,convenient:1,Confiscated:159,subjects:18,quadric:22,thundering:30,Emyanitoff:2,Flamingo:2,Splits:4,Button:2,Resolving:116,troughs:4,"Machine-vision":1,"weak...":102,ramblings:4,Yutaka:2,"return-on-savings":1,Atchinson:2,"blood-pressure":3,nostrils:4,witnessed:54,Shanties:28,enshrined:17,QB:2,QE:2,reserve:139,Fultz:2,yachters:4,Atala:2,ESOP:11,Refinements:4,"foamed-core":1,bellow:25,"value-oriented":1,Yocum:2,witnesses:4,Mapco:2,Moselle:2,Photography:2,"mid-flight":6,"fuel-guzzling":1,Krueger:2,completes:20,industriously:6,cashews:4,facaded:17,Haitian:1,tracers:4,Sass:2,"tin-roofed":1,machos:4,"fluid-filled":1,haunted:45,roundabout:1,"Curie-Weiss":2,"rolled-up":1,conventioneers:4,runs:72,Donoghue:128,"SMALL-COMPANY":1,Pearce:2,gears:18,rung:160,Psychical:1,insurgents:4,freshwater:12,Loeser:2,Clifford:2,smoldered:32,AEP:2,AES:2,Jackson:2,Caracas:2,AEW:2,"shoe-horn":39,Shinton:2,AEC:2,Bleier:2,bullhorns:4,AEG:2,horrendous:1,"Judeo-Christian":1,Meyohas:2,pastel:3,draws:72,smoggy:3,pasted:54,Horror:2,Fifteenth:40,Workmen:4,drawn:14,encounters:18,Micha:2,pastes:4,Domingo:2,"A310-300s":2,Hudnut:2,"rush-hour":1,succumbs:20,"non-skid":1,Koeppel:2,"Self-Government":2,Perish:39,essentially:6,psychologists:4,Bring:39,"Mich.":2,Gtech:2,Dawn:11,Brink:2,Telemann:2,tone:25,SkyWest:2,Conservationists:4,had:32,Molokai:2,engulfs:20,Furhmann:2,anticipatory:1,tons:4,infirm:1,tony:1,guzzlers:4,Taccetta:2,Tchalo:64,Connecticut:11,Hungarians:65,Barge:11,Mamaroneck:2,plebeian:1,excite:39,Elections:123,psychically:6,novitiates:4,Horstman:2,reciprocal:1,"Canada-Newfoundland":2,rattlers:4,thrash:39,endpoints:4,Lamberjack:2,Massey:2,Marenzio:2,beetles:4,Amfac:2,unblinkingly:6,CVN:2,dizzy:1,teutonic:1,spectrometric:1,CVB:2,"chip-design":1,municipal:3,bilious:1,"pesticide-free":1,Santas:28,"Ill.":2,addressees:4,Smug:1,"wider-body":12,disciplining:8,Classroom:2,fuss:25,Lyndhurst:2,unready:1,"Denver-based":66,"TND.B":2,fuse:25,Bloeser:2,rasping:1,venturing:8,Takashimaya:2,Flippo:2,humble:82,Gresham:2,Alamito:2,"neo-stagnationist":1,"R.W.":2,sullenly:6,Ille:2,"tax-department":1,wops:20,Doubtless:6,daguerreotypes:4,"super-Herculean":1,Duff:2,Lorenzo:2,thanks:161,sabbatical:22,beautifying:8,"Taft-Hartley":2,Suitable:1,nilpotent:1,similarities:4,"High-Yield":2,Baeyens:2,Nader:2,openings:4,Eighth:40,"Democratic-endorsed":1,Hubble:2,Tabellen:64,Wink:2,Winn:2,"mail-order":3,Jansen:2,InCide:2,designers:4,Lancet:2,Agouron:2,Wine:11,eroded:81,rustle:25,Hochman:2,cool:162,temporally:6,slavish:1,night:163,"long-endurance":1,mazes:4,dualities:4,Supplies:4,Steamboat:2,OFFENSIVE:1,"fine-arts":4,Commission:164,Grapefruit:2,Italia:2,Glantz:2,bemused:1,contaminating:8,glamorize:39,ungracious:1,Malibu:2,signifying:8,Bieber:2,"post-conviction":1,cortical:1,dolce:64,Proceedings:113,architectural:1,Mailing:116,"non-contributory":1,Vajna:2,gentler:12,Briarcliff:2,"passenger-kilometers":4,Dragging:8,DEPOSIT:47,Arata:2,Priory:2,Horizon:2,synagogues:4,Puglisi:2,rendering:55,Schnabel:40,Richfield:2,vipers:4,Blasi:2,Garcias:28,Tatanga:2,overblown:1,sternal:1,Cherkasov:2,Regency:11,Presley:2,"emission-control":1,Blast:2,Blass:2,gaseous:1,garaged:17,McChesney:2,Bhagat:2,"U.N.F.P":2,garages:4,Liipfert:2,Fanshawe:2,sailboats:4,"human-generated":1,reproductive:1,crows:18,"not-knowing":165,"McGraw-Hill":2,Reducing:8,Crean:2,Cream:2,Jessie:2,"Joint-venture":1,Some:166,"Quill\\/William":2,potholes:4,"direct-marketed":1,Repsol:2,valuing:8,chantier:64,denouncing:8,Isikoff:2,evasive:1,test:24,Largely:6,Kaza:2,Maxicare:2,Behan:2,"school-sponsored":1,Ouse:2,faze:39,"}":167,Escobar:2,"fourth-ranking":1,Hallman:2,bestioles:4,banquets:4,Keller:2,Chicken:11,Kelley:2,"Japanese-language":3,songs:4,"Draw-file":25,Mathias:2,Containment:47,horseback:168,Republic:11,roundtable:1,battle:24,tenable:1,soothed:16,zeroing:8,aristocratic:1,Delphine:2,"island-fantasy":1,headstrong:1,extols:20,puppyish:1,Prego:2,Roles:4,"graphite-plastic":1,Rolex:2,"dark-haired":1,Mineralogy:2,turns:72,gun:25,gum:25,Butterfield:2,"car-sales":4,Reaganite:1,jurisdictional:1,"Leningrad-Kirov":2,Sander:2,CML:2,CMK:2,detonated:54,CMI:2,CME:2,Watts:2,CMA:2,"hand-woven":160,Galoob:2,wattles:4,CMZ:2,forging:8,Ziff:2,CMS:2,Fork:2,"Corp.-compatible":1,Form:169,foregoing:122,shares:170,Ford:2,peels:20,Yoshida:2,Fort:59,khaneh:64,Darin:2,"research-and-production":1,wonduh:39,sleepwalkers:4,English:171,combatant:3,Lorin:2,Bunks:4,sociable:1,Perch:2,Juvenile:40,Portugal:2,Fueling:8,Sanlandro:2,Percy:2,burdensome:1,reagents:4,Lizzy:2,plotted:54,lighthouses:4,Guarascio:2,"H.A.":2,regardless:6,extra:34,unappeasably:6,uphill:97,filaments:4,puffed:54,Isaam:2,unappeasable:1,Isaac:2,Semon:2,"Lines-Trans":2,coalesce:42,Fell:172,unreinforced:1,slough:39,Idols:4,Feld:2,"Government-owned":1,Teleflora:2,Anabaptist:47,Require:39,"celebrity-oriented":1,"southern-central":1,Westbrook:2,Quotations:65,spaceships:4,prepay:39,defeats:18,"Conn.based":1,"top-management":3,Johann:2,syntactically:6,HEYNOW:2,woefully:6,Homer:2,Livermore:2,Clough:2,Drivers:4,"self-realized":1,Freight:11,"ton-per-year":1,ERG:2,chin:25,Runge:2,ERC:2,chic:3,determinations:4,Dubinsky:2,varnishes:4,Reber:2,positional:1,"antitrust-law":3,Rebel:47,"wash-up":1,deteriorate:42,armies:4,unenforcible:1,Biaggi:2,peerless:1,escalate:42,APARTHEID:2,Elaborate:1,"push-up":22,Kendrick:2,drastic:97,Spiller:2,Supavud:2,Shih:2,Kornbluth:2,Dieter:2,HUDSON:2,devotees:4,Radio:11,"ill-founded":1,Sporkin:2,Radic:2,Grandparent:2,Ship:11,conquests:4,opts:20,Combustion:2,Author:11,"backwoods-and-sand-hill":1,Hannon:2,Jas:2,Jap:2,Jan:2,Mandell:2,Jam:2,tablets:4,obediences:4,Jai:2,"still-building":1,still:173,Mandela:2,Dolan:2,"safe-driving":1,"big-souled":1,"customer-driven":1,"Arkansas-based":1,Modigliani:2,Genghis:2,thermometers:4,refineries:4,Ventspils:2,slacks:4,"five-year-old":1,Mattison:2,galloping:30,Zeke:2,placate:39,WestAir:2,drop:139,"S.G.":2,beings:4,Glenview:2,extradite:39,marshals:4,grouse:174,challenged:32,"mixed-up":1,Museum:11,stooping:8,"free-holders":4,yeah:175,Kahwaty:2,challenges:18,Becalmed:17,year:22,"Zealand-based":1,Thru:127,"quasi-private":1,monitors:18,"crisis-response":1,"Seattle-based":1,Compagnie:2,Norwegian:66,"structural-adjustment":3,wholeheartedly:6,Indochinese:176,temporizing:8,Tariff:47,"well-operated":1,Iijima:2,"York-area":1,saxophones:4,"Taiwan-born":1,Itoiz:2,advantages:4,"Lincoln-Douglas":2,repayable:1,Travelers:130,AgResource:2,Erin:2,tangled:103,Erik:2,Ironic:1,nonprofit:1,Padget:2,Payers:4,suffice:42,BENTSEN:2,flipping:177,TRAVELS:20,Vonnegut:2,Medicine:11,"two-and-a-half-mile":1,"L.L.":2,tomorrow:168,Petry:2,Bruckner:2,"publicly-traded":1,Driscoll:2,Zadel:2,"Tech-Sym":2,typographical:1,despises:20,Analyses:4,Roaco:2,brainy:1,Quadrum:2,uninformed:1,brains:4,Jail:11,interbank:178,"auto-immune":1,Karstadt:2,professionals:4,transferred:45,Bremerton:2,diktat:1,GERMANS:179,Volland:2,overcollateralized:17,extinguish:39,Settlement:47,Ekberg:2,unsubstantiated:1,Cappy:2,Marcor:2,Marcos:2,"beef-hungry":1,Orrie:2,Capps:2,"For...":102,OUTSIDE:1,Winnipeg:2,Deep:180,Petre:2,Marcom:2,Israelite:2,"blonde-headed":1,"custom-built":17,"call-in":1,Refuses:20,"chemical-weapons":152,Wiseguy:2,Vestar:2,importantly:6,Viatech:2,Akio:2,Akin:2,MeraBank:2,countries:4,Ibaraki:2,Ente:2,Iveco:2,Thermo:2,Coupes:2,implications:4,premiered:16,chauffeured:17,premieres:18,"precipice-walled":1,Jibril:2,Web:2,Aggies:2,Blount:2,Wei:2,Character:47,"play-by-play":1,Wes:2,teamed:32,Wet:66,Sharing:8,Jeepers:106,Nijinska:2,Pelletier:2,industrialize:39,embittered:14,"self-supporting":1,Awake:2,Cupply:2,Marsden:2,Adaptations:4,paneled:1,"ten-gallon":1,crevasses:4,Levinson:2,humbled:54,stroll:44,"well-capitalized":1,rippling:8,Intellectual:2,"anti-tax":1,ambling:8,carloads:4,Arhat:2,"Chicago-area":1,bannnnnng:39,EMA:2,Whigs:65,EMC:2,burst:181,excoriated:32,EMI:2,anchored:45,Harbanse:2,EMS:2,hoes:4,"break-up":22,Rincon:2,"once-dull":1,"Krzywy-Rog":2,Krieger:2,Members:92,complications:4,westbound:1,intonations:4,Diehards:4,"piece-by-piece":1,Lieberman:2,toting:8,Beahrs:2,Joseph:74,clipboards:4,broil:25,"money-transfer":3,"WIN\\":2,WINS:20,Adoniram:2,outcuss:20,Malaysia:11,Lavery:2,botched:14,Altenburg:2,foreboding:22,hybrids:4,inexplicable:1,exploit:182,"Japanese-Americans":65,Velazquez:2,Principals:4,charismatic:1,sledding:21,amino:1,muzzling:1,Meteorological:2,micrometeoritic:1,Paid:14,tropical:3,Paix:2,Floyd:2,"six-dollar":1,Goodby:183,Maybelline:2,"before-school":1,aggressions:4,straying:8,discontinuing:8,Involved:17,fours:4,"earth-bound":1,skiers:4,Biosystems:74,Night:144,freebooters:4,"financial-service":22,Steroids:4,Yaffe:2,offbeat:1,Hyun:2,moderns:4,Performed:17,Edgewater:2,Moody:129,Histochemistry:2,Aaronson:2,GNP:11,bickered:17,tilling:8,metric:3,"continuing-education":1,Insurgent:1,Better:184,Unwilling:1,Israel:2,develop:42,"M.R.":2,pester:39,Notitia:4,Bloomberg:2,preisolated:17,"Fed-watching":1,"near-complete":1,Amado:2,Fertitta:2,"century...":102,squatted:32,Telelawyer:2,Amada:2,"single-sentence":1,"fifty-cent":1,Colee:2,irresistable:1,Peruvian:66,Caverns:2,Terence:2,Nesconset:2,tarpapered:1,Catinari:2,Walkers:65,"depreciation-induced":1,Municipals:57,nondurable:1,Service:11,Oaklanders:28,"worn-out":1,Bafflers:28,Gases:4,Pump:11,growled:16,greetings:4,Syllables:4,Molecular:2,Linear:2,"forward-looking":1,Muniak:2,abortive:1,felicities:4,Marysville:2,overbought:185,Thatcherian:1,"lowest-cost":186,Analyst:47,disproportionate:1,propped:54,Outflows:4,"Tenn.-based":1,dialectics:4,earnest:22,Plainview:2,Playtex:2,heightened:45,Regulars:4,unrequited:1,conducts:20,Greyhound:2,roll:44,annually:6,yearnings:4,unspoiled:1,scholastics:4,Salwen:2,Mahran:2,output:25,Magleby:2,verbal:1,exposed:81,tragedies:4,Walnut:11,exposes:20,zealously:6,slurries:4,intend:149,Udall:2,ACTH:2,salicylic:1,Symantec:2,palms:4,AlunJones:2,"two-minute":1,Vinken:2,Pompey:2,Ion:2,Prizzi:2,"elephant-like":1,fractures:18,Chilean:1,Kalmuk:2,"FT-SE":2,"sweet-natured":1,PLACE:2,"heat-absorbing":1,fractured:81,Leonardo:2,Kalmus:2,"B.B.C.":2,Krakowiak:2,Cavenee:2,"user-inviting":1,Scapin:2,Blaine:2,Chevron:11,"non-resistants":1,"D&B":158,backup:22,Intergovernmental:2,Kapoor:2,Boogie:2,Amicam:2,Pavletich:2,shrinking:55,Karshilama:2,"Well-received":1,Yuppily:6,Budzyn:2,Finnie:2,Ruschkowski:2,explosions:4,Acarbose:2,"cost-push":1,Kennon:2,"American-developed":1,Calderwood:2,"Galveston-Port":2,recouped:32,pervasively:6,"eighth-floor":1,wholes:4,curtail:42,embedded:14,"Two-month":1,Survival:2,Marston:2,waltzing:8,Fitzwater:2,realigned:187,Moves:4,DEFECT:33,sturdiest:51,"Jacques-Francois":2,BALKS:20,rosarians:4,Veterans:46,Idol:2,finishes:72,"Howson-Algraphy":2,Niven:2,Finnegan:2,"Herald-American":2,Purpose:11,Daberko:2,fools:4,poor:10,Engine:11,diaries:4,endeavors:4,whistling:8,"drive-through":1,SIMPLIFYING:8,"Y.W.C.A.":2,Miron:2,titillating:8,insertions:4,Boissoneault:2,Comcast:2,DIRECTORS:4,cores:4,overseas:34,Magnolias:4,Intervoice:2,interspecies:4,ceases:20,JWP:2,Unknown:1,HURRICANE:2,ceased:32,thoughtful:1,unblock:39,Take:188,Shultz:2,religious:94,Kasler:2,Cieca:2,corps:80,Staloff:2,Discos:4,computerizing:8,"music-publishing":1,"sight-seeing":3,volunteer:189,twothirds:4,patently:6,"clean-air":3,Hancock:2,"Status-roles":4,coloured:1,Celestial:2,Surging:8,Underwoods:28,"coupon-distribution":1,Terminiello:2,anarchical:1,Veiling:8,rationally:6,reaffirming:8,startin:8,lulls:18,streets:4,GUN:2,"less-conservative":1,coudn:190,Watchmen:2,Youngberg:2,Gaetan:2,Robb:2,cues:4,"raw-material":22,lurch:78,Stenhachs:28,cued:16,Importers:2,Breda:2,scallops:4,stockyards:4,Chessman:2,longshoremen:4,Paramus:2,continuingly:6,Latinovich:2,excess:3,marring:8,"food-products":4,Fokine:2,Doll:2,cathartic:1,Dole:2,Bolstered:17,Krasnik:2,"Kohnstamm-positive":66,Trusthouse:2,advertising:191,successors:4,Plateau:2,inspires:20,Tingley:2,"gun-carrying":1,Stateswest:2,Chicopee:2,"S*":2,"S.":2,"A.S.":2,seventeenth:1,Climb:39,"S$":84,Commencing:8,Moet:192,Butlers:28,Intouch:2,Connor:2,"Mono-unsaturated":1,"oil-field":22,Struggle:31,"Sheraton-Biltmore":2,Sy:2,Viewmaster:2,Sr:2,propellers:4,Sp:2,Arlt:2,Su:2,St:11,Banking:193,Si:2,sclerotic:1,So:194,Se:2,macho:3,spandrels:4,SS:2,"on-again-off-again":1,Blumberg:2,SP:2,SW:2,SK:2,SH:47,SO:6,budgets:4,SC:2,SA:2,"self-conscious":1,SE:2,SD:2,Bitten:17,IBJ:2,persists:20,cubist:1,IBM:11,unconcealed:17,IBC:2,Finberg:2,"black-draped":1,quartets:4,Innocent:1,Cellist:2,Signers:4,IBT:2,overcharging:8,stymie:39,surpassed:54,dismembering:8,individualistic:1,Brahm:2,reject:42,surpasses:20,Falb:2,Alcorn:2,Lower:195,Microorganisms:4,desisted:16,purring:55,compulsory:1,Sumat:2,criticize:42,Schellke:2,Slote:2,embark:42,anytime:6,roommates:4,chopsticks:4,Marathon:2,ghostbusters:4,"world-affairs":4,groundup:1,networking:21,Cholet:2,Bedouins:4,Definite:1,charities:4,Southbrook:2,lovebirds:4,sarcolemmal:1,Atlas:129,Confederacy:11,"Property-tax":1,"may...":102,Pountain:2,miter:39,Temptation:47,Equibank:2,prowled:16,differed:32,Tupolev:2,boastings:4,evening:21,Intergroup:2,Hostess:2,slighter:12,Kwang:2,"Pre-Legislative":2,"flashlight-type":1,"fifth-largest":1,slighted:7,Incurably:6,inflecting:8,impressionists:4,liquefied:17,obligates:20,freebies:4,Suez:2,bless:39,Quaid:2,disdaining:8,Elbaum:2,McNaughton:2,blest:196,fairy:3,obligated:45,heavy:34,thrombi:4,transcribe:42,Tax:128,Gentleman:47,Anat:2,ballistics:4,"honest-to-Betsy":6,Westridge:2,Fearon:2,"four-element":1,"processed-foods":1,Tad:2,jolly:1,Besher:2,shrivel:39,Serpentine:2,Town:11,Rayfield:2,Storyboard:2,earns:20,Manjucri:2,toiling:55,Senese:2,Capitalincludes:4,hapless:1,Blend:39,Fantastic:1,"broad-based":1,Sauvignon:2,Bros:74,Broe:2,Brod:2,Feniger:2,Supplee:2,CNBC:2,Samba:2,Adds:109,spitting:55,"quasi-recitative":1,Tatler:2,Hawksworth:2,Adde:2,effortless:1,visions:18,equating:8,obtainable:1,Grenville:2,"DEAE-cellulose":11,announcements:4,teamsters:4,fiddle:25,Dutil:2,Refuge:2,trapped:45,Schroll:2,BRADSTREET:2,"French-Italian":1,Initiating:8,assaulted:32,imperiled:14,"clean-fuels":4,"south-eastern":1,Dreamboat:2,gnawed:16,hesitating:8,Mahoganny:2,garrison:25,Communities:65,mooed:16,Beretta:2,readapting:8,"event-driven":1,tearfully:6,Mizuno:2,heaviest:51,deflationary:1,Late:197,ogled:32,organs:4,boorish:1,adorns:20,adrift:6,Wetzler:2,Price:11,itemized:17,Graduates:4,"after-dinner":1,Swinburne:2,Focusing:8,Cruze:2,Lucinda:2,Lookit:39,Chief:129,"money-back":1,Chien:87,Schweitzer:2,Polygram:2,Killips:2,"once-in-a-lifetime":1,Usinor:2,arising:8,Viscerally:6,Nanjing:2,Chartered:2,ansuh:39,rechargeable:1,physics:19,stalked:112,hovered:32,Wheaties:28,"church-going":1,beatniks:4,Johannesburg:2,Benin:2,heavens:75,Venturi:2,ERISA:2,predilections:4,Pittston:2,French:198,Trustee:2,"Office.":2,"ten-minute":1,"inner-ear":1,Michelle:11,FITC:2,retorts:18,Uclaf:2,Greco:2,competing:199,boils:20,Counselor:2,unburned:1,Oncogen:2,Confucian:40,"employer-paid":1,hypo:1,doctrinaire:3,wriggled:16,Franck:2,howled:16,Paradox:2,Franco:2,drafted:54,Bridgewater:2,Kipp:2,Laramie:2,France:2,Asbury:2,Gibbs:2,Mama:11,Poised:2,Goldenberg:2,Gibby:2,"payroll-paring":1,locals:4,Brash:2,oldies:4,"loud-voiced":1,tolls:4,falsify:39,Realty:2,Tsuruo:2,Brass:2,FREED:16,"five-row":1,Rodolfo:2,Kercheval:2,Smelov:2,Rippe:2,disintegrative:1,Redundant:2,Elise:2,arrears:4,abruptly:6,hoisted:54,collaborators:4,Vadas:2,Vadar:2,"grass-covered":1,memorized:54,"higher-cost":200,minorities:4,Admirably:6,SHEDDING:8,Mailloux:2,Compaq:59,Koerner:2,Bader:2,Rothshchild:2,"non-exempt":1,Sullam:2,Lookout:2,Bracknell:2,"three-building":1,BRITANNICA:2,Protection:11,Runiewicz:2,Bogdan:2,Gott:64,Lenders:123,Harbison:2,enroll:42,N:47,Gilt:2,Donna:2,confusions:4,Hassan:2,"floating-point":3,substantiates:20,Supplement:11,accidently:6,Asmara:2,LifeSavers:111,Qatar:2,procedurally:6,embroidered:17,Pulaski:2,"high-rolling":1,Delving:8,Bonwit:2,Eyes:46,grant:24,Luke:2,"Lafite-Rothschild":2,Masks:20,makeshift:3,"paid-up":1,vulnerable:1,grand:1,"well-hit":1,Lonski:2,pleadings:4,Faith:11,classmates:4,fatty:1,Seated:17,soberly:6,Bleus:2,"Euro-beach":22,Archie:2,calibrates:20,sniggered:16,Rhenish:1,Lupel:2,MX:2,calibrated:54,mobs:4,Schwinn:2,POLICY:2,Burleson:2,settlements:4,Grenadian:1,reviewed:54,devastatingly:6,Falconbridge:2,Reconstruction:2,Durables:28,PIK:2,informal:1,PIC:2,representational:3,cherries:4,questioned:32,Berkeley:11,PIR:2,reemphasizes:20,nymphomaniacs:4,capacities:4,"cruise-ship":22,"payment...":102,Antigua:2,dearly:6,preparatory:1,"pre-sentencing":1,ponds:4,Kathie:2,"helter-skelter":1,Systemic:1,Personages:4,LABORATORIES:2,Crip:2,Cris:2,"F-16s":28,sketch:25,"Push-ups":4,"still-healthy":1,Myself:2,lips:4,towards:127,plumbers:4,Laos:2,"Futures-related":1,Manifatture:2,MorningStar:2,dilapidated:7,Preparations:113,Aquacutie:2,competitions:4,intramuscularly:6,Davidson:2,Sainted:2,Southport:2,Protestant:129,Parliamentarians:2,undergone:17,Biologics:2,multivalent:1,Biologico:2,assists:72,viewpoints:4,"infusion-therapy":1,repressions:4,Strategies:123,Swallow:2,BUYERS:4,Taylor:11,"anti-Sony":1,lyophilized:17,mentalities:4,silence:25,shavers:4,Thi:2,"not-so-new":1,unimpaired:1,presupposes:20,Hennessey:2,reworked:32,Evangelicalism:2,Norman:2,HISPANIC:1,placing:55,Kitty:11,visas:4,Koch:2,unlashed:16,Benackova:2,Kitti:2,opposed:81,uncomplaining:1,withholding:21,Secom:2,healthful:1,Perpetual:1,Dakotas:28,tragically:6,Howe:2,"investment-banking":22,liberalizing:8,Howl:2,Rafsanjani:2,viciously:6,limpid:1,Okayama:2,purloined:17,chomp:78,familar:1,Newspeak:2,"graham-flour-based":1,MacroChem:2,munis:4,"On-to-Spokane":2,Marella:2,similar:1,"CBS-K":2,hesitantly:6,ordered:112,Lauder:2,metalsmiths:4,interventions:4,"criminal-abortion":1,Edward:2,"buckle-on":1,consoled:32,aeronautical:1,dashed:81,fears:18,"Wash.":2,aprons:4,dashes:18,Benninger:2,smiles:18,Exterminatin:8,Stanford:11,Sentry:2,Cott:2,Sizwe:2,"hot-slough":1,assayed:17,Sentra:2,graphically:6,smiled:32,Dauchy:2,approving:8,Roundtable:2,aesthetically:6,Baucus:2,correlated:103,syntactical:1,resolving:8,Perches:2,Corrette:2,"England-born":201,bribe:25,Perched:17,Soviets:41,infringing:8,Apparently:6,Levinger:2,"current-carrying":1,Bengal:2,"No-Smoking":2,compact:202,GABLE:2,Parent:11,insistent:1,Nod:2,Nob:2,uninformative:1,"Father-God":2,"anti-communist":1,Not:203,Nov:2,Now:150,Nor:119,unabridged:1,rebounding:8,Celebrity:11,assuming:8,Donut:2,Elbow:47,yourselves:53,Curb:39,"No.":204,meticulously:6,"browny-haired":1,Mogul:2,Yiddish:40,sedentary:1,enforce:42,Antietam:2,FHLBB:2,overfunded:17,jump:205,notwithstanding:206,Gris:2,Ramseier:2,Milanoff:2,Fahey:2,"anti-party":1,Kutney:2,Isacsson:2,conning:8,Grid:2,Survived:16,Hibler:2,upsetting:5,McNealy:2,fifteenth:1,Hershel:2,Conducted:17,"just-rejuvenated":1,Skipjack:2,Palace:11,Tequila:2,Back:207,Bach:11,"ever-anxious":1,avaricious:1,Kermit:2,Organizational:1,"strong-arm":1,patents:4,Temperatures:4,hilltops:4,Oilers:74,foresee:149,Krishnamurthy:2,Assistance:11,manage:42,Pankyo:2,"all-white":1,Loyalist:1,"Rowland-Morin":2,Lanza:2,biophysical:1,"semi-sterile":1,"Rich-affiliated":1,Discontinue:39,trivializing:8,Averae:2,Png:2,Markus:2,salvages:20,"Kumagai-Gumi":2,Oakar:2,Basking:2,"fifteenth-century":1,salvaged:17,boards:18,parachute:25,"techno-managerial":1,laendler:1,meek:1,"computer-products":152,averaged:32,"test-prep":1,Generation:11,VIII:2,servants:4,Caravan:2,meet:95,averages:18,Israeli:66,links:208,"money-losing":1,radioing:8,chinless:1,"Politics-ridden":1,pulling:8,intuitions:4,peelback:1,"cave-men":4,Wakabayashi:2,Deeper:12,cratering:8,"well-served":1,Beast:2,"Passaic-Clifton":2,sentiments:4,Reservation:11,instinctively:6,listens:20,MiniScribe:2,embellished:17,Baubles:28,ultrasonically:6,outdid:16,Heilbron:2,Mrs:2,Roman:209,bibliographical:1,Allou:2,Allow:39,Wheeling:2,Makin:116,scoop:25,Guard:128,desensitized:17,encyclopedic:1,"estate-freeze":1,Skelly:2,Baltimorean:2,Bapepam:2,carnivores:4,Favre:2,RAF:2,Multiple:40,EASTERN:2,Telegraphers:57,subroutines:4,Baxley:2,gymnasts:4,Multiply:39,RAX:2,overflights:4,popularly:6,wells:4,Loser:1,Loses:20,"J.E.":2,Lewco:2,Losec:2,Mendelsohn:2,Montpelier:2,Bellman:2,Telemunchen:2,"tax-based":1,slide:24,firings:4,Pesce:2,"drug-delivery":1,"still-ravaged":1,"Dream-Sweetmite":2,"six-minute":1,Statistics:130,attachments:4,Borges:2,Bertrand:2,OCC:2,constitute:149,buccolic:1,Oils:4,OCR:2,special:3,littered:54,"special-projects":1,Parioli:2,Fermate:2,obsessive:3,Anderlini:2,Crosbie:2,"full-season":1,Gromov:2,darkly:6,"non-Cocom":1,Daiwa:11,Relentlessly:6,improvisational:1,Sentor:2,Meurons:4,delegated:17,Drawing:210,resumed:32,Bombay:11,"Cell-free":1,Owen:2,times:211,Telxon:2,"Boesky-greed-is-good":1,isotropic:1,"cash-hungry":1,resumes:72,timed:45,Lustgarten:2,Lanier:2,Iaciofano:2,"Merry-go-round":2,confuse:42,unsupported:1,"French-Canadians":28,bitch:25,"man-in-the-moon":1,Pioneering:2,Shann:2,Newtonian:1,Contracts:57,Fran:2,Tshombe:2,Dunker:2,Pilko:2,Dunkel:2,minisupercomputers:4,"goings-on":4,"Weill\\/Bertolt":2,"hard-nosed":1,weepers:4,Volney:2,crackle:78,innovate:39,secco:80,RESEARCHERS:4,Geary:2,catered:187,bloodiest:51,conscious:3,Malcom:2,sidetracked:16,Macmillan:2,Asti:2,enforced:45,Asta:2,Flying:116,enforces:20,Interview:59,EVEREX:2,metaphysics:91,Falstaff:2,Administrator:2,Solemnly:6,Parcel:2,rosier:136,thunders:20,Bowery:2,pushups:4,battles:18,Schuman:2,grounding:55,battled:32,Nokomis:2,Morgenthau:2,"polka-dotted":1,blades:4,venereal:1,swollen:7,regi:64,Geographic:40,Countin:8,"quick-kill":1,Rescue:11,Exceed:16,"free-marketers":4,subtracted:54,Keiyo:2,repeated:212,Fellow:213,Rusting:8,Lavallade:2,stationing:8,Lehn:2,"sisters-in-law":4,Anthea:2,loadin:8,seclude:39,Anthem:2,Belzec:2,halting:30,"Non-residential":1,beatific:1,telling:5,Holgerson:2,Garvier:2,unfinished:1,nitrous:1,Waterways:4,brighten:39,"Pro-Choice":1,won:214,Newtown:2,cameos:4,inherited:45,embody:33,"bottom-of-the-barrel":1,Lumia:2,kinked:1,Marquis:2,indentations:4,alabaster:215,Holtzman:2,maritime:1,vehicles:4,Rosner:2,scintillating:1,siphons:4,Guizot:2,Fitness:2,"post-Deng":1,Savelyeva:2,dwellings:4,Rezsoe:2,professors:4,Forget:216,CANADIAN:1,imperious:1,"French-speaking":1,yearn:95,coaxed:54,"Abbe-Scotch":2,Darlington:2,Austrian:66,Internatonal:2,"stock-repurchase":1,Senk:2,Rainy:2,multiplying:8,Investing:217,Arland:2,"pro-repeal":1,canine:3,Stolzenbach:2,"Cadbury-Schweppes":2,rifts:4,Mariners:28,intercorporate:1,Raine:2,Nuttle:2,washable:1,"N.H.":2,illusory:1,southward:218,Normura:2,dialectically:6,Liptak:2,McIntyre:2,"Sen.":2,"re-oriented":17,hurrying:30,ovals:4,indiscriminate:1,Hooray:106,kicking:55,Projecting:8,Benanav:2,key:104,reprobating:8,Muscovite:2,limits:219,writhed:16,outrank:33,historichomes:4,"computer-distributed":1,"one-size-fits-all":1,strains:4,heavenward:1,Loftus:2,"red-flag":39,diplomats:4,Integraph:2,paranormal:1,presaging:8,overarming:8,accomplishing:8,TransTechnology:2,ANTHEM:2,unaffordable:1,glommed:16,immense:3,Bolivian:1,Spook:33,troopers:4,controlled:81,retrospective:22,Steinbach:2,abortions:4,"G.N.":2,unamusing:1,Masnadieri:2,Falwell:2,Consequently:6,Hanao:2,debtor:22,Gardening:2,Sture:2,Atlantans:28,Angotti:2,"Federal-Tiger":2,Kneeling:8,piloting:21,Stockdale:2,comets:4,"margin-calls":4,examines:20,modestly:6,Baccarat:2,surface:44,Fraas:2,examined:32,Pretty:197,cometh:20,"day-after-day":1,Songbag:2,bazaars:4,"school-based":1,Skilton:2,"Seoul-Moscow":2,"computer-aided":1,Bangkok:11,harmonies:4,"over-all":1,northwest:220,Arabist:1,Syse:2,Mockler:2,"foreign-made":1,Types:4,dirhams:4,Torme:2,Buzzy:2,"anti-viral":1,proscribe:33,Curie:2,stumped:17,Curia:2,Hallelujah:11,refashion:25,steals:20,"RB&H":2,Macaulay:2,EBPI:2,Evelyn:2,Mayflower:2,Tide:11,insurmountable:1,Experiments:4,furriers:4,coronaries:4,Exton:2,"By-passing":8,increasingly:6,spotchecks:4,liked:32,Disappointments:4,distant:1,Atwell:2,VATICAN:2,Gaming:11,Bellevue:2,"O.K.":125,Spadafora:2,Zane:2,emblems:4,Dorsey:2,Dorset:2,precedents:4,propelled:54,Herrmann:2,Zambon:2,Amerman:2,"Total-Cie":2,"Aug.":2,Manuscript:2,skips:20,Merely:6,Drawbacks:4,unthaw:39,payments:4,conscripts:4,rote:22,climbers:4,revisits:20,glare:25,Avoid:39,Colleagues:4,Leventhal:2,"U.":2,"Kong-based":66,FOES:4,moderates:18,Andras:2,Boyeki:2,objected:32,Newell:2,Enrico:2,cradle:25,moderated:54,"open-door":22,sweepstakes:19,Strang:2,demonstrated:45,limitations:4,"to-and-fro":6,forgit:42,Straight:1,Official:66,"degree-granting":1,Up:221,Us:222,Farmwife:2,Um:106,berserk:97,Cartier:2,"Dream-Way":2,Euratom:2,unhinged:17,UP:223,US:38,UN:2,UH:2,UK:2,unaided:1,interlobular:1,"CB-radio-style":1,pointless:1,Vergessen:64,additional:1,lagged:54,Stripes:46,Valois:2,Souza:2,SsangYong:2,"Fear-maddened":1,"non-Aryan":1,Moss:2,Waldo:2,squirmy:1,gain:24,Rauschenbusch:2,"October-December":2,MetroCorp:2,highest:224,McGinley:2,Bordner:2,sinusoids:4,Kinnock:2,derelicts:4,Niarchos:2,Twist:169,Einstein:2,cavalcades:4,Djurdjevic:2,Nawal:2,Invictus:2,kisses:18,beats:72,Doors:4,Spierer:2,"take-home":1,Lubyanka:2,Leftist:1,cosmopolitans:4,ingredients:4,RULES:4,"chock-a-block":1,Elmgrove:2,proctors:4,Wells:2,presaged:16,Delivery:47,Giles:2,Vane:2,popularizing:8,McCleod:2,blunders:4,stormbound:1,exothermic:1,traditionalist:22,tackiest:51,Kazikaev:2,Hyndman:2,foil:25,middlebrow:1,backstage:6,Endure:33,Novato:2,Muncipal:2,"in-office":1,"better-prepared":1,shuns:20,accidents:4,Tzora:2,"Rome-based":1,Fourteenth:2,Stickers:4,indirectly:6,eclipsing:8,paperless:1,Keul:2,Soak:39,Frontier:2,Toubro:2,"twelve-hour":1,"high-button":1,Energieproduktiebedrijf:2,trodden:1,Bailey:2,Leggett:2,Cuauhtemoc:2,Soap:11,"ruling-class":1,Hondo:2,auf:64,swam:16,Honda:11,pensions:4,Shapovalov:2,swap:24,Sheets:2,Dynafac:47,recycle:39,aux:64,sorry:126,sway:95,Pleas:41,collaborate:42,Znaniye:2,void:70,Industria:2,Panyotis:2,voir:64,"comico-romantico":1,Simplot:2,deplorably:6,"hurricane-stricken":1,Extending:8,unrelated:1,enhance:42,deplorable:1,"separation-of-powers":1,whirlwind:22,landlords:4,Cuisine:2,Margaux:2,scouted:16,Christic:2,Herrick:2,Christie:11,Yasuda:2,hibernate:149,tangential:1,kidnap:39,disintegrated:16,ignominiously:6,"tall-growing":1,Sikes:2,uptempo:1,Schenk:2,WELLS:2,reviving:30,mee:53,helmets:4,"market-hog":1,mea:64,"back-on-terra-firma":1,muzzle:25,mem:64,men:4,mei:64,weirdly:6,met:32,Bussieres:2,biconcave:1,Lassus:2,systematized:17,Aalseth:2,Curry:2,Predispositions:4,Chiron:2,Simeon:2,Brakes:4,Extra:2,Scolatti:2,Demonstrations:4,fajitas:4,Ricketts:2,"have-nots":4,Lyon:2,"south-central":1,objectively:6,sliced:54,Fleischmanns:2,Norske:2,Piano:11,Romanza:2,"Boersen-Zeitung":2,rationalist:3,"doubled-edged":1,LOBBIES:20,"gold-oriented":1,Drexler:2,"well-servicing":1,Kingsepp:2,Rudibaugh:2,Carbon:11,TASS:2,overlooked:54,grabbin:8,"surgical-abortion":1,"multi-state":1,Smelting:2,defecated:17,room:47,"flue-cured":1,Slug:39,movies:4,Fournier:2,exceptions:4,root:24,troubles:18,"motor-operated":1,Zweibel:2,Chrome:2,Wizard:11,"whistle-blowers":4,Scalfaro:2,cials:4,Maecker:2,Hardscrabble:2,elicited:54,"January-August":2,decrying:8,Darcy:2,remonstrated:16,"Red-Green":2,quibble:39,loggers:4,Fidler:2,disassemble:39,manuals:4,Kiley:2,"security-type":1,lifesaving:8,Trujillos:28,defaces:20,EQUITIES:28,Delusion:2,Touring:55,neglect:44,Ended:2,fictitious:1,pasteurized:17,plagiarizers:4,Edwviges:2,Textiles:113,glycols:4,determinate:1,Agnelli:2,"high-rep":1,inconclusive:1,"W.T.":2,fellas:4,budding:30,famille:64,personae:4,deathly:1,personal:10,"Sun-Times":2,Econometric:2,MiGs:28,Luber:2,"Butter-Nut":2,drops:72,confidently:6,rebutted:54,"comedy-oriented":1,madly:6,Ashwood:2,driftin:8,Challenge:11,glazes:4,demythologize:39,Agenda:11,Beggiato:2,glazed:17,imprisoning:8,Saitama:2,Chesley:2,"AIDS-related":1,Seita:2,Seitz:2,ducking:8,Check:216,punishable:1,nonchurchgoing:1,Goulde:2,admittees:4,"SS.":2,trading:225,forgot:32,aids:18,LeBrun:2,comedies:4,"two-percentage-point":1,Obeying:8,merchants:4,unbound:7,Menderes:2,"Eagle-Berol":2,Rosabelle:2,Skolniks:2,bulkheads:4,Stockman:2,Join:188,Clive:2,"Reps.":74,"SS-18s":4,abate:39,Healthco:2,Salvatori:2,resew:39,gruonded:16,SST:2,cosmic:1,Sudden:1,SSI:2,uses:72,enraged:103,Adolf:2,causeways:4,Freshmen:4,oracles:4,Waite:2,"double-A-2":22,"double-A-3":1,"Electro-Optics":2,Vectra:2,ALBERTA:2,Fienberg:2,PATRON:2,acquaint:39,Mullerin:2,Johns:2,Excellent:1,gourmets:4,McKinleyville:2,Commandeering:8,Estimated:14,Yevgeny:2,chronicled:32,Charleston:11,Minikes:2,begins:20,homogenized:17,"Travel-Holiday":2,enshrouding:8,Exhausted:1,conforms:20,Colefax:2,exchangeable:1,biochemical:1,Bottlers:113,Mercier:2,Snuff:2,recommence:39,Curacao:2,rattle:25,Lewellyn:2,Gideon:2,"central-planning":1,prerecorded:17,"nine-tenths":4,Tashkent:2,Egyptian:66,"Kinder-Care":2,Gripen:2,yearlong:1,uproariously:6,overplayed:32,Biological:66,"legal-services":152,maria:4,Sanctuary:2,splints:4,competitors:4,Kyocera:2,"egg-throwing":1,unleashed:54,Sabre:2,PATCO:2,UPI:2,mineralized:1,implying:8,flouted:17,poison:226,McDuffie:2,dampening:1,CONSUMERS:4,"double-A":117,bookish:1,Archbishops:4,"Post-Newsweek":2,Advantages:4,Lahus:2,Others:92,bangish:1,lightening:8,"company-owned":1,extraterrestrials:4,preparatives:4,nyet:106,"difference...":102,Yesiree:106,"trans-Panama":1,"water-deficient":1,pallets:4,Holstein:2,untradeable:1,"boom-boom-boom":1,facilitators:4,COMMENTS:4,troop:78,adulterous:1,Partners:41,"Star-Spangled":40,testing:191,"Af-values":4,Indexes:4,Dreamers:57,"non-stop":1,hoydenish:1,Indexed:1,interruptions:4,"home-entertainment":1,Watervliet:2,Somebody:47,Plotkin:2,narrated:17,"eighty-sixth":1,Billed:17,"by-ways":4,Multiplexers:4,"socio-economic":3,Blumstein:2,"W.Va.":2,Tunnel:2,"non-governmental":1,busloads:4,Otherwise:6,Micawber:2,resistant:3,Imperiales:28,"discount-movie":1,RobertsCorp:2,"Naples-born":1,Thrall:2,Glimco:2,Bahamas:111,precut:1,"half-point":1,Muscat:2,putt:25,puts:72,regenerate:39,KANEB:2,"growth...":102,"soft-landing":1,entered:32,lovely:1,"well-deserved":1,"SHORT-TERM":1,"eight-bar":1,Emmert:2,Flor:2,Flow:2,BRITISH:1,"word-games":4,Keteyian:2,Flom:2,scrubbers:4,Voice:11,Debugging:8,Reputedly:6,Process:11,Tatman:2,Canaan:2,Pines:2,ceilings:4,CAPITALIST:1,sprinted:16,"bribery-related":1,recuperate:39,"well-kept":1,Arrangement:11,cans:18,inscrutable:1,gaze:44,cockatoos:4,Kibbutz:2,realizing:8,Sanson:2,Chatwal:2,Sansom:2,"world-famous":3,colonies:4,evolve:42,"off-duty":1,Hals:2,opulent:1,Champlain:2,impelling:1,Dilip:2,"price-stabilized":1,Usually:6,geological:1,interferometers:4,Brassbound:2,SAKOS:64,presto:6,unconditionally:6,jackdaws:4,failing:55,Matson:2,resuming:8,Janitsch:2,sanctums:4,yours:227,"worked-out":1,Helicopters:74,Griffin:2,unclenched:17,Significants:4,crystallites:4,Capone:11,Acceptable:1,assigned:45,fighters:4,salivary:1,"rent-subsidy":1,Bills:123,pecuniary:1,Boss:11,appellant:64,copyrights:4,cardiologists:4,Buddhism:11,"revenue-sharing":1,"ago.":6,"Kerr-Mills":2,Bowman:2,boasted:32,involuntary:1,rehash:78,supervisors:4,paramilitary:1,orthodontic:1,Browne:2,Picturing:8,Arp:2,Stolz:2,Art:228,repossessed:7,ramparts:4,Arx:2,tormentors:4,Michele:2,Computing:229,Ara:2,Arc:2,Are:230,testers:4,Ark:11,Michels:2,Arm:169,Aro:2,Arraignments:4,dean:47,Generics:4,Beef:47,Conduits:4,deaf:1,Zeising:2,Been:231,Beep:11,Beer:47,yearlings:4,Beet:2,Browns:74,dear:232,"doll-like":1,carts:4,buffer:25,Parizeau:2,provoking:30,Leonidas:2,Kochan:2,subscriptions:4,codifies:20,predicting:55,Salman:2,"defense-electronics":152,Corey:2,buffet:44,Blampied:2,codified:17,backlogs:4,lyking:8,"Hoped-for":1,blithe:1,Merill:2,Carstens:2,"second-guessed":17,managers:4,Dallas:2,Isabell:2,"memory-pictures":4,Pokorny:2,HyperCard:2,down:233,Southlife:2,"plain-clothes":1,"P.D.I.":2,Chairmen:4,refined:7,Satrum:2,Cranston:2,TRC:2,initial:104,"U/NNP.S.C.":2,"districts\\/states":4,"let-down":4,"tank-related":1,Herman:11,polemical:1,clinics:4,Lissa:2,Bradsby:2,Dicello:2,anionics:4,landing:21,feminine:3,experimentations:4,zaiteku:64,Defeat:2,Urstadt:2,evinced:54,trendiest:51,Albanians:65,"bad-neighbor":1,Boismassif:2,Langhorne:2,Fedders:113,resuscitating:8,Richman:2,"on-air":1,Heymann:2,"flood-lighted":1,strengthening:5,petit:64,"cure-all":22,HELPS:20,awhile:6,marinated:17,Tiber:2,Persona:2,exaltations:4,"Menuhin-Amadeus":2,Taisho:2,Persons:56,"time-strapped":1,Lande:2,Uplands:28,Romantic:66,handicap:25,"super-expensive":1,utilities:4,brightens:20,"export-license":3,Cathy:2,"twelve-year-old":1,bluefish:4,Barnard:11,"load-shedding":4,pseudo:1,worked:32,scribblers:4,Substitute:1,Daikin:2,Exploracion:2,restored:54,discreetly:6,"E.G.":2,Torino:2,Tango:2,Winning:229,Kalevi:2,redouble:39,hijacked:54,DALLAS:2,father:25,Redskins:28,analogous:1,"Washington-based":1,telegraph:24,Lakeland:2,Sewanee:2,Cantobank:2,Tenements:4,"self-proclaimed":1,airings:4,biceps:91,stiffed:32,cheapest:51,proposals:4,tartans:4,trombones:4,turgid:1,Mahmoud:2,Fidelity:2,misimpressions:4,stiffer:12,talked:32,Curcio:2,Merger:47,"four-crate":1,onrushing:1,measurable:1,Pittsburghers:28,measurably:6,Zoghby:2,targets:18,Define:39,majors:4,"page-one":3,encrusted:17,Comend:39,Klette:2,annals:91,suspect:234,noconfidence:1,"less-than-perfect":1,processing:21,Bishops:113,Latvians:28,Bids:4,DSP:2,cushioning:21,DSL:2,DSM:2,DSG:2,Muffling:8,box:25,boy:235,diagnoses:18,Founder:47,grinned:16,bow:44,Founded:17,spheres:4,Daylight:2,diagnosed:54,bon:64,Jaques:2,Antonini:2,bog:63,teenage:1,Cortlandt:2,"KFAC-FM":2,passthrough:1,Mannix:2,Lansing:2,"close-knit":1,"mainframe-class":3,transplant:24,Couperin:2,infinitum:147,Conrail:2,cooperates:20,uncritical:1,Tonio:2,Aerospace:11,cooperated:54,Maintaining:8,scriptwriters:4,Kingwood:2,Carletonian:2,polymerizations:4,Customhouse:2,forswears:20,AUS:2,Ginsberg:2,bushels:4,"four-syllable":1,JOIN:39,"evil-doers":4,McAfee:2,quoting:8,Scan:2,whizzed:16,drags:20,Numbers:57,romanticized:17,Ekstrohm:2,Abney:2,thicknesses:4,Purkis:2,Heather:2,Conalco:2,fuck:39,forerunners:4,Cougar:2,floodheads:4,"RE-ENTRY":2,subconsciously:6,"metal-workers":4,Earns:20,nonchalant:1,Carrollton:2,Flotilla:2,irreverent:1,"hazardous-waste":22,Liddell:2,Germania:2,"male-sterile":1,Germanic:66,metamidophos:4,Amerongen:2,Urn:2,"hand-tooled":1,nondairy:1,Urs:2,"CORP.":2,"sweat-soaked":1,"fetal-alcohol":1,Braniff:2,Restless:1,reseller:236,Olean:2,Headland:2,"brokerage-firm":1,Nicaraguan:66,Sequa:2,demonstratives:4,Hasbrouck:2,spreadsheets:4,"half-inch":1,fatalities:4,solder:82,blooded:17,Trappings:2,"Cf.":39,Muscle:47,police:237,"domestic-policy":3,Rail:11,Rain:11,Regis:2,Guatemala:2,Opportunity:11,"one-out-of-three":1,transparently:6,reinvested:54,underpinning:21,"Terg-O-Tometer":2,Solomons:28,tucked:54,Burghardt:2,soulful:1,contravened:32,lunch:25,markings:4,Fiasco:11,Kloner:2,"Selmer-Sande":2,Trabb:2,Seville:2,showcasing:8,"home-owners":4,physiologic:1,"one-over-par":1,Sentelle:2,unachievable:1,elephants:4,"mass-market":3,"well-paying":1,SERVICES:46,"foreign-trading":1,Routine:1,Disappointing:1,Lollipops:4,carrion:3,Successful:66,HEFTY:2,FSLIC:2,Pocket:2,Stansfield:2,"Longer-term":97,registries:4,irrigating:8,G:238,Rights:239,Needing:8,"non-bank":1,publicsector:1,coffers:4,noisemakers:4,Luigi:4,ajar:6,Maharashtra:2,Fight:63,contented:14,Microscopes:4,Andruses:28,frequent:240,adoptees:4,Lindens:28,fleeing:8,dungeons:4,SHEVARDNADZE:2,subterfuges:4,"neo-populist":1,"Super-Protein":2,enthralled:7,Black:129,intrastate:1,overheating:5,noisier:12,Lecky:2,Isolating:8,"Anglo-American":40,Minerva:2,Norwell:2,"home-state":1,"bare-bones":1,Saxe:2,"vacuum-tube":1,"fifteen-mile":1,speaking:55,"anti-South":1,Oncor:2,inefficient:1,Miracle:2,Ministries:2,Denouncing:8,"Court-packing":1,Hanshin:2,Consulting:11,doddering:1,Addwest:2,automakers:4,"big-shouldered":1,Styrofoam:2,Jayark:2,DeWalt:2,thyrotoxic:1,EUROPE:2,Bandini:2,Rockies:28,defecting:8,Expectations:56,Lovett:2,"hard-hit":1,incontestable:1,himself:53,nondefeatist:1,Waterston:2,Torrance:2,squat:104,Steudler:2,Broncs:2,shocked:45,"more-muscular":1,quieting:8,reacquainted:17,Bronco:2,Kazakhstan:2,Mathematical:1,ultimate:1,flattered:81,Worldwide:2,DHL:2,innuendoes:4,Parrot:2,"with-it":1,arguing:55,cathedrals:4,"cost-raising":1,humorists:4,Kellum:2,tugging:8,Keane:2,incisive:1,"wheel-loader":1,bleating:8,cosponsors:20,Actively:6,Graubart:2,"Duty-free":1,iniquitous:1,Harriers:28,WE:53,WB:2,"big-boned":1,Detached:17,"pro-U.N.F.P.":1,Yuppie:11,WW:2,Barre:2,maninstays:4,"high-profile":1,"new-rich":1,We:241,Wa:242,Wo:190,"non-Soviet":1,treasure:78,"Uzi-model":1,Wu:2,Diary:2,coagulating:8,travesty:25,pegged:45,Partisan:2,"program-trade":1,"even-larger":1,Kleist:2,"self-plagiarisms":4,seekin:8,Frothingham:2,hailed:32,gee:106,juleps:4,unaltered:1,bitters:4,Pelin:2,enjoys:20,Mommor:2,Laird:2,Right:243,Angel:2,"W.":11,Snodgrass:2,requesting:8,"growth-stunting":1,miles:4,Weiler:2,"less-restrictive":1,Attribute:2,Anger:174,Delacre:2,ANR:2,declared:112,Wyndham:2,Grant:59,Provide:42,sear:39,Wansee:2,seat:44,HELD:16,declares:20,Neave:2,Grand:244,Placement:11,emulating:8,Grano:2,Shaefer:2,Machiguenga:2,Nakazato:2,Bonecrusher:2,indicted:54,Illiterate:1,"tongue-tied":1,"pilot-management":1,label:44,boundaries:4,"public-information":1,permeated:54,Mercantilists:4,"government...":102,across:245,"property-tax":1,satiate:39,august:1,FOR:127,"data-base":3,dreamless:1,dogging:8,Each:246,"beefed-up":1,Perse:2,Potlatch:2,Carver:2,philosophically:6,feelers:4,Carvey:2,fulminate:39,"badly-needed":1,blasts:4,sketchy:1,Taught:17,tout:247,Carved:1,Statistical:40,Laboratory:11,"long-sleeved":1,ISRAEL:2,polities:4,Wachtel:2,dislocations:4,"V-shaped":1,McLennan:2,PRICIEST:51,Riley:2,considering:8,Assembly:11,capable:1,wobble:63,Affiliates:74,Optical:2,wobbly:1,Assemble:39,Affiliated:157,capably:6,lustily:6,vopos:64,repurchasing:8,Hathaway:2,wake:24,Solovyov:2,"stand-ups":4,hardcore:3,Revise:39,Chiaromonte:2,Showalter:2,"earlier-reported":1,Baths:28,investigating:55,Shipbuilders:28,falsified:17,blackballed:17,Shivers:2,Crutzen:2,"Tibetan-like":1,Burge:2,Intermediate:40,Blumenfeld:2,Symposium:11,Targetted:2,essayish:1,doubting:30,dairies:4,paring:8,woodland:1,Destruction:47,grantors:4,extended:45,expended:54,Mustangs:2,Barcelona:2,annulled:16,Holliday:2,Ortho:2,CAPITAL:11,pistoleers:4,shopworn:1,Hampton:2,"Indian-summer":1,identifiers:4,Fosterites:2,stunted:17,Carlton:2,Bit:163,admonishing:8,Marxists:28,convened:32,consisted:32,Englishy:1,Einsatzkommandos:2,Feedlots:4,"snug-fitting":1,Pittsburg:2,embroideries:4,statesmen:4,"willy-nilly":97,Putka:2,"pre-clinical":1,"silver-painted":1,Weekes:2,Nisbet:2,Enver:2,glutinous:1,tenses:4,"First-Born":2,Coconut:2,tensed:16,Telefonica:2,"Well-trained":1,GRAND:66,Liberal:129,"DC-10s":65,vertically:6,acquainted:17,vending:27,Haase:2,utopians:4,Gannon:2,Moreover:248,passionate:1,escalators:4,Digest:11,"woolly-minded":1,"Schmidt-Chiari":2,obsessions:4,Gilkson:2,Romana:2,pronounce:39,Analogously:6,Pembina:2,snoring:55,smarting:8,prerogatives:4,illustrated:81,Shipyard:2,Pasteur:2,Skies:28,"thrust-to-weight":1,"staff-reduction":22,"snake-like":1,Ciardi:2,"sixty-day":1,Vietnam:2,Assuredly:6,glomerular:1,Intermediates:65,"long-studied":1,"R-shaped":1,"city-states":4,Images:2,"most-dangerous":1,purported:249,fertile:1,Middletown:2,quintets:4,Buaford:2,Maintenance:11,certitudes:4,Trapped:17,pastures:4,hassling:8,Leperq:2,Baruschke:2,distracted:54,collided:16,deadlines:4,Appropriation:2,practised:1,"gains-tax-cut":1,spicy:1,Baliles:2,Dorgan:2,wholehearted:1,Orlick:2,"pre-kidnap":1,Meller:2,"information-services":176,Mellen:2,"whichever-the-hell":1,BATTLED:16,Guber:2,spice:24,"well-understood":1,Eddie:2,"Angeles-based":1,powerless:1,dawdling:8,Hershiser:2,aesthetes:4,Shijie:2,Crucial:1,undiminished:1,examine:42,spat:250,Riding:229,Weinroth:2,Mulligatawny:2,strikers:4,Busby:2,turmoils:4,Cuneo:2,designating:8,weeded:17,Courtenay:2,"what-nots":4,Buddhists:2,Somewhat:6,"Tse-tung":2,victimize:33,Milko:2,Climate:11,deliverers:4,FPA:2,equitably:6,"Fixed-income":3,FPL:2,Yorktown:2,"custom-made":7,Milka:2,Milky:2,Alfredo:2,equitable:1,itches:20,Beneficial:2,blackmailers:4,Healthdyne:2,wanta:39,boosters:4,u:251,oases:4,"double-bolt":39,grassroots:4,Waning:1,departmentalizing:8,Tomczak:2,"full-body":1,Kaplan:2,Asahi:113,Championship:2,McLuhan:2,Icahn:2,tomes:4,PRIME:10,puffs:20,Hazlitt:2,righted:17,Giorgios:2,puffy:1,yon:6,Socrates:2,Calude:2,Pels:2,Liman:2,clench:39,Objections:4,squirted:16,forking:8,alma:3,phosphines:4,Piraro:2,CTCA:2,Vilnius:2,outworn:1,clinch:39,arithmetized:17,straighten:39,Peppers:2,squeezes:72,"late-summer\\":1,Corollas:28,repeals:20,Densmore:2,Laro:2,wrecked:85,Muffler:2,Hydro:2,fetishize:33,HCS:2,mull:39,"action-adventure":1,bushwhacked:16,calculates:20,witchy:1,HCC:2,Georgescu:2,HCF:2,affectionately:6,Fishback:2,Clark:2,Clare:2,squiggly:6,Clara:2,Wrangle:39,WLIB:2,repaying:8,Keenan:2,Separating:8,Marquette:2,collated:17,specialize:42,Misawa:2,splashes:72,Reform:11,"Mmes.":28,"rock-ribbed":1,Carboni:2,Dolly:2,pigmented:17,Dolls:2,"correspondent\\/news":4,monocytogenes:64,Bialystok:2,Houtz:2,Coming:229,Lekberg:2,Governments:123,Biblically:6,engaged:81,jangling:8,"just-departed":1,"Communist-led":1,Byronic:1,karaoke:147,Purcell:2,Brody:2,recall:182,sulkily:6,Activists:4,marcato:64,"social-register":1,Oregonians:28,remain:42,halts:18,reaps:20,proteolytic:1,stubborn:1,synchronized:14,rejuvenated:14,minimum:252,"petroleum-exploration":1,UNESCO:2,Calif:2,rejuvenates:20,Yalta:2,Sandhurst:2,Chromatography:47,misallocated:16,comfort:25,"low-risk":1,maps:4,Wamre:2,Nouns:4,stir:95,Comanches:28,uninfected:1,Kelli:2,divinities:4,"spread-sensitive":1,Shafroth:2,Transplantation:2,countering:8,accorded:54,Erde:2,verified:17,undecided:1,reappeared:32,"hair-trigger":1,CLARK:2,tradeoffs:4,conglomerates:4,"special-service":1,Muscular:2,rebuked:32,"co-exist":39,Kurtzig:2,Bish:2,mulching:8,heartfelt:1,RAYCHEM:2,Creamer:2,Roald:2,"Inefficient-Market":2,Canfield:2,hundredth:1,comedic:1,emaciated:14,"Final-hour":1,seasonally:6,"three-hour-long":1,"counter-culture":1,Jath:2,worshiping:8,cinches:4,Fuchs:2,Scana:2,hyphens:4,compound:139,"walk-to":1,viewers:4,groped:16,Polished:1,"Chmn.":2,Kika:2,"Super-Sets":2,evade:39,micro:1,Merkurs:28,"submarine-launched":1,repeating:30,"integrated-circuit":1,politicize:39,Berle:2,engaging:30,managements:4,suspecting:8,edged:85,wisecracks:4,bandaged:14,acquisitive:1,Coor:2,Braumeisters:28,traitorous:1,Cook:128,Cool:253,"semi-celebrities":4,"Long-range":1,extraordinary:3,"asked...":102,Enos:2,deflate:39,backed:81,Migliorino:2,Nielsen:2,Archbishop:2,constraining:8,Puritan:40,"white-spirits":1,PAPER:254,Puritans:4,"private-bank":1,Lorena:2,Smukler:2,treetops:4,Homewood:2,welcome:255,"steel-gray":1,faultlessly:6,mercilessly:6,WPP:2,Slums:2,Environmental:40,"paper-products":152,"four-count":1,Silesia:2,catapult:42,Justin:2,Ballenger:2,Napkins:4,"sea-launched":1,differentiate:42,Dividend:47,"after-school":1,"cost-savings":176,Franklyn:2,Juncal:2,"third-dimensional":1,"clear-it-out":1,Cimoli:2,unbroken:1,ONCE:6,Sprinkel:2,swerve:256,confessional:22,focally:6,Eurocops:28,Amusing:1,Aterman:2,"three-quarters":91,Administrative:40,ditched:16,Limitations:57,Lucio:2,Bernardo:2,Ukrainian:66,Lucie:2,Cudahy:2,Lucia:2,lifts:72,zitless:1,Laband:2,"electro-optical":1,chary:1,serene:3,eggs:4,Holes:4,chart:44,serviced:54,Holen:2,charm:25,"Evans-Black":2,services:18,Fresh:66,Taras:2,teems:20,Anointing:8,honkytonks:4,"dealer-related":1,WATCH:39,Beira:2,seething:30,Rexall:2,consanguineous:1,chelas:4,rebels:18,swelling:5,"charter-shipping":1,Confident:1,"shut-in":1,Billiken:2,headlines:4,exteriors:4,Freeman:2,sluggishly:6,Sellers:113,Caterpillar:2,"Solomon-like":1,sanitize:33,thruways:6,Concluding:8,unagi:64,Keeny:2,"City-based":1,"U.N.-monitored":1,"Guilford-Martin":2,Favorite:40,toddlers:4,"mid-1950s":4,rotted:17,Amending:8,"methanol-powered":1,judiciously:6,Keene:2,Scenarios:4,spikes:4,motorcycles:4,Distributors:92,enclaves:4,Lucullan:1,Ecogen:2,Minneapolis:113,motorcycled:16,"pre-production":1,spiked:7,Female:1,Apologies:4,restaurants:4,"light-flared":1,Morse:2,"semi-finished":1,semisecret:1,overburdened:81,"short-contact":1,internationalist:1,Woodside:2,Omnicorp:2,Sigemund:2,GET:39,"GE\\":2,GEC:2,cahoots:4,"eight-year":1,Richards:2,Bayaderka:2,Superstar:2,rbi:4,trustingly:6,Archibald:2,"plutonium-powered":1,inimitable:1,Detective:2,Yeh:2,defunct:82,Slower:12,appropriations:4,Yea:106,Gann:2,foreign:1,sparring:55,Reservoirs:2,focused:81,Dawson:2,Yet:257,Yew:11,subpar:1,combinable:1,duplicable:1,Surrounded:17,Rastus:2,panicking:8,Schaumburg:2,"cross-functional":1,"non-instinctive":1,Institut:2,Checks:4,Khmer:2,fused:54,Middenstandsbank:2,Wendell:2,Processing:258,appall:33,"TV-Cable":2,screened:54,grandsons:4,peppery:1,fuses:4,peppers:4,"middle-of-the-roaders":4,nukes:4,assorted:7,decorous:1,roved:16,"non-Germans":4,"two-valued":1,Stockholm:11,Rory:2,resisted:54,outriggers:4,evangelical:1,Indications:4,dicks:4,Pohly:2,deferred:45,teaspoonful:3,mechanochemically:6,Institue:2,radiosterilized:17,Rehfeld:2,perilously:6,"audience-friendly":1,Delay:11,confining:8,DataQuest:2,stoves:4,Ira:2,Elliott:2,Ahm:53,"all-important":1,infernally:6,Copp:2,"lap-shoulder":1,Sonnenschein:2,bristle:90,Heine:2,Copy:158,riddling:8,currencies:4,"Cash-pressed":1,PETROLEUM:2,"deterrence...":102,SISAL:2,unveil:39,LVI:2,"horse-drawn":1,gestures:18,organically:6,Serving:8,whores:4,PLANS:20,Plainly:6,Councils:28,Healthvest:2,Carolus:2,iffy:1,Economic:40,Insitutional:1,briquettes:4,"Fiscal-year":1,"consumer-minded":1,Albany:11,"criss-cross":259,Kennewick:2,Obispo:2,zestfully:6,segregate:39,Boren:2,Picon:2,shrewdly:6,Minolta:2,"place-names":19,choreographers:4,Aspirin:2,McGann:2,postal:1,Proprietorships:113,PROPOSE:39,adjusters:4,"coal-black":1,studious:1,Christopher:2,impassible:1,clamping:8,Astra:2,"per-ad":1,Belknap:2,malfunctions:4,Commons:77,Truth:47,bribing:8,knock:95,Butterwyn:2,"L-shaped":1,"hard-wire":1,parsimonious:1,borrows:20,loyalist:22,foolish:1,Happens:20,outscored:16,lastest:51,Fischbach:2,Deliberately:6,blow:44,scalps:4,Togs:2,balmy:1,pleats:4,"revenue-desperate":1,fixations:4,inimical:1,Ambridge:2,Bosket:2,Freni:2,Cascade:2,Sourcing:8,"self-published":1,Birkel:2,feigning:8,Nomani:2,Cocoa:11,canvassing:8,Cocom:2,hindrances:4,buffoons:4,abusive:1,seating:21,"English-rights":1,Increase:260,inhospitable:1,Oberkfell:2,retailed:17,Zaroubin:2,"U.S.-style":1,Feeley:2,underused:17,Cordis:2,"out-plunging":1,underlines:20,Esperanza:2,Stephenson:2,exterminated:17,Filter:2,mechanistic:1,underlined:32,"Supply-sider":2,HONECKER:2,Beijing:116,pickers:4,Kazakh:2,corkscrews:4,Bennett:11,Groucho:2,"drug-traffickers":4,"market-specific":1,Potala:2,curt:1,constant:34,pseudonymous:1,GORBACHEV:2,beckoning:55,scarlet:1,Charisma:2,cure:24,"network-writer":1,fabricating:55,Linda:2,curl:42,Municipalities:4,pecks:4,Commissioned:17,"Neo-Classicists":28,confine:42,"dark-green":1,Advance:40,Bowles:2,Kleiman:2,Slogan:2,endocrine:1,"marijuana-smuggling":1,"less-risky":1,showgirls:4,HDTV:47,Hainan:2,cater:149,utterly:6,unenforceable:1,reflectors:4,Bartville:2,Taft:2,implies:20,healers:4,"red-and-yellow":1,"mortgage-interest":1,cooked:54,implied:81,Determine:39,razing:8,conjugal:1,verstrichen:64,Voegelin:2,portraying:8,groceries:4,fascinatingly:6,Coons:2,Angelina:2,marveled:32,Bonds:56,"ill-suited":1,reductions:4,Prepayments:4,masculine:3,Sietsma:2,pleasing:261,NTSB:2,Redoute:2,presently:6,Sportswriters:4,Ibbotson:2,radiophonic:1,startlingly:6,hoards:4,uttuh:39,entire:3,"economic-reform":3,diverging:8,"A.N.":2,RepublicBank:2,Gatos:2,busier:12,busies:4,"flex-time":1,havens:4,Timken:2,Sacred:2,Howard:262,Neoax:2,Onsets:4,Fast:40,Birns:2,Faso:2,"wider-than-normal":1,repurchased:54,"par-5":1,emigrations:4,fat:3,IUD:2,Butts:2,Butte:2,employerpaid:1,Tindal:2,Nugget:2,apologetic:1,vexatious:1,Afranio:2,packing:55,healing:122,safer:12,DEVELOPMENTS:28,"million-gallon":1,Oreos:28,windfalls:4,Jennifer:2,Correll:2,Henritze:2,implement:42,Reedville:2,absolutes:4,bumming:8,"light-duty":1,Starlings:4,Rhode:2,Rhoda:2,Batchelder:2,"over-50":1,Answer:25,welcomed:32,Aston:2,oilfields:4,abhorrently:6,Tarter:2,Garrin:2,hammered:54,"once-moribund":1,"little-known":1,"year-ago":1,Eastman:2,Astor:2,prized:14,Honest:106,Revolution:11,prizes:18,Latour:2,"many-bodied":1,"steroid-induced":1,silvery:1,headstands:4,"non-communist":1,fooling:55,jeers:4,"tobacco-product":1,grated:187,"public-asset":1,closing:263,Asylum:2,fetch:42,experiential:1,blabs:20,invoices:4,lammed:16,McGeorge:2,homoerotic:1,Meninas:2,"hair-care":22,Chapdelaine:2,varied:45,Yo:2,Worrell:2,Drink:63,Ye:2,Fridge:2,Respondents:4,KFC:2,"NZ$":84,Yu:2,profile:70,Riegle:2,"Washington-Alexandria":2,dockyards:4,Hedison:2,Gosson:2,chasing:55,friendlier:136,"Texas-Louisiana":2,"Y.":2,interviewees:4,nonworking:1,miscues:4,trembling:30,"year...":102,sensitively:6,Adultery:2,furious:1,solos:18,subsequently:6,"B-52":11,"cease-fire":22,rutted:1,disarm:39,Theatres:2,McMillin:2,"east-west":1,flattering:1,electors:4,Rotman:2,enactments:4,twirls:20,Legislators:4,integrators:4,twirly:1,wadded:16,accredited:32,"bull-necked":1,blatant:1,circumspectly:6,disrupts:20,youngish:1,bolder:12,Nickelodeon:2,"century-old":1,Robie:2,LeMans:2,tetragonal:1,ineffably:6,Robin:2,frayed:7,blindfolded:81,"shelf-registered":1,Indicated:16,Gari:2,mammals:4,Kailin:2,Moroccan:40,Gary:2,Talsky:2,theatergoing:1,Sanjay:2,"two-inch":1,recoated:17,Finucane:2,Print:39,"table-top":1,sexual:1,Prins:2,Kaliniak:2,Griston:2,Nu:2,Hein:2,Ching:2,China:2,Chino:2,Chinn:2,tradeable:1,Bostonian:2,Kakita:2,Trappist:1,fluctuates:20,NJ:2,Natick:2,Picks:20,fluctuated:32,"Manhattan-based":1,goitrogens:4,Exceptions:4,Specific:1,Outlook:47,Durban:2,"candle-lit":1,hinting:8,"better-educated":1,Rothwell:2,"V-8":66,"V-6":129,Sammy:2,Adsi:2,handier:12,"seventy-six":1,braced:54,Emhart:2,reaches:72,glanders:4,Pickup:2,Tuitions:4,Necesarily:2,reached:54,hashes:4,braces:4,presuming:8,pershare:1,MANAGEMENT:2,"coffee-roasting":1,Symbol:47,demythologized:14,intermediate:1,"then-Vice":40,"student-directed":1,programmable:1,cartoonlike:1,bulldog:1,hesitatingly:6,Gainen:2,unsubtle:1,Hartweger:2,NP:2,Gaines:2,"three-front":1,inapt:1,coughed:32,"opposition-party":1,Pound:11,Portraits:28,Agnese:2,Sabrina:47,"long-term``":133,tenements:4,Stirs:20,Battista:2,mastodons:4,"men-folk":4,Hagood:2,"FRINGE-BENEFIT":1,Newhart:2,yearned:32,have:264,"Dollar-De":2,Bacarella:2,continents:4,"black-and-yellow":1,shoestrings:4,"million-share":3,gingerly:218,"capital-to-assets":176,"whistle-stop":1,"computer-edited":1,LeGere:2,Meggs:113,Morley:2,orchestrations:4,Scientology:2,mimics:18,Rafer:2,enamels:4,clinkers:4,inexorable:1,beets:4,misrelated:17,Banca:2,MICROPOLIS:2,occasion:25,Banco:2,contemptuous:1,inexorably:6,squeegee:33,Gonzalez:2,Britten:11,ejaculated:16,Capshaw:2,demurred:16,Wheelabrator:2,trustfully:6,submachine:1,definable:1,ImmunoGen:2,Snezak:2,"freedom-conscious":1,Colodny:2,Doner:2,Vanessa:2,"no-hit":1,Arau:2,"standard-weight":1,emitting:8,Handelsbank:2,Hummerstone:2,Thrift:11,Casanovas:28,hijacking:21,Finnish:1,reputations:4,microelectronic:1,Winnick:2,Husak:2,Blevins:28,Gaffney:2,subways:4,teams:18,Helaba:2,PITCH:2,excesses:4,Zoe:2,hypophyseal:1,CONSOLIDATED:2,"GNP-based":1,polyphosphates:4,Zoo:2,daffodils:4,Vanuatu:2,tuxedos:4,Juliber:2,Squaresville:2,Pettibone:2,Discreet:1,wean:39,invariant:3,tediously:6,"b-Week":265,dirty:82,antiquarians:4,Nonelectrical:1,various:1,Incline:2,weak:1,Inexpensive:1,antics:4,Elvador:2,Financings:4,watts:4,Tompkins:2,effluent:22,Osamu:2,revoked:17,UAP:2,joke:24,equal:255,pulp:25,Byrnes:2,liquidating:5,politicizing:8,statues:4,"bond-market":1,Piscataway:2,Machinists:266,liquidations:4,Miklos:2,Musica:2,Buffet:2,"tax-law":22,playwrights:4,magnetized:17,devoting:8,"self-aggrandizing":1,Thailand:11,Huerta:2,"thrift-industry":22,"hard-core":1,Massachussets:2,Parsow:2,Trevor:2,Airlines:41,Parson:2,"advance-purchase":3,welcoming:267,Arigato:64,Spruell:2,Tissues:28,"limited-scale":1,General:40,Nunn:2,Pricing:268,hubs:4,ensuing:8,frustrating:13,"liberal-democratic":1,Carty:2,workplaces:4,weighed:32,arrangements:4,closets:4,marginalia:4,watched:112,Beach:11,"corporate-lending":1,tumbled:112,whirl:44,Return:269,Schuette:2,MBK:2,diets:4,MBE:2,DiSimone:2,MBA:47,MBB:2,"sugar-coated":1,"Polo\\/Ralph":2,Postel:2,Posted:54,garish:1,Pemex:2,Prevents:20,Aims:20,Groves:2,Grover:2,noncommittally:6,unfetter:39,"C.R.":2,Westminister:2,Pasquale:2,disoriented:14,exceedingly:6,wobbled:32,residuals:4,redeemable:1,Warshaw:2,comparisons:4,multibilliondollar:1,Weimar:2,stores:18,numbering:55,interim:3,Collected:2,localize:39,"nerve-shattering":1,Aspects:28,repetitious:1,reformer:3,onward:6,demographic:1,"future-time":1,slits:18,Jacobius:2,tremulously:6,Heiko:2,embossed:32,bishops:4,reformed:81,characteristically:6,resolved:54,footholds:4,"co-founders":4,Thread:39,Madrigal:2,Hadley:2,Gran:11,resolves:20,Release:128,"computer-age":1,Inflammatory:1,like:270,vibrant:1,Niem:2,admitted:112,Anders:2,"job-hunting":1,"coin-cleaning":1,"one-year-old":1,Heldring:2,"foamed-in-place":1,Wasatch:2,Meyerbeer:2,Arney:2,scurried:16,"federal-court":3,Arai:2,hail:44,"Tribune-Democrat":2,Palatine:2,Janofsky:2,elephantine:1,indemnify:39,poseurs:4,scurries:4,"Non-Catholics":4,Crosbys:28,trust:24,"OS\\":11,McDLT:2,unalluring:1,Racks:72,"null-type":1,Mathues:2,Baker:2,Bakes:2,"non-readers":4,uptight:1,Oubati:2,Diebel:2,marketable:1,Foggia:2,Indulgence:2,Jarrell:2,CPAs:56,introduces:20,befogged:1,Japan:2,introduced:54,Kingman:2,Salina:2,Psychology:2,socks:4,Iraqw:2,Iraqi:66,termini:4,Mindlin:2,lightyears:4,Cronkite:2,Lanzhou:2,Fresca:2,elastic:3,rushed:112,"two-tone":1,petroleumproducts:4,FAST:2,rushes:72,Artra:2,onepage:1,FASB:2,"USN.":2,touted:54,insures:20,insured:271,photocathodes:4,"no-star":1,anonymous:1,"now-obscure":1,persimmons:4,Ariail:2,flit:33,"non-representation":1,flip:82,Konigsberg:2,Toshiki:2,omnibus:3,Toshiko:2,replying:8,"well-defined":1,commentators:4,identities:4,Carwood:2,Driesell:2,Trepp:2,geeing:8,dressed:81,Movable:1,interdepartmental:1,detain:39,Wireless:2,"interest-free":1,ducked:16,dresses:18,convicts:4,Cry:47,Fortas:2,Hersey:2,maturational:1,April:2,detours:4,"over-hired":16,Prospect:2,stirred:32,ramble:42,AARP:2,grimmer:68,Alonso:2,wine:22,Gratified:1,Zaves:2,sterilizing:8,Communist:272,Infirmary:2,inexpert:1,Employes:4,"public-relations":93,consciences:4,Wathen:2,glides:20,activist:22,"@":273,"non-interest":3,prowls:20,Auvil:2,Kevah:2,reiterating:8,Shook:16,canners:4,MONEY:47,harried:54,ANNUAL:1,barracks:19,"Norris-LaGuardia":2,feathery:1,Fortunately:150,Nightmare:11,feathers:4,direct:274,Solly:2,nail:275,Okamoto:2,bubblelike:1,"Samsung-Corning":2,caseworkers:4,commemorating:8,revolves:20,Houdini:2,Mmm:106,oaths:4,Manko:2,ebbs:20,rubdowns:4,revolved:32,Augustan:2,electroshocks:4,ultimatums:4,"half-past":1,overplanted:17,vertebrates:4,GARY:2,Fitchburg:2,"red-and-white":1,snacked:16,Dames:111,Obligations:4,leaves:276,Elkus:2,"Per-capita":1,"White-haired":1,Barbados:2,midway:277,issuers:4,prints:18,"consumer-analgesic":1,"Well-Tempered":1,Narrative:1,purifying:8,Henceforth:6,Pasadena:2,meats:4,Lefcourt:2,audivi:64,meaty:1,riots:4,saleswomen:4,gweilo:64,"dollar-sellers":4,fainting:21,Sounion:2,"Blue-chip":1,Legers:28,overstored:1,excellent:1,Accrued:17,"Kay-Bee":2,supplemental:1,"Bio-Technology":2,Manigat:2,philanthropic:1,Brahms:2,Lube:2,"Fox-Meyer":2,Mohan:2,salvage:63,Buchwald:2,"male-fertile":1,scorekeepers:4,overhears:20,Jarvik:2,gadgets:4,"more-spontaneous":1,treasuries:4,keep:182,attract:42,Jarvis:2,Haywood:2,drummed:32,Poverty:47,Flemings:74,"char-broiled":1,insecure:1,befoh:6,astoundingly:6,Stookey:2,"ash-blonde":1,Wilhelmina:2,Banners:4,parallel:278,provisionally:6,humiliatingly:6,Sadler:2,"hotel-casinos":4,HEALTHY:1,amid:127,highpriced:1,summing:8,flippantly:6,funniest:51,"fourth-biggest":1,Rouge:2,Rough:3,Midvale:2,reforming:8,glories:18,"agriculture-related":1,resounds:20,Sportin:8,staining:21,Nadelmann:2,Haselhoff:2,"How-2":2,howdy:106,RXDC:2,Reva:2,Shopkorn:2,sob:39,Convinced:17,Blistered:17,McCord:2,Coastline:2,denizens:4,blots:18,diseases:4,"coconut-containing":1,Kosar:2,preconceived:1,whitened:249,diseased:1,linguists:4,Kosan:2,Nameless:2,Online:2,ennumerated:16,Soldatenko:2,"long-hair":1,steelworkers:4,Walden:2,Verfahrenstechnik:2,Unigesco:2,"Three-and-a-half":1,Adding:8,exhilarated:17,leftist:1,Handelsman:2,railed:32,Corpus:2,"Stock-fund":3,Azusa:2,Restrictive:1,Oberlin:2,banning:55,foolishly:6,newly:218,Zeien:2,Signore:2,Inferential:2,Darwen:2,associate:279,"hump-backed":1,unwraps:20,"anti-A":2,"anti-B":2,homologous:6,Signora:280,mastering:8,"too-hearty":1,mononuclear:1,Supervisor:2,Photo:2,notching:8,hyperbolic:1,spendthrifts:4,days:4,Traits:2,wowed:16,"X-rayed":17,"F.B.":2,ayni:4,ecumenists:4,Interviewed:17,lovable:1,"much-discussed":1,Shenandoah:2,"inter-German":1,ASC:2,"fact-finding":3,Insurances:28,Cocoons:4,"five-foot":1,ASA:2,pomological:1,gowns:4,Sweetener:2,malingering:8,"extra-nasty":1,speechwriters:4,Automated:157,embellish:39,Twice:6,Thames:113,Shots:4,postcards:4,Surrey:2,reclining:30,frankly:6,overinvested:17,"up-or-down":1,visages:4,Sputnik:2,hemispherical:1,seminal:1,bridge:70,Christos:2,thistles:4,Barreiro:2,"OCC-member":1,unpopular:1,"Help-wanted":1,"truck-sales":4,Binn:2,Bernini:2,"page-long":1,thoroughly:6,Trends:130,thorough:1,dermal:1,unashamedly:6,Nikitas:2,Economies:4,"court-appointed":1,"cross-bay":1,Schroder:2,erasers:4,impels:20,rancid:1,Promised:1,aggrandizing:8,pardoned:54,"mega-projects":4,overpriced:14,"Anglo-North":1,Tsarevich:2,"U.S.investors":4,Spots:4,musicals:4,Inquirer:2,opinionmakers:4,aspired:16,peddle:42,LOCKHEED:2,prevailed:32,situations:4,sycophantic:1,gouty:1,liquified:1,borrowed:45,Handicapped:2,neoclassical:1,Gunder:2,considerate:1,"dog-eared":1,Weatherly:2,angers:20,bel:64,igneous:1,Mediterranean:40,massifs:4,ailments:4,Medialink:2,wildflowers:4,sharpens:20,skeptically:6,Wolfe:2,Helva:2,Wolff:2,Datson:2,Stolley:2,mus:190,"Corp.:8.725":2,Stoller:2,Pizarro:2,Hilger:2,"G.E.":2,hopefully:6,mum:3,furloughs:4,herding:55,"print-developing":1,deposed:54,Staffordshire:2,"pre-med":1,Zimbabwean:40,portrays:20,CEREAL:2,"four-quarter":1,NASAA:2,Drahuschak:2,Bridgeton:2,"born-to-shop":1,fault:44,Barnum:2,overcooks:20,Pantas:2,"six-day":1,consonantal:1,Gandois:2,spurs:18,"industry-specific":1,interoffice:1,HomeFed:157,Blomfield:2,antiSony:1,Geos:4,TVs:57,"hands-down":1,"foamy-necked":1,inactivate:39,Vendome:2,corteggiamento:64,villains:4,"pre-selected":14,Cutty:2,FEMALES:4,TVX:2,Hockett:2,warehouses:18,sororities:4,zigzags:4,TVS:2,Spencer:2,beneficiary:22,Bering:2,TVA:2,unchanged:1,refuted:32,Adams:2,pecked:16,transatlantic:3,Adame:2,"Geo.":2,moldable:1,Adamo:2,Irretrievably:6,STATES:4,microns:4,Fillmore:2,Deputy:40,"lb-plus":1,Shuiski:2,censors:18,n:281,Herzog:2,YMCA:2,cantles:4,"AIDS-inspired":1,persecutory:1,persecutors:4,"card-carrying":1,accessories:4,dazzled:14,Tela:2,dazzles:20,Microdyne:2,Tell:216,Thacher:2,Handing:8,Abstraction:11,prior:282,forgitful:1,"high-polluting":1,Woodruff:2,beside:206,Chongju:2,Remarks:283,"single-valued":1,Imaginary:40,Clumps:4,Primerica:2,peaks:18,Descending:8,Oley:2,Oleg:2,unyielding:1,Cascading:55,Olea:2,goofed:16,Patterson:2,darned:6,"all-something-or-the-other":1,shortly:6,Muenchmeyer:2,Manager:11,multistage:1,Ethical:2,"Narrow-gauged":1,Utility:11,assembling:55,Estonian:66,"ex-housing":1,grades:4,"less-profitable":1,"gray-thatched":1,Kuwait:2,warping:55,Konstantin:2,Heileman:2,gave:16,Epinalers:28,salacious:1,breaks:18,LEAVING:8,Doolin:2,Skyline:2,descending:8,overcrowding:22,"b-Includes":20,melting:5,Chrysalis:2,renames:20,Shevardnadze:2,Unmarried:1,Echo:2,renamed:54,majored:17,Hakko:2,envision:149,Mosque:11,"M30":2,"Takeover-stock":1,Champagne:11,Pitiful:2,Edinburgh:2,Experienced:17,SCI:2,SCE:2,Gurla:2,Annalee:2,SCA:2,mystified:17,Hiram:2,Spago:2,loins:4,Tradition:47,SCR:2,khaki:1,Huggins:2,plugging:55,Camaro:2,"mark-ups":4,Coincidences:28,Kligman:2,METALS:57,ASDA:2,shuck:39,Courtaulds:2,blabbed:16,plying:8,Renata:2,Strivers:28,Scarface:2,Runnan:2,Florio:2,aber:64,disaffiliate:33,unsalted:1,Keshtmand:2,Environment:11,ahs:106,abed:6,RATES:92,Tewary:2,Islanders:28,warrant:24,transoceanic:1,Hilprecht:2,stuck:45,Brean:2,"mid-October":284,Shiremanstown:2,"data-storing":1,Bread:11,indexers:4,"Heart-measuring":1,Congratulations:75,Periclean:2,automate:39,"pp.":4,pricked:17,overcollected:1,Aviazione:2,deoxyribonucleic:1,Finishing:8,forborne:39,Cauff:2,Loomans:2,"Seventy-six":1,tipsters:4,Mifflin:2,mannequins:4,Dannemiller:2,"U.N.-backed":1,Ohmae:2,nerdy:1,more:285,nerds:4,worshipful:1,cobbled:54,Kunze:2,suspicions:4,Edouard:2,limbic:1,sometime:218,"voter-approved":1,Taylors:28,inborn:1,eerie:1,Panelli:2,outgrew:16,Rinker:2,Cornwall:2,Rouben:2,Ewan:2,beheading:21,"Euro-banners":4,"but...":102,implant:25,papery:1,squeals:4,ROARED:16,Britoil:2,savviest:51,SPERANDEO:2,flushes:20,"V.H.":2,shirkers:4,flushed:54,Woodhaven:2,Forecasters:4,agayne:6,faster:286,"Universal-International":2,vigorously:6,Clifton:2,roomed:16,unchallenged:1,remarked:32,fasten:42,nuclei:4,"item-processing":1,"relation-back":1,Klugt:2,winnings:4,Tsk:106,"Dutch-descended":1,rob:42,Vickstrom:2,deliveries:91,Fuqua:2,Transcontinental:2,Getz:2,Kluge:2,"savings-type":1,functioned:32,Gets:109,rot:25,row:24,inverse:3,"unk-unks":4,"blind-sided":7,"September-October":2,unconcernedly:6,Oesterreichische:2,"R-Cape":2,marrieds:4,"Snap-On":2,Whittlesey:2,Holston:2,frequencies:4,emphasizes:20,Creepers:106,Tsunami:4,Roylott:2,"feel-good":1,emphasized:32,hydraulically:6,"near-majority":1,Danger:11,"Owens-Illinois":2,Accounts:56,Tyndall:2,"Yok.":2,Novo:2,irritates:20,Azcuenaga:2,Braddock:2,Nova:2,thickest:51,widened:32,"double-bladed":1,"video-rental":1,Savory:1,"\\*\\*":287,Feuermann:2,irritated:81,evaporative:1,explictly:6,"psyllium-fortified":1,goes:20,hopscotched:16,Qui:64,jilted:17,"now-legal":1,"Nov.":128,Fragua:2,slaying:21,learn:42,erembal:2,Pebworth:2,Mainz:2,Fischer:2,boast:256,rethink:63,AGENCY:11,"then-Speaker":1,lamps:4,"prudent-man":1,Maine:2,Leet:2,Kress:2,Lees:2,Visiting:229,problematic:1,atrocious:1,wreak:39,Ohioans:28,Kresa:2,civilizations:4,Jerky:2,bulbs:4,Sienkiewicz:2,chimps:4,variously:6,Nikon:2,Appel:2,prey:24,meanes:4,prep:3,today:168,plug:24,Westamerica:11,Pellegrini:2,cased:16,fuel:24,"higher-than-normal":1,Manningham:2,BUFFALO:2,Lavidge:2,depressants:4,"family-owned":1,posthumous:1,inveterate:1,dthat:127,Vesco:2,Bergsma:2,hitmakers:4,address:24,Kanon:2,figure:288,adherent:3,Hutchings:2,Encino:2,unloads:20,McDowell:2,"air-cell":1,Dilys:2,Concerning:8,"middle-range":1,"medium-to-long-range":1,Tarwhine:2,"night-vision":3,fourth:97,Demand:169,"deep-pocketed":1,"generic-drug":22,digesting:8,Coproduction:2,trickling:8,unificationists:4,representations:4,eighth:3,Exclusive:1,Gomez:2,Cardin:2,Soup:11,pastilles:4,Newport:11,Behague:2,Ratner:2,statisticians:4,Unruh:2,DOORS:4,dreading:8,farmed:187,stanchest:51,Rules:130,cathodoluminescent:1,"non-confrontational":1,Wesley:2,Everywhere:6,pervade:33,Matamoras:2,leggy:1,Ruled:17,Wildlife:11,nomads:4,Harmonizing:2,Koenigsberg:2,"non-recessionary":1,"top-four":1,Nobuto:2,Ultimate:40,Ornelas:2,inheriting:8,invents:20,"argues...":102,Monsky:2,"community-based":1,"all-New":2,ordain:39,farewell:235,Petersburg:2,Poag:2,Eugenia:2,intended:45,UGI:2,"computer-market":1,concur:149,precooked:17,sha:190,tensions:4,prophesized:16,UGF:2,abounding:8,Timpanogos:2,"with-but-after":1,Throw:216,monopolized:32,"one-owner":1,Gregoire:2,Economizers:4,"nuclear-weapons-sites":4,"dyed-in-the-wool":1,TECHNOLOGIES:2,minted:17,drilled:54,Bock:2,Battery:11,"then-Secretary":2,Boca:2,Virgins:28,Gringo:47,Holler:2,outbreaks:4,mortars:4,Longview:2,Holley:2,"Ah-ah":106,"long-troubled":1,"Hyde-to-Jekyll":1,parasols:4,handled:54,Chernishev:2,unattainable:3,dissolutions:4,squashed:7,"in-state":1,Lido:2,spurned:45,"native-born":1,prayers:4,"less-than-robust":1,Contras:41,DGII:2,arousing:8,"seller-financed":1,Aurelius:2,"international-share":1,Lids:4,Netty:2,Bruckheimer:2,Kaufhof:2,stylized:7,"SE\\/30":2,Netto:2,grunt:63,"strange-sounding":1,"prior-approval":1,Garment:2,"barrels-a-day":1,Yoshiyuki:2,cards:4,Thelma:2,Bakeries:2,BPC:2,BPB:2,overfill:39,Grange:2,Attraction:2,stiffest:51,Navona:2,exchanging:8,ADR:2,batting:55,ADS:289,Karlis:2,subsystems:4,"```":25,Lemmon:2,Hotelecopy:2,Topeka:2,sciences:4,"jade-handled":1,Sauternes:74,Jachmann:2,Londono:2,commonplace:3,"Korean-American":66,Barnaba:2,Good:290,wireless:1,annum:80,Geduld:2,proud:1,pores:18,Abreast:2,pored:32,Gesamtkunstwerke:64,"pop-out":1,drastically:6,Anglophilia:2,antitakeover:12,cheat:42,Kanjorski:2,allegations:4,Research:11,spaces:4,Opposed:17,Bundesbank:2,inshore:97,painlessly:6,trot:25,Publishers:41,Confer:2,believing:8,Mimi:2,Overtega:2,Louis:2,Annual:66,broadest:51,Europalia:2,Kennametal:2,Lashof:2,Colombatto:2,cylinders:4,heisted:16,cautionary:1,burlesque:1,Doherty:2,"high-backed":1,contrivances:4,Goethe:2,Salim:2,Gouldoid:1,jokes:18,Geoff:2,predicted:85,"E.W.":2,Dagens:2,Plympton:2,Conquest:2,Lamphere:2,"oil-depletion":1,"Off-Road":2,signs:18,Jaffray:2,Conus:2,Dickie:2,Bits:4,Chicagoans:65,Chestnut:11,Tardily:6,subcompact:22,Hamish:2,Bouncing:2,Loose:40,commitments:4,"Vitro-Anchor":2,Galipault:2,"anti-apartheid":3,Breuer:2,Harperner:2,saucy:1,"three-step":3,Seiders:2,"freight-forwarding":1,harshly:6,Westerly:2,Tolstoy:11,tantalizingly:6,"ISC\\/Bunker":2,quiet:104,jillions:4,Krat:2,Genetics:74,Travel:128,"staff...":102,insist:149,Durning:2,"ECU-denominated":1,"sugar-producing":1,Numerous:1,"debt-service":3,Courant:2,turkey:22,subscribed:291,"lower-value":12,Meeker:2,Edsel:2,subscribes:20,Modest:1,"ASHTON-TATE":2,peaking:55,"vulture-like":1,Aer:2,exasperate:39,CAAC:2,surreptitiously:6,Spilman:2,"Hartfield-Zodys":2,roaringest:51,TRANSPLANT:2,case:25,Aeronautics:2,"multiple-purpose":1,Stetson:2,Intertech:2,cash:25,fiercer:12,cast:292,Conversion:11,Laurel:2,abducted:160,Lauren:2,antisocial:1,clefts:4,Dionysian:1,duplicating:8,"flat-bed":3,ironic:1,impaled:17,refiners:4,"four-wheel":1,Characteristically:6,hustlers:4,Germanys:57,revolutions:4,MarCor:2,Frenchmen:65,Swiftly:6,injurious:1,Jacuzzi:11,FileNet:2,manila:1,Lasswitz:2,frequented:32,fended:32,Aphrodite:2,"even-handed":1,Antone:2,Antoni:2,"first-half":3,"one-by-one":1,epidemiological:1,FIDELITY:2,Antony:2,"British-French-Israeli":1,Psychoanalytic:2,Failures:4,bodied:1,Zirbel:2,delectable:1,Pure:40,delectably:6,"influence-peddling":22,bodies:18,justify:42,Pink:129,Bokat:2,Yakkety:2,splices:20,Barrios:2,Pina:2,Pine:2,spliced:17,cease:42,polish:63,Decorators:2,Municipal:117,FDIC:2,feminist:3,Missile:2,Tamotsu:2,ditties:4,Bosworth:2,Bonnierforetagen:2,"assets*":4,Clairton:2,"half-states":4,"co-ordinates":20,"the...":102,Motorfair:2,"Af-stage":1,Accompanied:17,"U.N.":129,Kasen:2,acute:3,coursed:17,"eight-piece":1,Old:40,towed:32,footballs:4,Enhancement:2,Ludden:2,snatches:18,"quick-service":1,Master:11,Muynak:2,snatched:32,"arms-reduction":22,Struggling:8,animalcare:1,swaps:4,tricks:18,Cater:2,Tettamanti:2,Mercifully:6,"penny-pinching":1,Harmas:2,cringing:30,slaughter:78,Forsyth:2,lifeboats:4,"five-consecutive":1,treadmills:4,fillings:4,Genesee:2,"thin-soled":1,whence:293,Celine:2,Amherst:2,Broder:2,Anand:2,nods:72,Toseland:2,Cumulative:66,warbling:8,Hosomi:2,engendered:54,rising:267,"anti-Nazis":28,Postmaster:2,"vine-shaded":1,whales:4,Norma:2,cultured:7,Clorets:2,Norms:4,cultures:4,Veltri:2,Arcadipane:2,"livestock-dealing":1,Tunis:2,Permit:39,"triple-C":117,"triple-B":1,"triple-A":117,Turben:2,"travelogue-like":1,competitve:1,Boksen:2,incise:39,Subaru:2,"de-inking":1,"closely-held":1,Ambigua:2,"triple-a":1,Ringler:2,Constructors:28,autoimmune:1,Biederman:2,outgrip:39,Knightsbridge:2,scotches:4,Fabrri:2,deserve:149,Eternal:2,Dart:2,Dark:40,Darn:39,"seven-stories":1,"Lesch-Nyhan":2,Panhandle:59,"line-drawing":1,Dare:39,Pulitzer:2,mummies:4,releasing:8,Jaguar:11,"T.R.":2,uncorked:32,Foundry:2,Dashitchev:2,fiberglas:4,bullets:4,Dragon:2,finals:4,"land-locked":1,Satisfactory:1,"Forty-third":1,"anti-plaque":1,Cuban:66,directors:4,Presbyterians:28,directory:22,numbing:1,Maple:129,crumpled:103,tarry:39,Lubowski:2,Riggs:2,Hendrik:2,generalize:42,barons:4,Certificates:56,cementing:8,decisions:4,Subsequently:150,weightings:4,subsided:32,Kurlak:2,Frequently:150,subsides:72,Angus:2,treating:8,Silber:2,Steptoe:2,RUSSIANS:4,Dickey:2,nahce:1,Ress:2,clinched:16,Rest:216,occurs:20,singularly:6,Stitched:17,Dickel:2,renouncing:8,clinches:4,Milbauer:2,employing:8,"uh-huh":106,Willow:2,Ease:39,Hennefeld:2,Kasten:2,Ilka:2,Kaster:2,"granular-type":1,Easy:294,Flameco:2,East:295,Ionizing:8,sue:42,sub:80,sun:25,sum:25,Naturals:111,Disposti:2,sur:64,sup:39,skippering:8,Straights:4,"low-cal":1,Kodansha:2,Barba:2,toes:4,"AIDS-research":1,"autumn-touched":1,Fonstein:2,"Chardonnay-sipping":1,Ginza:47,Gloves:2,Glover:2,equations:4,"bacteria-contaminated":1,underhanded:1,"high-school":22,dues:4,Mathewson:2,"Biondi-Santi":2,"better-remembered":1,"student-led":1,tramping:8,poignantly:6,"arms-control":22,"fee-per-case":1,airlifting:8,Providence:11,Louisville:2,enlivened:17,loping:8,Intermarco:2,rustic:1,"vote-diluting":1,"radar-type":1,Richeson:2,Harlin:2,horses:4,Theodosian:1,antibiotics:4,aerialists:4,hissed:16,Trupins:28,"five-member":1,Laplace:2,Alberding:2,Wheeland:2,Libyan:10,Showbiz:2,Captures:2,Gecker:2,Cozying:8,ineffectual:1,Apropos:6,absently:6,Indefinite:1,Captured:17,"technical-services":4,Willenson:2,duets:4,Duffey:2,"asset-rich":1,Interco:2,Thompson:2,Democratique:2,"third-generation":1,ostentatiously:6,terrestrial:1,"grey-haired":1,Cashin:2,liveried:1,Cannon:2,irrigate:39,untied:16,occasionally:6,Boseki:2,antebellum:1,Lobo:2,biophysics:4,adventure:25,concentrating:8,Ceremonial:2,Belgrade:2,"Single-A-3":1,"Single-A-2":1,meticulous:1,"stock-optioned":1,untenable:1,Armen:2,"fish-export":1,Armed:98,PPI:2,Yenakiyevo:2,SAINT:2,Bottom:129,"Carr-Lowrey":2,Alsop:2,Tessie:2,Same:1,Ravitz:2,Lorrain:2,Alson:2,"Arab-sponsored":1,Relational:2,Cigarette:47,Roach:2,unitary:1,Daolet:2,transfers:18,generously:6,Err:39,Trimmer:2,countercharged:16,Era:11,Haack:2,countercharges:4,"U.S.-grown":1,instructions:4,intolerably:6,Longue:2,"Hands-on":1,Danes:41,sequester:44,accommodates:20,permanant:1,"Western-owned":1,Ready:66,accommodated:17,transportable:1,intolerable:1,erratic:1,intactible:1,Bede:2,Fabric:47,Kitada:2,oppressed:103,Butcher:2,loopy:1,Simat:2,mainframes:4,loops:18,atonal:1,oppresses:20,kotowaza:64,"Abitibi-Price":2,firsts:4,telltale:3,Vikes:28,"anti-depressant":3,hydraulic:1,compounding:55,Samoilov:2,Bryce:2,roofs:4,"side-effects":4,"management-incentive":1,Opinion:11,"shut-off":1,"Germans.":4,bourgeoisie:296,Tempter:2,"less-than-amicable":1,prejudice:25,Guardian:2,Bland:1,Blanc:2,Vietor:2,Ponder:33,shrewish:1,seeming:13,vellum:1,Connelly:2,Indian:40,Axel:2,distributive:1,earthworms:4,scathing:1,Dictionary:11,talismanic:1,Durmoy:2,leading:297,"Castro-Medellin":2,"polyether-type":1,Voicetek:2,"sub-freezing":1,"market-ready":1,"often-criticized":1,VIACOM:2,Danske:2,"second-class":1,Hawker:2,Hawkes:2,store:44,temptations:4,Bevel:39,Dangerous:66,retinal:1,"off-putting":1,Bozic:2,"five-course":1,shrunken:7,kind:168,"Munich-based":1,weatherproof:1,Semmelman:2,Chickasaws:28,Transol:2,"cut-price":1,multibillion:1,Gladiator:2,Questioned:17,tongues:4,Ballet:11,skyscrapers:4,Giampiero:2,shrewd:1,Marmalstein:2,tongued:187,Westport:2,Telegraphie:2,Cid:2,Caccappolo:2,Frabotta:2,Moreland:2,"DJS-Inverness":2,"single-sex":1,conforming:8,humanize:39,establshed:17,genetically:6,Perna:2,Levenson:2,gild:39,Equal:40,architects:4,rarefied:17,Pedott:2,probabilistic:1,farmhouses:4,dealers:4,Gaither:2,acclaims:20,lying:55,vaunted:7,safeguarding:8,grandmas:4,Dolores:113,Suits:57,inflexible:1,Suite:47,Lowenthal:2,piezoelectric:1,Affordable:40,Lacking:8,suburbanized:17,Epsilon:2,"China-investment":1,"yet-to-be-formed":1,Stratas:2,incapacitating:1,founding:27,invoke:39,ungrateful:1,"mortgage-backed":1,"H.J.":2,knighted:17,reprint:39,"Uno-Ven":2,Evren:2,syringes:4,Knorr:2,"tree-huggers":4,prescribing:8,McCoy:2,revenues:4,engraved:14,wrote:16,Whitehead:2,excellences:4,"rent-subsidized":1,procrastinated:16,visualize:39,axially:6,"worst-marked":1,surmounted:32,ups:4,Mmmm:106,Quell:2,Fogelson:2,Hsu:2,Costanza:2,obscenities:4,solo:298,ushered:32,franchises:18,Manual:66,confiscated:54,Workplace:47,franchised:14,Steinmetz:2,oversee:39,shorthanded:1,Aspercreme:2,Apollonian:1,"cancer-susceptible":1,"much-respected":1,nettled:32,"Ex-Cub":1,"drug-interdiction":22,"export-control":3,Snowmass:2,Skala:2,Metcalf:2,Lovie:106,Ibrahim:2,Yoorick:2,Cement:2,Caitlin:2,Fueled:17,Edelmann:2,Tightened:1,Pediatricians:4,"cone-sphere":1,Coeditors:4,isolationistic:1,Sunay:2,institutionalized:14,"commodity-options":4,Marcile:2,"proxy-solicitation":1,unswagged:1,precision:22,Corinth:2,rescissions:4,notables:4,"up-tight":1,Guccione:2,GoldCard:2,workmen:4,guarding:8,indefinitely:6,Leponex:2,"Fifty-fifth":2,Fabrics:130,kick:44,Aikin:2,Forwarding:2,unaccompanied:1,"blue-blood":1,Lurgi:2,"important-looking":1,Vernitron:11,laundered:54,Advancers:4,"Chicago-based":1,sachems:4,badgering:8,HUNGARY:2,shirk:39,daughters:4,higher:299,sell:50,GOOD:1,Escorts:4,Ranch:11,demarcated:17,restrains:20,Crossing:8,Triangle:11,Solana:2,Fitzgibbon:2,Qureshey:2,try:95,magnified:54,destabilizing:30,Norsemen:28,extorted:16,magnifies:20,self:300,Liberalism:47,"acquisition-minded":1,Fitts:2,prorata:64,"large-area":1,prorate:39,"Anti-nuclear":1,Dragoumis:2,Wonderful:1,Playground:2,comprehensively:6,"blank-faced":1,Ovonic:2,Groff:2,summaries:4,meanest:51,Jackpot:2,Ironically:150,Marulanda:2,Nokia:2,"comedy\\":1,Pompano:2,Shores:2,Chadli:2,difficile:64,jostle:149,Ammann:2,Sain:2,Injection:11,vetoing:8,Hilder:2,Naumberg:2,Artois:2,Enzor:2,Sail:2,Thou:53,advocate:44,bemoan:39,Kurtanjek:2,Thor:2,Thom:2,Nakhamkin:2,Foliage:47,macromolecular:1,Revising:8,"Uniroyal\\":2,skeptical:1,confront:42,phosphors:4,separately:6,deleterious:1,Cady:2,Bishopsgate:2,DALKON:2,"new-model":3,"policy-makers":4,disinclined:14,Matsunaga:2,Roustabouts:28,hurriedly:6,Prosecutor:2,"Sony\\/Columbia":2,LATE:301,Klimt:2,Gewirtz:2,Parvenu:2,"Sunday-newspaper":2,Nishi:2,"stock-manipulation":22,"jumped-up":1,Uspensky:2,perpendicular:1,refused:32,Bikers:4,refuses:20,Peiping:2,asserting:8,bristling:30,raucous:1,violins:4,lifeless:1,Bolshevism:2,"Voyagers.":28,Keizer:2,Defrost:39,youthful:1,calloused:1,CONFIRMED:16,Andersen:2,"re-engineered":32,Moffett:2,tappets:4,Arbogast:2,BioScience:2,Minster:2,flagellated:17,strumming:8,impressed:48,acquiesce:39,lone:1,handles:72,long:302,Microcom:11,"Torrid-Breeze":2,impresses:20,etch:39,EAST:303,Appaloosas:28,authored:17,audacious:1,monomers:4,Barth:2,anesthetics:4,Elizario:2,"anti-clericalism":1,fulfilling:8,Wesleyan:2,Barbera:2,bankrolling:8,"price-sensitive":1,"co-managing":13,fluctuations:4,"etc.":147,Bankhaus:2,fiscally:6,Saxony:2,Gerold:2,"water-cooled":1,Nazia:2,Attack:11,reservoirs:4,whitewashing:8,rally:24,rained:32,Nazis:41,Cunard:2,"leadership...":102,toeholds:4,camcorders:4,Jorge:2,"Price-boosting":1,"one-on-one":97,Personally:6,Prefecture:2,Colts:2,Coupons:4,nice:1,Audit:2,Hackmann:2,"private-placement":3,smitten:17,cityscapes:4,bonding:55,ROK:2,allowing:8,Audio:2,Saupiquet:2,relaunch:39,HHS:2,Asher:2,Curling:2,Edna:2,amusements:4,Turned:17,departments:4,Rubinstein:2,"Afro-Asian":2,Boisvert:2,Kinney:2,safekeep:39,Turner:2,buffalo:19,Wheelan:2,Based:231,Basel:2,Oremland:2,Foret:2,Lattice:2,Braverman:2,discordant:1,uphold:42,Shippings:4,inbreeding:55,graybeards:4,Govett:2,Morphophonemic:1,Axxess:2,languages:18,repackage:39,careened:16,blended:103,include:304,Takahashi:2,Matagorda:2,Killen:2,accommodations:4,"currency-exchange":1,Topaz:2,Reaffirming:8,Oresme:2,skivvies:4,Chesterfield:2,Bruckmann:2,"socio-political":1,disclaimed:16,leveled:32,Taurida:2,Riverwalk:2,Dyazide:2,Telecommunications:41,Euzhan:2,concluded:32,"non-fiction":3,Wames:2,Nocturne:2,Kerrey:2,wrestling:55,"electronic-transaction":1,bedpans:4,acid:22,"Cash-heavy":1,Shanyun:2,Baches:28,bibliophiles:4,Governors:130,disentangle:39,bearish:1,Coherent:2,McElvaney:2,"well-traveled":1,chose:16,Seton:2,Grovers:2,wraps:72,Apostles:28,explore:42,Yun:2,insubordinate:1,Belvieu:2,"Checchi-Skinner":2,settling:55,Goodis:2,Arvey:2,"blue-glazed":1,Christmastime:2,"operating-system":3,suggests:20,Cheshire:2,Palm:11,Pall:11,Palo:2,Phosphates:2,"pre-academic":1,Pale:305,"pro-Hearst":1,Staffers:4,saltier:12,Ships:4,hardy:1,doubtfully:6,Froissart:2,Wiseman:2,from:245,Neurex:2,procrastinate:39,underscoring:8,DEMOCRATS:4,circuitous:1,"rapid-fire":1,auxiliaries:4,removable:1,Gun:11,Wheaton:2,Landfill:47,Sequoia:11,Kondratas:2,Guy:2,Netsch:2,Affair:11,Aghazadeh:2,"fifth-best":1,accrues:20,recessionary:1,Calvi:2,Comsat:2,hookups:4,accrued:14,Tartaglia:2,Edmund:2,Farnese:2,thirsty:1,nonverbal:1,"re-set":39,"L&N":2,assumptions:4,Reorganizing:8,Australian:66,counting:55,"then-rampant":1,cliches:4,Toshiichi:2,sidewalks:4,"Large-package":1,Garments:4,Concocts:20,secular:1,cliched:1,Mambelli:2,ceasing:8,detests:20,Pockets:4,Ruwe:2,Puhl:2,Outdoor:66,hum:25,budge:39,Sonenberg:2,civics:4,villas:4,Kings:74,Liriano:2,"Sino-foreign":1,Craton:2,perishing:8,sanctioned:17,Interference:2,interpreted:54,strove:16,Tortoriello:2,Mitre:2,Markese:2,"late-1988":1,dismaying:1,Fairly:6,neighborly:1,Lublin:2,crowds:219,Admassy:2,Tickets:4,Ibn:2,undoing:21,impressing:8,Deloris:2,REPORTS:4,abstractive:1,clippings:4,measly:1,edit:39,enviable:1,redwoods:4,"three-wood":1,Bucky:2,"computer-operated":1,Eliminating:8,pleasures:4,Bucks:2,treads:20,Preferences:130,floutingly:6,Venezuelans:28,Nihon:2,"deals...":102,"double-wing":1,whipsawed:17,"senior-subordinated":1,ambassadors:4,"say-great":1,KAISER:2,honorably:6,"Civ.":2,Waikoloa:2,Canseco:2,delivre:39,Weisberg:2,Brokerage:47,"M.I.T.-trained":1,Unique:1,Cartoon:47,Sequent:2,Ednee:2,Mattis:2,pours:20,SUPREME:2,"up-scale":1,Mattie:2,Stupid:1,Beige:2,Mattia:2,Paganini:4,organic:1,crashed:85,"bioequivalence-therapeutic-equivalence":1,footnoted:17,loggerheads:4,"Renaissance-style":1,regaining:8,hence:6,footnotes:4,Regionally:6,"self-enclosed":1,Belfast:2,Lufkin:2,eleventh:1,Electrical:40,"J.G.":2,"two-wheel-drive":1,assailing:8,"end-of-year":1,unknown:3,Waving:8,"glide-bombed":16,misunderstood:54,Nibelungenlied:2,Lencioni:2,consoling:8,Mixtec:1,"well-organized":1,Intolerable:1,Denrees:2,bashed:32,colas:4,Quebecers:28,Ellison:2,"War-era":2,househld:1,Cozumel:2,creditors:4,Diego:40,"co-written":17,Keogh:2,teenagers:4,"thrift-rescue":3,"small-stock":22,delineated:17,gloomily:6,convenants:4,declasse:1,Howsam:2,"lightning-like":1,marginalizing:8,boastful:1,Dock:2,trespassing:21,Angrist:2,Johansen:2,misplacing:8,"law-based":1,Gorenstein:2,Moines:2,twittering:8,mavens:4,Dorsten:2,agglutinins:4,"Agnelli-related":1,"GM-Toyota":1,why:293,Lindsay:2,JPI:2,Huskins:2,ensues:20,oscillated:16,Actress:2,ensued:32,Everybody:47,Whose:306,balding:13,pleases:20,Shima:2,chapters:4,Klamath:2,Chemical:129,unwinding:21,convertibles:4,utter:240,pleased:81,"earthquake-proof":1,SUPERPOWERS:28,"post-modern":1,Gramercy:2,Dickson:2,Tanganika:2,he:307,widegrip:1,indignant:1,skimp:39,skims:20,"Clayton-Pedersen":2,Enright:2,GPA:2,"growth-and-income":1,Beaman:2,cubs:4,coordinating:55,Holman:2,Plastics:92,Ambushes:4,Spinning:8,paternalism:22,"Stalinist-corrupted":1,"union-busting":1,Halsey:2,editorialize:39,"half-million":1,"go-go":1,Ungava:2,Relocation:2,"bust-up":1,honorariums:4,multipart:1,Cartusciello:2,Bosses:4,confrontational:1,despoiled:17,endothermic:1,sparsely:6,penetrations:4,credentialized:1,monstrous:1,"candidate-picking":1,multifaceted:1,wetting:55,limit:44,defacing:8,Diagnoses:28,Gordin:2,horrifyingly:6,Democrat:11,Subway:11,Machiavellian:1,Donnelly:2,valiantly:6,april:2,Sustaining:8,Dealer:11,grounds:18,Expos:28,Kuhlman:2,Staffe:2,"Indianapolis-based":1,symphonies:4,Staffs:4,"Abd-al-Aziz":2,"advertising-backed":1,Sternberg:2,Postwar:6,decent:1,Campestre:2,responds:20,"short-circuited":32,lipsticks:4,Toronto:11,harshest:51,"talk-show":22,Westmin:2,Face:31,"boozed-out":1,McGruder:2,"Junk-holders":4,"follow-ups":4,"Sept.":129,"leaded-glass":1,"Not-held":1,stunning:1,"black-eyed":1,medicinal:3,Doraville:2,Knappertsbusch:2,unworkable:1,"lower-than-anticipated":1,draining:55,lonely:1,Marchand:2,lightweight:3,disinterred:17,Rimini:2,"over-price":39,Culver:2,maddening:13,temptingly:6,lyricists:4,burnouts:4,Doobie:2,disagree:149,Fungi:2,Quickening:8,overcrowded:7,recriminations:4,picayune:1,Rauschenberg:2,Loosli:2,"fur-and-leather":1,warming:308,Houston:40,Meaney:2,enamored:1,conquer:42,Ruppert:2,"re-incorporated":17,cameo:22,accosting:8,Balmain:2,"off-off":1,Strawbridge:2,Eshleman:2,Liebler:2,pythons:4,Burkhardt:2,Crumley:2,guts:4,"trade-ethnic":1,Quotron:11,Glasses:4,Pearson:2,provisions:4,Homeowners:113,term:44,"single-handed":1,Components:74,catchers:4,redesign:25,Gabe:2,Portago:2,"largest-selling":1,CAMBREX:2,Vila:2,KVA:2,"gilt-edged":1,perpetual:1,"housing-assistance":1,Treece:2,Frosted:2,Interfinance:2,overtures:4,feigned:7,hosts:18,"glass-fiber":1,"anti-cholesterol":1,exceed:42,smoothly:6,contemporaneous:1,Zukin:2,misadventures:4,Biblical:66,Wildbad:2,Himebaugh:2,Tussard:2,Korobytsin:2,Heartwise:2,"physician-executive":1,pasty:3,"across-the-board":34,Newall:2,Dollars:65,Ehman:2,Bingles:4,fords:4,Bingley:2,paste:25,"calcium-supplemented":1,Jurists:2,rare:1,carried:32,Dufresne:2,"goat-drawn":1,"then-Air":309,Carr:2,Kreutzer:2,"construction-oriented":1,outstripped:310,Cigna:2,Angelica:87,"half-heartedly":1,WTXF:2,polished:81,Gorton:2,gymnastic:1,"Gene-Spliced":1,Angelico:2,polishes:4,lawful:1,Penman:2,Honeybee:2,AWOC:2,Schuler:2,Feeding:2,Finance:11,crave:149,suburbs:4,Capetown:2,Transcaucasus:2,spiral:25,RAAF:2,captains:4,Hartigan:2,Execution:11,Leveraged:7,Greasy:1,automates:20,Davison:2,nourish:39,"Galophone-Prissy":2,indigents:4,DEFICIT:2,Witcher:2,defamed:54,"administration...":102,protesting:8,"FCB\\/Leber":2,Tawney:2,Britain:2,unasterisked:1,"Hi-Country":2,"CAE-Link":2,monastic:1,bewail:39,horrific:1,"Illinois-based":1,overhauled:54,maroon:1,Geometric:40,monopolists:4,Haskin:2,"multi-spired":1,overprotected:17,"hurricane-prone":1,Elsinore:2,coffees:4,Raful:2,kinds:4,Lionville:2,pumps:4,Karim:2,Karin:2,"Acme-Cleveland":2,"market-related":1,Siti:2,auxiliary:3,Surviving:116,adaptable:1,Bellas:2,Sitz:2,tulips:4,"pistol-whipped":16,impersonalized:1,Campuses:4,tormenting:8,Elevated:2,Sugar:11,plaudits:4,Thriving:1,Seekonk:2,Thrive:33,"third-biggest":1,"little-noted":1,Casey:2,fingernails:4,Cases:4,Winooski:2,Regionalism:2,illegally:6,shielding:21,IXL:2,Eiszner:2,TAINTS:20,"Super-NOW":2,Waikikians:28,antianemia:1,"Single-seeded":1,Tierno:2,tensile:1,disburden:39,"then-Minister":1,Whisper:2,debuting:8,parsympathetic:1,"B.A.":2,"world-oriented":1,Gressette:2,crisply:6,Hockey:2,Merlis:2,milled:1,SIZING:2,admire:42,"machine-masters":4,dangled:32,unlisted:7,Georgene:2,Verner:2,dangles:20,Arighi:2,negated:54,increasing:5,pictorially:6,Neville:2,Sioux:74,PROCTER:2,"russet-colored":1,Budget:11,Longer:12,Stuttgart:2,"eight-acre":1,Amtech:2,Foremost:150,Yuko:2,Yuki:2,borrowers:4,"fast-developing":1,Allenport:2,hollyhocks:4,NOC:2,"grade-school":1,"yet...":102,CONSERVATIVES:4,NOW:150,NOP:47,burrow:25,Cheered:17,Quincy:2,"previous-year":1,"high-current":1,Jennings:2,besets:20,explained:32,Hallingby:2,Savoyards:2,Irishmen:65,spoke:250,"re-emphasize":42,Scheherazade:2,overshadow:149,glimmering:8,Anticipated:14,"play-it-safe":1,Corning:116,heralded:54,Sassy:40,Brainards:28,Bioengineers:4,Brighton:2,segregationist:22,mired:14,successful:1,"greenhouse-effect":1,officio:64,hurt:311,naczelnik:64,Genossenschaftsbank:2,goddammit:106,straddle:39,Luna:2,vow:78,Lung:11,Gogol:2,"lower-wage":1,Lund:2,"better-paying":1,Mystery:47,unstuffy:39,droppable:1,household:22,Celso:2,Insulate:39,Reality:47,"Smith-Colmer":2,reprove:39,rescue:25,preferably:6,Eagle:2,"Wheaties-box":1,complaining:8,Atop:127,damage:24,Killing:268,Jussel:2,preferable:1,Caldor:2,Alcatel:2,swing:205,"anti-flag-burning":1,Matlock:2,calves:4,wins:72,attracts:20,Tiant:2,signatories:4,wink:25,Haskell:2,keeps:72,Manitoba:2,PNC:2,Petruchka:2,wing:78,wind:24,"heavily-upholstered":1,Lohmans:2,Requirements:4,"money-retirees":4,"ARAL-88":2,"C.B.":2,"west-central":1,handcuff:33,"lower-cost":200,affect:95,soothingly:6,Kearns:2,rankings:4,"un-Swiss":1,Kearny:2,narrowest:51,Harris:2,Prohibited:2,endeavoring:8,Shattuck:2,woods:4,universalistic:1,Christiansen:2,"exploding-wire":1,commemorate:42,captioned:16,MRI:2,Robbery:2,Cards:312,Robbers:4,MRA:2,MRC:2,represents:20,"China-bound":1,Hilkert:2,"chamber-music":1,queues:4,dumps:72,clothed:17,Branford:2,Bonnier:2,Hoogli:2,Mouse:11,queued:1,preceded:32,typifies:20,financial:1,Dortmund:2,bowls:18,"mule-drawn":1,precedes:20,Grauman:2,urbane:1,Stillwater:2,Tarheelia:2,Hellisen:2,Awkwardly:6,rented:81,Colorcoat:2,Swasey:2,Systematically:6,"last-gasp":1,Karre:2,fugitive:3,sensory:1,assures:20,Nutmeg:2,Singletary:2,sensors:4,Poltrack:2,Raphael:2,Hord:2,"tsunami-warning":1,Hori:2,typified:54,Dubilier:2,obsolescent:1,Horn:11,waddles:20,Human:129,clothes:4,Please:313,shopped:54,Turpin:2,Canion:2,outstandingly:6,Skyway:2,dogmas:19,postulate:39,legs:4,persecute:33,"oil-patch":3,Atmospheric:2,collapse:25,fibrous:1,snooty:1,"Precious-metals":152,Named:17,Outrunning:8,Bertoia:2,Chernobyl:2,Plummer:2,PHOENIX:2,endure:42,"warm-toned":1,bodyguards:4,recheck:33,Computerworld:2,Varvara:2,groaning:8,PLC:2,Keeping:229,"demand-related":1,Fraud:11,Gursel:2,overregulated:7,Haussmann:2,rechartering:8,Crotale:1,Bans:2,responsible:1,Northlich:2,Tastes:65,condensers:4,metallic:1,Bane:11,Band:11,Bang:2,causing:55,defiantly:6,Banc:2,alai:64,Bani:2,Bank:128,"Marrow-Tech":2,"Anglo\\/Dutch":2,Emboldened:7,gloaters:4,looming:55,"deficit-inflation-capital-flight":1,"well-fortified":1,Logic:11,retaining:8,conclaves:4,antitrust:3,Kingston:2,detectors:4,"rerun-sales":4,alas:106,braying:1,"suspicions...":102,Ashmolean:2,bomb:25,"pro-enterprise":1,Sawallisch:2,advisors:4,parolees:4,Cinalli:2,undefined:1,regiments:4,gauge:25,"five-week":1,Meyner:2,capes:4,"rock-hard":1,copy:24,"crisis-management":3,"adoption-assistance":1,buxom:1,"breath-taking":3,Beulah:2,Evry:2,mend:39,telegrams:18,Belated:1,"quasi-religious":1,"bank-branch":1,lenders:4,Pointing:8,requalify:39,"slow-scrambling":1,IQ:2,lurched:16,Purified:17,Nett:2,Clearly:150,"two-mile":1,traverse:39,leasing:308,conservatories:4,Tenney:2,Velveeta:2,Liebowitz:2,"natural-gas":22,nocturnal:1,best:314,stealthy:1,killable:1,planoconcave:1,Courts:41,conceptual:1,Cage:2,"boom-boxes":4,"donut-sales":1,claws:4,screwball:3,felons:4,aesthetic:3,"non-daily":1,Mechanix:2,"two-sevenths":4,Trohan:2,drew:16,"wrap-around":1,Malabar:2,Stiemerling:2,violators:4,PSA:2,adventures:4,PSE:2,Demented:1,estates:4,"PS\\":254,quests:4,adapted:54,polycrystalline:1,irresponsible:3,"higher-rate":1,Sawicki:2,SAFEWAY:2,irresponsibly:6,linguistically:6,Weyerhauser:2,"non-professionals":4,"eased...":102,Skyros:2,corrugations:4,"anti-psychotic":1,"D.,Calif":2,breakoff:1,"risk-capital":1,quadripartite:1,tutorials:4,Luneburg:2,incompetent:1,life:163,"Board-traded":1,hospitalized:14,"cash-equivalent":1,Poland:2,Fergus:2,"similar-sounding":1,Concrete:40,lift:182,regaled:32,Investigating:8,chili:19,"self-destructed":16,"modern-day":1,chill:70,unsold:1,adaptations:4,sanctorum:64,Kippur:2,"never-predictable":1,picturing:55,Potsdam:2,"Y-cells":4,Slyke:2,actuated:17,electromagnets:4,"Sure-sure":1,schoolbooks:4,Grafin:2,Grafil:2,buckles:4,Lehtinen:2,accouterments:4,Doronfeld:2,impaling:8,Barataria:2,swarthy:1,babies:4,nonphysical:1,Appleby:2,Taper:2,Ranieri:2,wholewheat:1,Biggio:2,Taped:17,Peking:2,stiffs:4,pioneers:4,wives:4,"J.J.":2,RJR:2,stupendous:1,ventricles:4,"hair-growing":1,subpoena:315,spearheading:8,juridical:1,misrepresents:20,fittest:51,halfhearted:1,adagios:4,"British-American":40,Buxtehude:2,"high-rated":1,forsaken:17,forsakes:20,"life-saving":1,deductable:1,ungovernable:1,"agricultural-research":1,Geertz:2,"HUD-related":1,"ground-floor":1,irradiated:14,Ligne:2,Halebian:2,Waltham:2,thickening:8,Framework:2,collections:4,delinquents:4,Marrill:2,contribued:16,"self-inflicted":1,ON:223,Aeneid:2,Oceana:2,massively:6,Taksim:2,Braving:8,articulated:17,tapering:8,Ingeniera:2,"de-listed":17,Behind:316,abscesses:4,DEALERS:28,people:91,Pharmacy:2,Tropical:2,Toensing:2,warring:8,aspen:22,Shirer:2,gasps:4,Quarry:2,hulks:4,Baum:2,Prolusion:2,Withdrawals:4,impulsively:6,consummately:6,serpents:4,"a-raising":8,germinate:33,Keith:2,Royce:2,pinched:45,INFORMATION:11,Naess:2,Didi:2,Hauling:8,Thing:11,Practices:41,shifting:5,pinches:4,Think:317,insinuations:4,Snatching:8,derailed:32,Celanese:2,rebuffed:54,Ichi:2,Bronson:2,despair:25,repellent:3,spins:20,Shake:39,sarakin:64,Strength:47,Summers:2,dashboards:4,Occasional:66,Misses:28,"fixed-price":1,Hirschman:2,reducing:55,Repligen:2,ownerships:4,Ali:2,Paestum:2,Wichita:2,"common-law":3,Amaury:2,Ogura:2,happy:1,alloys:4,grokking:8,Completing:8,Dentistry:2,conclusively:6,Dabney:2,gripes:18,Boole:2,materals:4,mirthless:1,Reductions:4,antiCommunist:1,pest:318,pontificate:39,panels:4,"five-inch":1,Mancuso:11,juvenile:3,liberal:3,Variety:2,Dixiecrats:4,Zuercher:2,Raimondo:2,exist:319,obligations:4,accounting:27,provisons:4,supporters:4,dotted:45,Gherlein:2,ROBERT:2,Beismortier:2,Hennessy:2,Nolan:2,"deep-seated":1,dissimiliar:1,Ceramics:28,disastrously:6,Shuwa:2,Reinforcing:8,invested:320,Barberini:2,"anti-white":1,Carpathians:28,Jutish:1,Stirring:8,spades:4,deformational:1,sniffed:16,Ellsworth:2,Aureliano:2,DevelopMate:2,goaded:32,McKid:2,Steinhart:2,fares:170,Indians:111,Glauber:2,"anti-airline-takeover":1,Indiana:2,Falkland:2,Plump:1,cupped:187,rousing:3,Truckers:4,indolent:1,behave:42,Lighting:321,veterans:4,Hnilica:2,"single-employer":3,prepaid:322,Scranton:2,refinance:39,SunAmerica:2,mourn:39,servicing:21,Seko:2,"sun-browned":1,Experimental:1,"fire-resistant":1,wondrously:6,Dugan:2,"short-range":1,solves:20,Northeastern:66,"corporate-identity":1,Intelogic:2,Aeromexico:2,solved:54,Quigley:2,Cantonese:40,Subsidizing:8,Tables:4,officiate:39,Marmi:2,steaks:4,"Bldg.":2,Hingham:2,erotic:1,"anti-androgen":1,Dellums:2,Tricia:2,"Brumidi-Costaggini":2,current:3,extraterrestrial:1,Crowell:2,"all-powerful":1,Cays:2,drewe:16,"tough-looking":1,Machold:2,UNION:47,Caetani:2,Decca:11,Eighties:2,Nynex:2,Godwin:2,"government-relations":4,Baton:2,studied:45,tassels:4,Exegete:2,therein:6,Miglia:2,studies:18,bearable:1,carpets:4,indiscriminantly:6,SOYBEANS:57,Rogin:2,"properties.``":133,Alberto:2,Alberta:2,monaural:1,grimmest:51,fresher:12,Emanuele:2,Abello:2,predictions:4,"public-land":1,Pontius:2,corners:4,Kafkaesque:1,"One-Leg":2,Califon:2,cranked:32,afford:42,apparent:3,"MD-90s":4,wrenches:18,easiest:51,Oum:2,"COS.":2,overloaded:14,"cooked-over":1,believes:20,"God-curst":1,Appliances:28,believed:32,scenics:4,"Worth-based":1,"O.N.":2,Sepulveda:2,Inward:2,teaspoons:4,wrenched:32,Bandaging:2,Officine:2,intransigent:1,hides:18,fiche:64,philological:1,agendas:4,uncles:4,deserves:20,Vyacheslav:2,Holmberg:2,Newlywed:2,belongs:20,snaps:20,Aeroquip:2,blasting:30,"transportation-cost":1,rehabilitate:39,Managua:2,date:24,Become:39,data:323,Shandong:2,Yoshihashi:2,sectors:4,"interest-sensitive":1,aseptically:6,yielding:5,Catching:8,definitions:4,scents:4,wavelengths:4,"debt-coverage":1,unfavorably:6,haute:145,unacceptable:1,Leaguers:74,bibulous:1,unacceptably:6,ungentlemanly:1,unfavorable:1,stills:4,Clemson:2,Shaw:2,solitary:3,Karalis:2,Zolo:2,lackluster:34,bagels:4,Unlimited:40,covertly:6,creations:4,orchestrating:8,Rafeedie:2,Persky:2,decades:4,into:324,Amin:2,stabilizers:4,"three-family":1,matches:72,Socialist:129,"Sherwin-Williams":2,Langer:2,records:18,Socialism:47,"six-week":1,arriving:8,"in-laws":4,"non-brain":1,runners:4,matched:81,Newest:51,revert:42,McCrory:2,bowling:21,"target-hunting":1,manors:4,"sex-manuals":4,"Richmond-area":1,ALCOHOL:2,whosoever:79,Snyder:2,bovine:3,"low-wage":1,Calderone:2,Habicht:2,Ferraros:28,revises:20,Shah:2,giddy:1,Eire:11,workaholic:22,"top-performing":1,unreleasable:1,Hollis:2,sibilant:3,suggesting:8,bordering:8,flurries:4,clustering:55,joiners:4,Braille:2,"KOFY-FM":2,intensely:6,"Aye-yah-ah-ah":106,toned:17,Bruyette:2,Monet:2,Monex:2,Money:11,thunderclaps:4,Jeffry:2,livable:1,"Euro-pillows":4,Hovarter:2,Monel:2,Sanford:2,Tailback:2,"now-purged":1,Blanco:2,Conradie:2,"hair-raising":1,nested:54,vote:44,Blancs:2,intermolecular:1,Benington:2,"merger-related":1,phonetics:4,"Franco-German":2,Garza:2,Spagna:64,Uses:4,"six-lane":1,Homestake:2,Petruzzi:2,dealmakers:4,Grandson:2,"white-stucco":1,Aircoa:2,Haskayne:2,padding:21,redoubled:54,"Northwest-Skinner":2,Sept:2,"High-priced":1,Embarrassed:1,encrypting:8,exacted:16,Titan:2,"non-members":4,Emmerich:2,Alejandro:2,future:22,"Trump-watchers":4,opens:20,Holynskyj:2,cavalier:1,financings:4,tasted:32,"round-faced":1,tastes:18,Inquiry:2,lurking:8,dragooned:16,"hand-carved":1,serials:4,sanctimonious:1,LeRoy:2,undercover:1,Aspin:2,take:182,vandals:4,convulsive:1,"long-life":1,altered:81,Galant:2,Katutura:2,candidly:6,Kerr:2,transpirating:8,Kern:2,Rogaine:2,Radames:2,Belin:2,Settled:17,Portuguese:66,"French-government-owned":1,occidental:1,Mame:2,"AK-47":2,Swingin:2,Strip:59,affirmed:32,Hereby:6,surplus:22,Kurland:2,mince:39,"Hamilton-Dorgan":2,realists:4,unkind:1,"ready-to-eat":1,robs:20,"Greek-Canadian":1,Fraga:2,ALLOWED:16,clawing:8,charmed:54,"sweet-smelling":1,morphological:1,Lexington:11,countered:32,cursing:55,Kiowa:2,Farmingdale:2,Products:41,"Ta-Hu-Wa-Hu-Wai":2,Sikhs:28,"literal-minded":1,Givers:2,assimilate:39,Madsen:2,neutralist:3,nociceptive:1,liable:1,Kassem:2,disparage:39,surgeries:4,raged:32,dived:32,Specifically:6,BOARD:2,Goldwag:2,Ravencroft:2,Tirello:2,rages:72,gastrointestinal:1,Zafris:2,Librium:2,Vandenberg:2,Audiovisual:2,"discount-rate":1,Mather:2,Determining:8,affecting:8,Primakov:2,Keeling:2,Bible:129,Velon:2,HLTs:4,rapacious:1,jovial:1,jaunts:4,demonetized:17,Hodgkin:2,"second-worst":1,"shit-sick":1,Citation:2,Worms:111,Glynis:2,loudly:6,Cornelius:2,Mollie:2,Liber:2,ants:4,stereophonic:1,anti:325,Libel:2,ante:315,"human-sounding":1,"thick-skulled":1,"contingent-fee":1,combines:72,booms:18,breath:25,combined:81,lowincome:1,Signor:2,"Plus-one":1,squinted:32,Distressed:1,influence:44,Torrence:2,sturdily:6,Rotary:2,Agatha:2,rematches:4,globally:6,Honshu:2,Wedd:2,disbelieve:39,"vote-getters":4,COMMUNICATIONS:111,Doctrine:11,curricula:4,malevolencies:4,Jolt:59,brok:16,"M.D":2,Ilyushins:28,"three-second":1,shuts:72,"funds-service":1,spiraling:30,Trettien:2,expediently:6,"Rodney-Honor":2,unemployed:1,cramming:8,"two-year-old":3,unmanageably:6,cheere:33,glycerolized:17,"State-owned":1,Anchorage:2,carillons:4,cheers:18,Birtcher:2,Diagnostics:28,unmanageable:1,cheery:1,Kirschbaum:2,Silkworms:2,escorts:72,coste:39,Slay:33,flocks:4,"sharp-rising":1,Simultaneous:1,engulfing:30,bravura:22,trains:18,Soule:2,Botswana:2,Mexicana:2,barbecues:4,McGlothlin:2,mediumistic:1,DISCOUNT:326,Mexicans:65,Daniel:2,Hurrays:2,"non-binding":1,McGillivray:2,Bygdeman:2,barbecued:17,"Pepper\\/Seven":2,blondes:4,Mullen:2,Zack:2,Zach:2,Phineoppus:2,hereabouts:6,Stirlen:2,formative:3,lengthens:20,Transgenics:2,Muller:2,Hitchcock:2,Mona:2,unquiet:1,Korra:2,Monk:2,Drake:2,"Mis-ter":2,Mont:2,Wellman:2,Mony:2,clam:78,clad:14,overhyped:1,Rabinowiczes:28,yearly:97,Muammar:2,Tasuku:2,"full-scale":1,Cervetto:2,Ostrager:2,winds:18,Brandon:2,"all-pervading":1,endeavor:25,Cecchini:2,Piranesi:2,riveting:30,Timidly:6,Bleckner:2,oblige:63,Projects:41,"state-provided":1,unsuccessfully:6,philosophizing:55,contingent:3,confided:32,relented:32,Testifying:8,Awareness:47,Proteins:28,sprung:17,confides:20,ratios:4,Curzio:2,Chardonnays:28,joyfully:6,counterbids:4,fightin:8,"evil-minded":1,act:24,Timber:47,Macchiarola:2,curling:21,Litz:2,Advancement:2,"home-furnishings":4,Eppelmann:2,Hansen:2,parties:18,Lite:2,somnolent:1,Pakistani:66,Lita:2,Gilhooley:2,"blood-bought":1,"V.E.":2,yeasts:4,Equimark:2,bobbing:8,recommends:20,BORLAND:2,TeleVideo:2,Yanes:2,fastidious:1,McFeeley:2,cloned:17,Francais:2,Teniente:2,Guido:2,DRAM:2,"Detroit-over-San":1,wickets:4,Guide:11,buying:327,Wrigley:2,confessions:4,"sales-building":1,Won:2,severally:6,Close:328,agree:42,detailed:81,gone:329,carves:20,dovish:1,Quietism:2,ag:22,Seigner:2,ah:330,am:331,Amiel:2,Deatherage:2,Nacional:2,as:332,Becca:2,au:147,at:333,Quietist:2,carven:17,"Serve-Air":2,"self-referential":1,prosceniums:4,Salamander:2,Machos:64,Simpsons:28,Machon:2,gunboats:4,Birenbaum:2,spatial:1,jell:39,contemporaries:4,bizarrely:6,IBRD:2,unrefrigerated:1,fluorinated:17,annex:25,Maier:2,slant:25,herbs:4,middling:1,Pekin:2,PROFITT:2,Sabol:2,Explanations:4,PROFITS:4,"Retin-A":2,Vicar:2,"police-community":1,Absorbing:8,Twiggy:2,mimic:42,cps:4,Vical:2,overeager:1,Canada:2,externally:6,instincts:4,asteroids:4,"ex-Beecham":1,Currier:2,Amdahl:2,"sugar-using":1,revolting:1,Mateyo:2,Wickhams:2,caveats:4,disciples:4,pornographic:1,"Early-morning":1,champions:18,piddling:1,"co-signed":1,dressing:27,Precious:294,"well-cut":1,splashing:8,"state-produced":1,compromising:30,gemlike:1,fullbacking:8,Severence:2,"purpose...":102,Kweisi:2,manageable:1,"price-moving":1,Cockburn:2,"`":133,Noam:2,Noah:2,accompanying:30,DELAYED:17,underclothes:4,scrapping:55,Darrell:2,"program-driven":1,"Chiat\\":40,Powless:2,humongous:1,antibiotic:22,pretenses:4,"two-class":1,Nordmann:2,"fill-ins":4,"nation-state":22,Dilly:2,Arlin:2,Immaculate:2,"one-drug":1,poisonous:1,Safari:2,"non-medical":1,avenues:4,celluloses:4,Bureaus:74,installations:4,Deminex:2,"re-examines":20,pidgin:22,DALIS:28,"Fireside\\/Simon":2,dreamlessly:6,"non-performing":1,squashy:1,Planet:11,"ultra-safe":1,Westendorf:2,"L-1011":2,Zurich:11,Totaling:8,Litowski:2,interconnected:17,"Richardson-Smith":2,"cap-and-ball":1,gunfights:4,brimmed:32,Lytton:2,Astarte:2,Auf:2,filial:1,"Sleepy-eyed":1,Aul:2,Cotty:2,conspiratorial:1,"Pouilly-Fuisse":2,"worry-free":1,"intermediate-range":1,unbleached:1,Elements:57,Optimists:4,Peat:2,"mothers-in-law":4,AMDAHL:2,Peal:2,Peak:40,Scratchard:2,Meaningful:1,Financing:321,Canoga:2,contrive:39,Philippines:74,Humble:2,spoils:4,LaFalce:2,Slick:1,expansively:6,delphic:1,evolves:20,Carltons:28,chisel:25,Coney:2,indicating:8,evolved:81,Compelled:17,beautiful:1,Denton:2,impacts:4,stated:81,rustled:14,dislikes:334,moon:25,accept:42,Laban:2,Venezuelan:66,elaborately:6,McCulley:2,"faster-spending":1,equities:4,Fulham:2,earnings:91,cling:149,telegraphic:1,Hanover:2,BancOklahoma:2,Bracken:2,Ditka:2,Maxentius:2,"re-evaluating":13,haggardly:6,Yastrow:2,unhesitant:1,"Authority-Garden":2,MANUFACTURERS:28,hauling:55,Beowulf:2,chemistries:4,"pre-historic":1,pans:18,veridical:1,Nana:2,MICRO:2,Scofield:2,Seasonings:28,Nkrumah:2,Alter:216,Abbie:2,Seifert:2,Llewellyn:2,debilitated:14,deeds:18,"MD11":2,rigids:4,VandenBerg:2,consign:39,iridescent:1,Experimentally:6,Gerhard:2,Creative:40,Partnerships:4,Alcibiades:2,"be-thonged":1,judgeships:4,"real-estate":22,Menet:2,Newton:2,truths:4,impugning:8,Pole:11,Thanks:75,Pola:2,Polo:2,Poll:11,Polk:2,"fee-related":1,Menem:2,transforming:8,bends:18,catalogues:4,Dactyls:28,Balenciaga:2,exorbitant:1,Setting:8,fewer:299,Peoples:41,"Mon-Fay":2,catalogued:54,takeing:8,BMC:2,BMA:2,BMI:2,mattered:32,"pea-green":1,BMP:47,BMW:2,BMT:2,Railroad:11,Beckstrom:2,Folding:8,"free-spending":1,drifting:5,disheveled:1,Burgundies:28,pitfalls:4,proxy:22,imagine:42,Nonprofit:1,Hispanic:66,uplands:4,positioning:55,Allotments:4,bookies:4,Spanos:2,conductors:4,Doran:2,redeemded:17,Tabacs:2,waspishly:6,corrugated:7,vowel:22,protectionist:3,thereafter:6,"Services\\/Japan":2,Kinnett:2,Kagan:2,SMALL:40,Treiger:2,Isham:2,"intervention...":102,unexplained:1,tadpoles:4,Courier:2,Hualien:2,erupted:32,Mathavious:2,crisscrossed:54,sympathies:4,Doubts:4,"soft-drinks":4,immediate:1,"credit-market":1,consult:39,focusing:55,unprofitable:1,Equator:11,"Jean-Pascal":2,"computer-guided":1,Inhouse:1,drawled:16,PegaSys:2,Migs:4,lovelorn:1,"less-influential":1,revelling:8,"carrier-current":1,Sanjiv:2,refrigerators:4,fights:18,"well-developed":1,Donnay:2,Adverse:1,Donnan:2,Loevner:2,"more-senior":335,honeybees:4,Kyoto:2,Makwah:2,equaled:32,"chest-back-lat-shoulder":1,MacKinnon:2,fellers:4,"civil-investigative":1,effecting:8,"benefit-plan":1,"Prentice-Hall":2,"high-rate":1,funnier:12,Tanzi:2,Lysol:2,tokens:4,unequal:1,Tomsho:2,covet:42,cover:182,coves:4,"low-stress":1,Fauntroy:2,Physicochemical:1,Swirsky:2,Singing:229,"fiscal-fourth":1,"notebook-size":1,Burnsville:2,Gridley:2,aghast:1,"Mail-Order":1,"well-endowed":1,"Soviet-American":1,Melloan:2,Hajime:2,"AIDS-like":1,SCUD:2,condos:4,undying:1,Istvan:2,Tagamet:2,Lodestar:2,"T.B.":2,alloted:17,Broomfield:2,Oddy:2,Masters:46,magicians:4,Stouffer:2,gratis:97,"Point-Pepperell":2,Odds:57,eies:4,"Dana-Farber":2,Heikes:2,Yaaba:2,Pereira:2,Minutes:41,dustin:8,Tator:2,tumors:4,demeanors:4,"low-fat":1,obscure:82,sew:42,dryin:8,overwhelm:42,Fox:2,Foy:2,sex:25,Foe:2,see:336,unsheltered:1,sea:44,Stedt:2,Umm:106,Westbound:2,Calabria:2,vitamins:4,"Yale-New":2,unmarketable:1,topmost:1,avuncular:1,Belinda:11,Ungaretti:2,Rebounding:8,Pocketing:8,"ego-adaptive":1,embargoes:4,Dmitri:2,redesigning:8,Serves:20,hooted:32,shortlived:1,Served:17,pagan:1,embargoed:103,Kaskaskia:2,Nortek:2,RETIREMENT:2,Goldscheider:2,"fifty-year":1,repainted:14,scams:4,Halloran:2,"long-term":337,Nortex:2,volcanic:1,Spectator:2,drunk:338,underwent:16,Ephlin:2,USGA:2,hollow:3,agents:4,BREWERS:4,creeds:4,underlay:33,runups:4,worthless:1,vehemently:6,numinous:1,APPLE:2,Trail:59,"A321s":4,scions:4,McBride:2,flounced:17,"self-deceived":1,"semi-public":1,Burwell:2,Waseda:2,repayments:4,"then-21":1,fund:24,McRoberts:2,Ninja:2,womanizing:8,insiders:4,towns:4,ligands:4,"Standard-issue":1,tweaked:16,Dallara:2,judicial:1,Duplicating:8,Fighters:2,redounds:20,Measure:269,"front-loaded":1,Keschl:2,owed:54,Hubermann:2,Hartzog:2,owes:20,mediating:8,Ayres:2,"volume-based":1,"two-color":1,Morelli:2,voraciously:6,Jocelyn:2,doan:33,levels:18,"dollar-and-cents":1,Raleigh:2,Expands:20,oddest:51,Cameo:2,Camel:2,Woodbridge:2,upland:97,Rate:11,regulating:55,Nastro:2,Uxbridge:2,Resourceful:1,Rath:2,Segal:2,"red-haired":1,hypothesized:17,militiamen:4,Alabamans:4,rumbling:8,LAYOFFS:4,Segar:2,contradicting:8,Rahway:2,VCOR:2,Varian:2,ellipsoids:4,"DM850-a-month":1,billable:1,Fukuoka:2,Shartzer:2,victims:4,Frenchwoman:2,Merhige:2,instructors:4,Vermejo:2,Duffus:2,contraptions:4,Aransas:2,"criminal-defense":3,amicably:6,Dams:4,Damp:1,DES:11,Yamatake:2,Damn:83,sight:25,nostrums:4,DEA:2,DEC:2,amicable:1,Dame:2,wrongful:1,Balcerowicz:2,"Viewmaster-Ideal":2,stamens:4,stables:4,"sheet-fed":1,stabled:16,"cop-killer":1,durables:4,"EPO-treated":1,tankers:4,"two-for-one":1,Riviera:2,Soll:2,"U.S.-SOVIET":1,vitals:4,"non-tariff":1,scarify:39,Fulgoni:2,"global-market":1,Shawano:2,ambush:25,computational:1,Hatless:1,Bensten:2,Young:129,ACS:2,adverbs:4,Skillman:2,Riger:2,ACT:2,burdens:18,next:339,CoGen:2,criticisms:4,"straight-line":1,bargaining:122,assuring:8,textual:1,occupy:42,"often-disparaged":1,"pixie-like":1,BONO:64,rhetorical:1,DowBrands:2,excavating:8,impudent:1,Klimpl:2,Mlle:2,Trafton:2,vowing:8,numismatic:1,"High-yielding":1,"cortico-hypothalamic":1,Bandish:2,nieces:4,redeemed:54,Indoor:1,Ohlman:2,Erdos:2,mature:340,Gobbee:2,WALL:2,Disposal:11,Jolla:2,Parks:46,"Gutfreund-Postel":2,Mishelevka:2,Frothy:1,Memory:47,Parke:2,wove:16,Chesshire:2,"bad-cop":1,Sundstrand:2,"Brush-off":47,Dividends:4,leftward:1,overshoots:20,actors:4,Monchecourt:2,pockmarked:7,"rumor-fraught":1,sided:32,faintly:6,Gorilla:2,Onan:2,Railway:2,Biscuits:74,sides:4,worsened:32,unionized:103,"one-set":1,"TR.":2,Ritter:2,summit:22,"Exchange-rate":1,Krauts:4,CPI:2,pooched:16,Taxonomists:4,CPA:2,Tweed:2,CPC:2,results:18,"June-to-September":2,dedicates:20,Nonconformists:4,CPR:2,QVC:2,ORDERS:20,inferences:4,Taraday:2,renunciations:4,Milhaud:2,"court-supervised":1,send:42,outlooks:4,Bharati:2,Candide:2,sent:32,pestering:8,recitals:4,Sanctions:57,Goldstein:2,languished:54,Following:55,languishes:20,"seven-member":1,categories:4,Kimball:2,"travel-services":4,Related:71,Talking:8,bemoans:20,Seattle:11,"thirty-foot":1,Lynford:2,burrowed:16,agrarian:3,Redbirds:2,buckskins:4,Newbery:2,Newberg:2,"re-enactments":91,Reinhardt:2,shivery:1,Jessica:2,firma:147,Alai:2,Giddings:2,analogously:6,Alan:2,Alar:47,Alas:341,firms:18,Diario:2,Barbudos:28,"Newton-John":2,panelists:4,jammies:4,Lammermoor:2,identifications:4,Tremdine:2,aerodynamic:1,Streak:2,engage:42,Stream:2,Energy:11,"Ala.":2,"McCarthy-era":1,"bank-affiliated":1,Militia:4,Religious:66,Dohnanyi:2,debts:4,Decay:2,Alleged:1,distrusted:54,Industrielle:2,moonlighting:21,"F-14":47,"F-15":11,trivialize:39,"F.E.L.":2,cheered:32,Ha:183,Outright:1,whipping:5,painstakingly:6,ministers:4,"cash-or-shares":1,Oppenheim:2,muffed:32,Telmex:2,Delawareans:28,Kaisers:28,Biny:2,crisscrossing:8,Bricktop:2,monophonic:1,Gumi:2,"one-megabit":1,Hosting:8,Cimabue:2,Gums:4,Gump:2,Sucre:2,sharply:6,promotional:1,"cross-margining":3,Christoph:2,insists:20,instinctual:1,Subtle:1,"hare-brained":1,campsites:4,"million-member-Teamsters":28,wed:342,Shrieves:2,Sherrie:2,beckoned:32,Several:66,trumpet:78,Shoupe:2,Osler:2,"nuts-and-bolts":1,hydrophilic:1,Crocodile:2,Bolling:2,Ransy:2,"expansion-minded":1,Ittleson:2,Tigershark:2,Railcar:2,stand:182,ACQUISITIONS:4,blocks:18,Flax:2,Poitrine:2,blocky:1,Garcia:2,demonstrating:8,Ingrid:2,lagoons:4,"near-total":1,efficiently:6,Welmers:4,selectors:4,"critical-intellectual":1,intellectuals:4,Leisire:2,"Buhrmann-Tetterode":2,Kaiser:2,unpalatable:1,"N.C.-based":1,Brenna:2,Octobrists:28,operative:3,easements:4,recreating:8,excretory:1,Shroeder:2,hypothesize:39,Southeastern:40,shudder:42,spoiling:8,Bazaar:2,burping:8,crucial:1,Excluding:229,Reichenberg:2,Manzanola:2,triphosphorous:1,Wynston:2,"A&M":11,Katz:2,"rail-equipment":1,installment:22,gallstones:4,"A&E":2,Sporting:11,merge:182,Informix:2,Kato:2,accounts:18,"A&W":2,"A&P":11,Kate:11,veracious:1,Lumpur:2,kisha:64,BUSINESS:47,Treasure:11,Mills:46,Millo:2,"Most-Favored":51,intangible:3,Dispatch:2,Treasury:11,repainting:21,Mille:2,WOLFSON:2,Lynes:2,wander:42,"Least-cost":1,Agreement:11,HIAA:2,exults:20,Contractors:57,Bakkers:28,interactions:4,Grove:11,yawns:4,"opinion-makers":4,Albanese:2,Herwick:2,BICC:2,Freddy:2,loomed:32,Cuellar:2,eyeballing:8,monographs:4,Aided:17,Bachman:2,shuld:190,congressonal:1,mesmerized:17,followings:4,"low-calorie":1,Aides:4,Caper:2,Wheeler:2,transmitters:4,Capet:2,pines:4,Review:11,owned:45,straining:8,Capek:2,Sovtransavto:2,Pampers:111,Capel:2,Naturally:6,legislative:1,"Solidarity-led":1,STOCKS:4,"Y-MP\\/832":2,"foreign-based":1,upstate:97,"tulip-shaped":1,"state-controlled":1,acknowleged:16,Bahrenburg:2,painful:1,twinjets:4,Levin:2,midlevel:1,applauds:20,BRANDS:28,Meanwile:6,marquees:4,delimits:20,steel:22,buttocks:4,"boot-wearer":1,haystacks:4,restaffed:16,malpractice:25,punctured:7,Paschall:2,"Re-enactments":4,steep:3,steer:182,Jolivet:2,seaborne:1,Results:123,PLODDERS:4,"chromium-plated":1,"Mercedes-Benz":2,devotions:4,Zorn:2,Haferkamp:2,blockbuster:22,Balag:2,clearly:6,Remember:39,Claws:4,documents:18,soak:39,vented:32,probly:6,decomposing:8,"Dare-Base":2,regard:44,snuff:63,BEWARE:39,"safety-first":1,sophomoric:1,Hurricanes:28,HOLD:39,Patents:2,RCSB:2,thirdquarter:3,Expedition:2,reignite:63,endrocrine:1,Pancho:2,montgolfiere:64,Marquess:2,Sophias:2,EXE:2,Evidences:4,dissociate:39,understate:33,EXP:2,Wolzein:2,Removal:11,ELP:2,jostling:8,illumine:39,championed:54,emancipate:39,Serif:2,planted:81,matronly:1,Bergsten:2,maggots:4,Saltiel:2,maggoty:1,Keswick:2,pogroms:4,Sumita:2,Owners:123,internationals:4,intellectually:6,Ekman:2,"flower-scented":1,fronds:4,Fashions:28,River:11,multiyear:1,"quarter-mile":22,dishearten:39,Lydall:2,Brahmin:2,nise:1,streamlined:103,DeGol:2,Anniston:2,incurably:6,Wilshire:2,Histrionix:2,creationist:1,catastrophic:1,"Pre-attack":1,corrals:4,bidders:4,incurable:1,Nonunion:2,Hannes:2,partisan:3,"Euro-Belge":2,"Two-part":1,"Jean-Pierre":2,"Jones-Irwin":2,classless:1,faceless:1,Forum:2,WFRR:2,Amdura:2,"bright-eyed":1,Admistration:2,drum:63,"Ter-Arutunian":2,unflinching:1,sevenday:1,Ethiopian:1,sugared:7,Anlage:2,irruptions:4,Vaughan:2,Guinea:2,ca:190,skylights:4,"missile-guidance":1,nonstops:4,pounced:16,rapidement:64,allocated:54,equips:20,Get:188,dazzling:13,anhydrously:6,Chennault:2,Gee:125,QUANTUM:2,hottest:51,"break-even":104,Marous:2,Gem:2,Gel:2,"Mid-sized":1,stalled:81,Enthusiastic:1,Cytogen:2,geysering:8,Continentals:4,grinning:30,Pulling:8,Fatman:2,Hickok:2,rigged:45,maul:39,Eros:2,rethought:1,Burnsides:28,delaying:343,lush:1,"L.R.":2,"five-cylinder":1,Crestmont:2,Rajter:2,waspish:1,maligned:17,concealing:8,Pettee:2,highlighted:54,Raoul:111,Geothermal:2,"five-pound":1,glares:20,Wertheimer:2,inlaid:17,balk:42,"Canadian-fisheries":4,Jase:2,forecasts:18,heaped:54,robotic:1,Hires:2,overalls:4,whyfores:4,Julio:2,Oklahoman:2,Julie:2,Julia:2,Sontag:2,clambering:8,Thutmose:2,"Ito-Yokado":2,Sahour:2,Marcia:2,moments:4,glut:25,LABOR:11,glum:3,Drobny:2,Flynn:2,Bahrain:11,Ankara:2,Unbelievable:1,Works:130,Ketchikan:2,politique:64,"fifth-straight":1,coattails:4,Levesque:2,Osterreichische:2,Zoeller:2,unrecoverable:1,fluctuating:8,Unfortunately:6,taunt:25,famously:6,Slatkin:2,Kaddish:2,SGA:2,"car-rental":3,bayonets:4,Skating:2,SGB:2,crisp:3,Gensichen:2,scenic:1,Wakayama:2,Quit:39,indications:4,Kodama:2,"U.N.F.P.":2,foreseeable:1,Withrow:2,hashers:4,Barron:2,"Gardner-Denver":2,leveraged:344,snappy:1,"half-crocked":1,"high-definition":3,forgiven:17,Barrow:2,Eden:2,Markrud:2,haulage:3,Brizola:2,"fetal-vulnerability":1,Eder:2,Toward:124,"mosquito-plagued":1,gained:345,embolisms:4,ingest:149,idolize:33,Talon:2,seeds:4,kneebreeches:4,seedy:1,strode:16,Grune:2,"German-born":1,Consuming:8,unbent:1,libertarians:4,jingles:4,uninterruptedly:6,Charters:2,Coen:2,jingled:16,recapitalizations:4,Serra:2,"Young-Jin":2,"off-speed":1,housing:27,Dictates:4,Expenditure:2,Republicanism:2,unresponsive:1,Deor:2,hoosegows:4,beeped:17,Suppose:39,delivers:20,Balance:2,illustrative:1,beeper:215,straightaway:163,Jessy:2,Bicycle:11,official:22,harvested:17,unguaranteed:1,Vagabond:2,Jesse:2,Lusser:2,BOSTON:2,Riga:2,Leixlip:2,denote:42,"semi-arid":1,"Neisse-Oder":2,shepherded:16,Thoma:2,Benets:28,"battery-powered":1,anaerobic:1,Imam:2,Imai:2,Griswold:2,saunas:4,"fast-rising":1,"deficit-racked":1,"Anti-Jones":1,WANES:20,penciled:17,FELLED:16,footprints:4,unswerving:1,Dulude:2,McFeely:6,"Fifty-two":1,Arvin:2,pacify:39,Wafaa:2,Appleseeds:28,Page:11,"time-on-the-job":1,limousines:4,Fujimoto:2,transports:18,undercutting:8,"orders-related":1,Soaring:8,Trotting:8,buoy:39,knockers:4,Sadly:6,consolidated:103,Rous:2,Boies:2,Antler:2,oldest:51,Sicurella:2,consolidates:20,psychopathic:1,metropolitian:1,sputtered:16,Schmolka:2,"forte-pianos":4,physiological:1,Architects:57,Rangel:2,Ranger:2,Sasebo:2,Schonberg:2,"hell-for-leather":6,slowest:51,Pololu:2,overpaying:8,litle:3,League:11,Breed:11,"higher-multiple":1,fireplaces:4,blanket:346,distort:42,sellers:4,Telectronics:2,Adlai:2,disobedient:1,Brindisi:2,XRAL:2,"Canada-North":2,uninviting:1,Surrounding:8,ACLU:2,antagonize:42,Amudarya:2,Shevchenko:2,"League-sponsored":1,Ambiguan:1,Lubrizol:2,chaffing:8,belaboring:55,Kiryat:2,dwindles:20,Bauman:2,Avoidance:2,established:81,LSC:2,DeMyer:2,"Dresdner-ABD":2,"+":287,Sherman:2,LSI:2,LSU:2,"drug-laden":1,LSX:2,textures:4,Yeller:1,Stiles:2,Tiepolo:2,Yellen:2,textured:1,noncompliant:1,Dimitris:2,"F.S.B.":2,Vanities:92,Widsith:2,Martinair:2,rigorously:6,Tuesday:2,Brozman:2,bunked:16,smoke:44,Negotiations:4,secure:347,Cristal:2,"phase-two":1,modulated:17,wrack:78,BEVERLY:2,linearly:6,shams:4,Nezhari:2,Lock:2,Corestates:2,Ssmc:47,fragmentary:97,"two-pronged":1,Dells:2,Plunkett:2,"already-strained":1,sunbleached:17,stochastic:1,emeritus:22,authentically:6,Della:2,soils:4,Porters:28,unfailing:1,Courtier:11,grovel:39,Habib:2,groves:4,gallons:4,Glance:39,could:190,piers:4,"chemical-arms-control":1,Carnochan:2,"whole-bank":1,flunking:8,unreadable:1,Freie:2,Nizer:2,Rowan:2,unsatisfying:1,indifferent:1,altitudes:4,MOHAWK:2,envenomed:17,"Iran-Iraq":2,IPTAY:2,snobbishly:6,morbid:1,objets:64,if:127,"tax-deductible":1,doable:1,Extruded:17,Gottshall:2,suing:8,unmiked:17,LeSabre:2,repeats:72,Trusk:2,homeowners:4,"fund-objective":1,nascent:1,corvettes:4,Trust:115,ridings:4,Fitzwilliam:2,tricked:17,Switchgear:2,Innes:2,Inner:40,"New-home":1,priciest:51,Catholics:41,Kalyani:2,waterworks:348,bunching:8,count:44,beakers:4,"most-recommended-issues":1,promulgators:4,soothing:30,Labatt:2,"loose-jowled":1,classified:45,backgrounds:4,naysay:39,Softer:12,"hard-won":1,excavations:4,Newtonville:2,Kinnevik:2,councils:4,"pin-point":1,"stronger-than-expected":1,Cyclone:2,Nellcor:2,Psyche:2,Lampe:2,Wary:1,Wars:41,vessels:4,strangers:4,Warm:1,understaffs:20,Ward:2,Chatham:2,forth:349,Convocations:4,PILGRIM:2,appointments:4,Palaces:28,Scare:11,monoliths:4,Cambridge:11,Eastern:40,Gellert:2,construing:8,ordering:55,unenticing:1,"low-paying":1,EuroTV:2,Rohm:2,COAHR:2,"E-71":2,Nationalized:17,beaching:8,toconsolidated:17,Cell:11,Stalinist:10,"four-day":1,Squeezing:8,blossomed:32,Doerner:2,drones:4,Harveys:28,ficials:4,Cela:2,Rohs:2,Rohr:2,Magruder:2,protracted:7,"German-made":1,Shreveport:2,Isolde:280,Koshland:2,Census:11,vetoes:18,ludicrously:6,"early-season":1,"plant-expansion":1,Guffey:2,totted:17,Forsan:64,Necklace:2,Brookmeyer:2,"ever-existent":1,Communism:11,extracurricular:1,"one-pound-or-so":1,admonitions:4,Kerensky:2,Dompierre:2,devious:1,Purina:2,encumbered:17,Romero:2,Mironenko:2,"House-Senate":40,stomach:25,Correct:1,Cumhuriyet:2,alors:64,"mean-spirited":1,Nymex:2,"Tudor-style":1,Mahathir:2,Stolen:2,Dniepr:2,prohibitive:1,Naderite:350,devoutly:6,Olivier:2,cumulatively:6,Side:11,manifested:32,"Excise-tax":1,leavening:8,unsophisticated:1,Jerrico:2,fussy:1,dredged:16,Amatayakul:2,Kiep:2,Kiev:2,Carriers:130,"anti-abortion":3,HUNTLEY:2,Gouldings:28,infrared:3,serenely:6,"IH.":2,dredges:20,wrung:39,"good-size":1,bemaddening:8,Kiel:2,latent:3,Brand:47,Republicans:41,Bldg:2,frivolities:4,SCHLOSS:2,"custom-fit":39,summarizing:8,accompanists:4,Brant:2,"financial-related":1,Plumrose:2,Harms:2,"center-fire":1,frowning:8,Soviet:66,Nikonov:2,chastened:32,Armstrong:2,blunderings:4,Fresnel:2,Denman:2,Upson:2,Weasel:2,Pull:39,Pepperidge:2,Bailkin:2,"now-misplaced":1,"sewage-polluted":1,Homecoming:47,SEEKS:20,"bake-offs":4,"ES250":2,"Quick-Wate":2,snoozing:55,symmetric:1,Asensio:2,chattels:4,"multiple-paged":1,Cralin:2,paramagnetic:1,slugs:4,"Ten-year":1,Preoccupied:14,"pre-conscious":1,Argus:2,"city-bred":1,Westmoreland:2,CENTERIOR:2,"Metromedia-ITT":2,Genie:2,VICTOR:2,Pickford:2,Focus:2,twos:4,Leads:20,"axle-breaking":1,"capital-draining":8,Garman:2,requests:18,"non-core":1,Electricity:11,KMW:2,Galicians:28,"money-strapped":1,Groupe:2,broadening:55,FREIGHTWAYS:74,"moon-splashed":1,chimneys:4,Hillary:2,Boxer:2,Rust:2,Groups:92,"post-retirement":1,Igdaloff:2,Bootle:2,cutouts:4,families:4,autumns:4,beastly:1,Citizens:41,jeopardized:17,coherent:1,Montreux:2,Superstitions:28,jeopardizes:20,Bozeman:2,Cynical:1,soundproof:1,Chelmno:2,Altos:2,depictions:4,Accused:40,abrupt:1,Dried:14,"double-digit":3,Thence:6,discourses:4,Crises:4,dumped:32,glutamic:1,"plastic-coated":1,"British-built":1,Jelke:2,comparative:3,Falling:229,Rococo:1,confirmed:112,"One-Horse":1,patent:22,skyjacked:17,unharmed:1,Ingersoll:2,raid:25,Crisman:2,"high-frequency":1,blames:20,Hocke:2,closings:4,rain:25,"Basel-based":1,Berol:2,Milquetoasts:4,Y:351,faiths:4,blamed:32,literatures:4,Diplomats:4,Kegham:2,Electrification:2,orgasms:4,bodes:20,Proper:1,camps:4,"privately-owned":1,Sheldon:2,Able:2,"Bonn-sponsored":2,Surprise:47,convivial:1,adding:55,Lazy:2,starboard:39,dished:16,Leeches:4,Offenbach:2,Slovenia:2,advisories:4,transformed:81,VALLEY:2,Tampa:2,Filipino:129,basses:4,Aarvik:2,Combis:28,Envigado:2,Priem:2,arak:64,insurgent:1,Guadalupe:2,immoralities:4,Zambian:1,lapsed:103,"tight-turn":1,Trading:268,Necci:2,lapses:18,Yao:2,"gas-guzzling":1,sends:20,Divided:17,Tom:2,webs:4,Loewenstern:2,Planeten:2,Seasoned:1,Mesaba:2,Lea:2,Lipman:2,Led:54,Lee:2,Leg:11,phenomenal:1,Lek:2,Kots:2,Len:2,Leo:2,Lep:2,Les:87,Let:352,Leu:2,Lev:2,Lew:2,Lex:2,lagers:4,WNET:2,"past-due":1,scribbles:20,Hedman:2,Caucusing:8,unswaggering:1,graduates:18,blander:12,Swine:1,Swing:2,Swink:2,Deryck:2,dines:20,impenetrable:1,theirs:227,Ceramic:1,Mortage:2,"bone-deep":1,dined:32,cherish:42,Ciciulla:2,"pegged-down":1,"Factory-to-You":2,Make:353,delighted:81,balances:18,Weinberger:2,balanced:103,lewd:1,malignancies:4,Sirs:65,Ketchum:2,liquidated:54,Solzhenitsyn:2,unstressed:1,"general-election":22,"crime-infested":1,Kurzweil:2,McLauchlin:2,encoded:17,Filigreed:1,reset:354,responding:8,unthinkable:3,Bacterial:1,Milman:2,Milstein:2,"Chicago-Manchester":2,"private-sector":3,hotter:12,"electric-sewer-water":1,Scampini:2,Hector:2,subsist:39,Blunt:40,dosages:4,inculcated:32,baguette:64,Jacobean:1,weaned:17,weakened:81,handmade:1,"foot-tall":1,liberalized:81,negotiators:18,Supercritical:2,shoji:64,"limited-partnership":22,tripped:32,ENCYCLOPAEDIA:2,EXECUTIVES:65,"Dallas-Fort":2,Stalinists:65,guiltless:1,CHEWING:8,Massive:66,Monument:11,"action-results":4,Fausto:2,"B.V.":2,cheated:81,pollings:4,Gourman:2,Ropart:2,Teutonic:1,Penutian:2,"centuries-old":1,Situated:17,"government-sponsored":1,vampires:4,"single-family":3,global:1,Parsley:2,Dundee:2,Lintner:2,irritants:4,Haugh:2,Quite:355,Comparable:1,hums:20,flash:205,"Jean-Luc":2,Strenuous:1,videos:4,feebly:6,protective:3,Zhu:2,Effoa:2,dispelled:54,Amfesco:2,Kililngsworth:2,floodlighted:17,Klinger:2,Volunteers:111,"Cincinnati-based":1,feeble:1,Rapoport:2,tooling:55,Facility:2,altering:8,"Rita-Sue":2,fragile:1,Cheerful:1,ruminants:4,Pastures:4,Transylvania:2,PCS:2,PCP:2,repetitive:1,PCM:2,Bryson:2,Rodale:2,Bapilly:2,Rider:2,decelerating:8,Fittro:2,Lowe:2,Lown:2,PCs:56,Gebrueder:2,Basso:2,During:124,Viaje:2,supporting:30,burn:95,Berri:2,overseers:4,"corporate-earnings":4,Berra:2,Hentoff:2,Berry:11,Bassi:2,rubbery:1,appears:72,change:24,Skandinaviska:2,pedals:18,"MacNeil-Lehrer":2,Edzard:2,Humpty:2,Cardiovasculatory:2,Sweig:2,detonate:42,trial:25,"aviation-services":152,Resnick:2,seedcoats:4,triad:22,Fahlgren:2,agates:4,Rangoni:2,Zwei:2,lending:356,Palasts:28,Malays:2,Update:2,retires:20,suicides:4,discrediting:21,terminal:22,Stritch:2,Tiger:11,Caddyshack:2,live:357,jam:44,Tammy:2,eccentrics:4,marginally:6,"re-insure":39,Waltermire:2,ABC:2,Echeandia:2,Beverage:2,Ulanys:74,Moune:2,clumps:4,yelling:55,Concise:1,Jens:2,Epilepsy:2,MMS:2,gathers:20,MMI:2,Alessio:2,Jena:2,Corporations:92,"shock-damping":1,MMC:2,breeds:18,dedicated:81,"warm-hearted":1,"AH-64":47,saith:358,expanding:30,Neoliberal:1,STRUGGLED:16,unlovable:1,Dataproducts:74,"quota-increase":1,Magog:2,trophies:4,Fleischer:2,Norm:2,Acorn:2,Karkazis:2,"planetary-science":1,"commodity-oriented":1,banding:8,Trumplane:2,Lorincze:2,Pilson:2,crepe:1,remember:42,"Two-day":1,candles:4,"tag-team":1,"chin-out":1,"home-mortgage":1,baseballs:4,truley:6,crept:32,Rawlings:2,bleedings:4,Sulzer:2,"installment-loan":1,embassies:4,tagged:45,"Spanish-American":40,toward:127,"cross-currency":1,Brezinski:2,coli:4,cold:3,birds:4,Landini:2,"sloe-eyed":1,Greater:141,Transactions:123,selves:4,reacting:8,Landing:116,"Leesona-Holt":2,resurfaced:32,enny:1,feats:4,Blythe:2,halt:139,Trexler:2,Robertsons:28,Compliance:11,Zupan:2,wielded:54,appoints:20,Preventive:1,Elinor:2,Fery:2,LIVERPOOL:2,"better-quality":1,Marlene:2,"construction-management":1,Critical:40,dramatical:1,Lowenstein:2,"cancer-suppressing":1,em:53,en:359,eh:106,Baer:2,"trade-offs":91,worriedly:6,Except:124,Guadalajara:2,"Philadelphia-based":1,ex:145,et:360,er:106,vying:8,"foot-thick":1,opened:32,space:25,"VH-1":2,Torquemada:2,showy:1,castlelike:1,"too-naked":1,eidetic:1,Mattei:2,Ghanaian:1,Stans:2,"earthquake-related":1,Covey:2,Cover:59,eluted:17,Stand:95,Lockwood:2,Foreign:40,Ransomes:2,rearrangements:4,barest:51,Beatie:2,Guiana:2,Bavarian:1,domes:4,Konner:2,Promise:2,domed:1,Even:218,concertos:4,Teslik:2,Asil:2,impossibly:6,Asia:11,Inca:40,Landers:2,orthographic:1,Rookie:47,impossible:1,forwarding:21,Ever:150,"Al-Sabah":2,Inco:2,sheep:19,sheer:3,Diamond:11,jugs:4,lightened:32,weekdays:361,naughtier:12,"co-pilots":4,Galicia:2,Calmer:12,"long-vanished":1,"much-despised":1,shampooed:17,Johansson:2,Waterseller:2,Neck:2,pelting:13,peck:256,"Inc.":144,Quinzaine:2,rugged:1,Heisch:2,Speculators:4,Larkspur:2,"non-union":1,shady:1,sublime:3,Furillo:2,Remarketers:4,saute:39,"World-Journal-Tribune":2,Cali:2,"too-simple-to-be-true":1,Call:362,Calm:1,abnormalities:4,Crawford:2,Cale:2,Calf:2,sterilized:54,"anti-Kabul":1,Phi:2,cavemen:4,skidding:8,Hellene:2,"Non-interest":1,Exodus:2,faciunt:64,"six-cylinder":1,"trans-Pacific":1,Osipenko:2,SUNY:2,Colombians:65,PS:2,Markoe:2,"Less-than-truckload":1,Nacion:2,Duyvil:2,hamstrung:363,"Ph.":144,largish:1,sunset:25,diagonals:4,dispersed:81,"higher-caliber":12,Fifth:40,Accutane:2,Polevoi:2,misrepresenting:8,"Sony-owned":1,Schwartzman:2,Centurion:2,Seismographic:2,cheeseburgers:4,"ikey-kikey":1,gnaw:39,unedifying:1,probings:4,Solar:40,underfunded:14,Leasco:2,Katya:2,NATIONAL:40,telomeric:1,prides:20,Plunging:8,fortifications:4,remoter:12,prided:32,"European-minded":1,appreciatively:6,Grumbled:16,seldom:6,Alley:11,Jeux:64,guttered:16,Rundfunk:2,Allen:74,PM:2,bluebloods:4,pouches:4,"once-prevailing":1,Runyon:2,unmarried:7,Parkhouse:2,fanned:32,Winslow:2,"matter-of-factly":6,tackling:8,halides:4,"big-daddy":1,Berlin:129,"work-out":3,Butt:2,herbal:1,Butz:2,Equations:4,"extraordinary...":102,Antares:2,"post-revolutionary":1,Palmolive:2,transluscent:1,OSHA:2,UNITED:2,Swamped:17,diocesan:1,"self-interest":22,"successor-designate":1,unfrosted:17,Chevalier:2,mirroring:55,pilings:4,moreover:6,imcomparable:1,deducting:8,capitalizations:4,Anthology:2,rebuild:39,"manmade-fiber":1,SCECorp:2,lumpish:1,whispers:18,dangers:4,"build-better-for-less":1,rebuilt:17,"prie-dieu":64,shortages:4,Hamburg:2,"non-veterans":4,Creamette:2,observers:4,Vorontsov:2,Enforcers:4,countless:1,OEX:2,Merced:2,Reins:2,Serlin:2,OEL:2,dregs:4,Reine:2,PARTICIPATED:16,piglets:4,Reina:2,Dice:4,Dick:2,"Me-210":40,"South-East":2,embrace:95,bestial:1,heels:4,multitudes:4,mediocre:1,Bolsa:2,Mediumistic:1,commuting:55,Arden:2,"fair-weather":1,pedantic:1,finish:182,buccaneers:4,Shady:2,reunions:4,Pinsoneault:2,Stash:2,videotaped:54,Steelworkers:111,woulda:190,Shade:11,Hersh:2,"inspector-general":1,Joining:8,Ackermann:2,"fluorescein-labeled":1,"sex-for-hire":1,diatomic:1,slugged:32,wintered:17,tablespoonful:22,slanting:30,dueling:55,conclude:42,sportin:8,ESOPs:123,"well-set":1,sportif:64,participative:1,"near-solid":1,SoHo:2,real:34,Renwick:2,preliterate:1,Tuck:2,read:364,Phillip:2,detoxify:39,Reorganized:2,leapfrog:63,unreflective:1,detract:42,pesetas:4,"French-polished":1,Adrien:2,reap:42,rear:104,Kenlake:2,fractionally:6,suppliers:4,"glass-making":22,evidencing:8,Hawkinses:28,servile:1,"rival-bashing":1,Szanton:2,hacks:4,Archives:111,Barbaresco:2,slaughtering:8,recorded:45,Landrieu:2,descents:4,Southeast:180,featherless:1,putted:16,Marilyn:2,architectonic:1,stagecoaches:4,Hunt:2,seducing:8,hectic:1,Promotion:11,"anti-Catholic":1,Weavers:57,"easy-to-read":1,paints:18,STRIPES:2,Grandmothers:2,greatly:6,Forgot:17,Depressive:2,Dubaih:2,Cousin:11,"more-advanced":200,Memories:41,Fallout:2,"Wyser-Pratte":2,Hung:2,"Bard\\/EMS":2,heated:81,Steppers:65,gungho:1,prepare:42,Vaux:2,Engelken:2,DISPLAYED:16,Hotei:2,Birthday:47,unclasping:8,faulted:54,Motorcycles:4,"highway-relief":1,Nagykanizsa:2,"TSH-treated":1,Calimala:2,Tripoli:2,"DDG-51":2,Calcutta:2,appareled:17,irreversible:1,"Department-store":1,McKay:2,Leinoff:2,"Monday-morning":1,comics:4,condemnatory:1,Leyte:2,enameling:21,Grisebach:2,Grenfell:2,keyboarding:8,Shrugged:17,builders:4,Nobuya:2,"commercial-banking":22,septa:4,cartons:4,oxen:4,subdue:39,Cemetery:11,sales:365,Tijd:2,reassumed:17,"flat-to-lower":1,storage:22,thither:6,hobbyists:4,gambling:21,"seven-week-old":1,surest:51,Vicki:2,Iwatare:2,eromonga:64,Renaults:28,"technologies\\":1,flattened:45,"nerve-racking":1,Pissarro:2,Surrealists:4,Whitefish:2,Stuffing:8,chords:4,adsorbed:17,Workshops:4,"pectoral-front":1,Ovitz:2,Pablo:2,hateful:1,pointing:55,Griesa:2,splitting:27,slimming:8,Alcarria:2,bequeath:39,Schmidt:2,Astwood:2,dimesize:1,Brown:40,compatiblizers:4,FORCE:33,"interior-decorating":1,Ralston:2,Syms:113,Parallel:1,sprains:4,Recovering:8,very:218,indubitable:1,"officials-cum-drug-traffickers":4,"based-CAE":309,mph:22,minded:32,morphemic:1,Beethoven:2,Khalifa:2,guileless:1,Midnight:2,Kruger:2,Ancel:2,Electrostatic:1,"cash-rich":1,"Wyo.":2,Reiss:2,Henrich:2,Genuine:2,TSH:2,TSB:2,"self-contained":3,Glaxo:2,ELECTRONICS:2,Valens:2,Circles:4,papering:8,apologizes:20,Widened:16,bituminous:1,"three-game":1,Ronnie:2,Harmful:1,Feeney:2,apologized:32,Probing:8,Tammany:2,repugnant:1,Violeta:2,Alexei:2,entailing:8,recruits:18,rudimentary:1,answers:18,Grindlay:2,sardines:4,yummy:3,"consumer-oriented":1,Borden:11,interposed:17,Phamaceutical:2,ahead:218,disclaimers:4,"dream-ridden":1,whoppers:4,Woessner:2,Border:11,Victor:2,sidearms:4,Independents:28,Exactly:6,"T-1600":2,"capacity-expansion":3,agonized:187,"order-entry":3,Molesworth:2,Compulsions:2,"original-issue":1,"income-producing":1,Clarks:4,Tredyffrin:2,"easy-to-use":1,Creating:8,Elf:2,injure:42,microeconomics:4,reserving:8,Lapham:2,CLUBS:4,ROME:2,girds:20,doubtlessly:6,"wide-winged":1,"stand-up":1,erode:42,Policemen:57,Chickens:4,Colson:2,powerhouses:4,Oral:2,Oran:2,Sheila:2,aspirational:1,Yoshitoki:2,AFDC:2,"metal-cutting":1,Hartlib:2,sweeps:18,peals:4,reshaping:55,Kerkorian:2,Staining:8,stampede:44,Chubb:2,Bronislava:2,exclude:42,"grey-skied":1,"sci-fi":3,Wergeland:2,lithographic:1,cloying:366,Ganis:2,Heightened:1,Fitzpatrick:2,Pass:59,germinal:1,Yilin:2,roadblocks:4,gasp:25,inconceivable:1,"INC.":2,Milcote:2,Adamec:2,prerequisites:4,"lava-rocks":4,"mortgage-backed-securities":4,overnight:34,buns:4,renewing:8,Fila:2,Ubermenschen:28,File:25,Film:2,Fill:42,chicks:4,Fishery:2,uncensored:1,Floresville:2,Africans:111,dine:39,"space-station":22,tousled:14,"non-negative":1,"then-owner":1,Cardinals:74,painstaking:1,fines:91,"post-war":3,fool:70,"drunk-and-disorderlies":4,"spear-throwing":1,Syndicates:4,awarding:55,prenatal:97,grandfathers:4,Syndicated:2,Sunward:2,foot:205,"sixth-grade":1,Stillwell:2,Lewisohn:2,desperately:6,SFX:2,Suns:65,Ekwanok:2,heavyweights:4,"D&H":2,Bueno:64,SFD:2,SFE:2,Sung:2,Toland:2,"in-grown":1,unachieved:17,savored:32,inspirational:1,fees:4,wacky:1,irreconcilable:1,cemented:17,bulking:8,Minella:2,Kessler:2,Starve:59,Zemlya:2,Bloomingdales:2,presumptuous:1,since:206,temporary:1,InterNorth:2,ultrasonics:4,laxatives:4,"M\\/A-Com":2,"Bent-Arm":2,dunk:25,flaunt:42,ast:1,"forty-niners":4,"production-sharing":3,ask:42,"spread-out":1,Palladio:2,Investments:41,heroic:1,ketorolac:2,Sohmer:2,perceptual:1,fugures:4,tenets:4,"six-fold":6,tortoises:4,cheering:8,Selma:2,liquefies:20,DAYTON:2,"penny-ante":1,reflected:85,"Badura-Skoda-Vienna":2,Hubbell:2,tektites:4,alliterative:1,Gorce:2,herbicides:4,Jeremiah:2,Plekhanov:2,"ballot-burning":1,"Mortgage-backed":1,Lipchitz:2,Brinkley:2,shifted:32,hardbound:1,Modell:2,Ventura:2,"anti-Western":1,Venture:11,McGraw:2,western:1,Gianicolo:2,Calais:2,Searle:2,squeaky:97,inducted:17,collaborations:4,prejudged:17,squeaks:20,photographing:55,Leninskoye:2,"Figs.":367,Quotidien:2,Extinction:2,rationalizations:4,Saudis:368,substantiated:1,Conduct:59,Father:11,juicy:1,unthematic:1,Stenhach:2,ecstatically:6,bridled:17,"income-oriented":1,sensual:1,GTE:2,Gruene:2,outbound:1,retracted:45,"Band-Aid":2,Arger:2,flaming:13,cargoes:4,Ryrie:2,Puccini:2,Pissocra:2,repossesed:1,Thy:369,frauds:4,Companies:92,Kakutani:2,Foxmoor:2,Stronach:2,hothouse:1,Aviva:2,The:370,Mulligan:2,gregarious:1,Bolstering:8,Mommy:2,outbidding:8,Postscript:2,Momma:2,"bridge-financing":1,Fishing:11,"World-wide":1,Mahagonny:2,giggles:4,acerbic:1,fiercest:51,Croonen:2,flounders:20,hefted:16,"top-notch":1,giggled:32,"church-owned":1,begets:20,Nishiki:2,copyright:22,Norberto:2,"government-plus":1,CHARLES:2,"no-good-bums":4,darted:16,"pre-history":3,"long-familiar":1,"world-weary":1,pretty:218,Bolger:2,NatWest:2,"low-interest":1,"seven-session":1,custodial:1,trees:4,Dupuy:2,Crystal:11,spackle:39,tossing:55,gloved:14,sacrificed:17,MICROSYSTEMS:2,"full-bodied":1,sacrifices:18,CHARITABLE:1,Unitarians:111,gloves:4,battlegrounds:4,Pritchett:2,crams:20,"re-rated":17,"W.N.":2,Decent:1,outboard:1,YEEEEEECH:106,manning:8,horoscopes:4,"Knife-grinder":2,Babin:2,Liddle:2,patties:4,horrid:1,Lectec:2,dramatics:4,Tikopia:2,VIDEO:47,Kissinger:2,NHTSA:2,gynecologists:4,Zacks:2,Haro:2,Harm:2,Hark:2,unknowing:1,Fisk:2,Fish:11,Hard:294,Briscoe:2,Hara:2,Rhoads:2,watchtowers:4,crackpots:4,Allingham:2,Argiento:2,searchlights:4,"government-held":1,batters:18,likee:39,ridiculing:8,"trans-Canadian":1,assortments:4,strenghtening:8,ideologues:4,Maidens:28,likes:132,"private-line":1,Mose:2,"neck-deep":1,described:54,Mosk:2,Batangas:2,resellers:4,Most:371,describes:20,preventable:1,Astrid:2,"SX-21":2,Tomoshige:2,Honecker:2,budgeted:54,"three-foot-wide":1,lodgings:4,wet:372,append:39,else:277,Westvaco:2,transacting:8,"second-quarter":3,referrals:4,utmost:3,"all-paper":3,Memotec:2,Verdi:2,Mallinckrodt:2,eateries:4,erupting:8,straggling:8,voters:4,Furthermore:6,Spuyten:2,Cassandras:28,Meistersinger:2,shuttered:103,Ryerson:2,shag:1,Meir:2,sham:22,Huff:2,"Pollution-control":1,receptions:4,curators:4,Transmission:11,Alliant:2,overweight:3,feds:4,priceless:1,"takeover-proof":1,plugs:18,Telerama:2,"much-beloved":1,unrolls:20,wedged:54,grind:256,segmented:1,"center-stage":1,stubbed:17,Vaezi:2,grins:4,Girl:11,Dennis:113,mislaid:17,authoritatively:6,distances:18,Chugai:2,MOVED:16,escorted:32,atrophy:78,unhedged:17,inlets:4,hemolytic:1,praying:55,Killpath:2,"$":84,moist:1,Football:11,guaranteed:81,Finished:17,havin:8,Spiegelman:2,Germany:2,guarantees:18,Maclean:2,Tivoli:2,march:24,"fast-acting":1,Stallkamp:2,"thousand-person":1,culturally:6,Owego:2,Biehl:2,"well-equipped":1,Waited:17,overriding:30,Shukri:2,Scanner:2,UBS:2,interestingly:6,Smallwood:2,"Pepto-Bismol":2,Learning:116,"Shu-tt":39,"art-nouveau":1,brakes:18,philandering:8,Salomonovich:2,"trade-union":22,Verbatim:1,"higher-octane":1,Pittsburgh:2,exceeding:30,slash:182,phasing:8,Hokan:2,variances:4,chargin:8,ruh:64,run:373,rub:44,"first-time":1,Pymm:2,"macro-instructions":4,ochre:3,Grannell:2,integers:4,Girozentrale:2,Showdown:2,Lior:2,sourdough:3,Lion:2,"Courier-Journal":2,"F.O.O.D.":2,nonequivalent:1,Diagnosis:2,Eclectic:1,gambits:4,Racing:116,rolls:18,Racine:2,Caddy:2,"marble-encased":1,Northamptonshire:2,Kuster:2,Noll:2,sizzle:25,lowprofile:1,syndicators:4,Individuals:4,warlike:1,"fiber-end":1,Bostic:2,Kazis:2,lacheln:64,Lilac:2,"physical-chemical":1,"U.N.-sponsored":1,Bostik:2,Tyszkiewicz:2,Murray:11,"origin...":102,gymnastics:4,stragglers:4,"Wis.-based":1,Haarlem:2,Uchida:2,"Shaw-Crier":2,fleshpots:4,Sizova:2,tormenters:4,pattered:16,Kyodo:2,"rough-tough":1,Lugar:2,ECUs:4,Kazan:2,Leather:2,preachers:4,Speaking:217,vagabonds:4,"lap-top":1,spectators:4,"re-election":22,visits:18,Thought:374,Teague:2,Emmett:2,Mexicanos:2,required:45,humiliated:14,factually:6,humiliates:20,requires:20,evenly:6,eradicated:54,nuns:4,Pell:11,unalloyed:1,"Wright-style":1,go:375,Integrated:2,"Af-fold":1,Cuisinart:2,earthbound:1,transacted:17,chinos:4,"government-owned":1,attired:7,"brass-bound":1,Bet:2,Goriot:2,Pulley:2,"self-diagnostic":1,Pullen:2,Bisi:2,SpA:2,defamatory:1,Hindelong:2,Teerlink:2,Spy:2,tonal:1,"non-food":3,cyclosporine:22,Schuylkill:11,"insurance-premium-finance":1,Spa:2,innately:6,Solebury:2,"five-count":1,oddball:1,Thynne:2,punishing:30,"digest-size":1,Farentino:2,"Same-store":1,clotting:8,predispositions:4,Soothing:8,"limited-edition":1,Poirot:2,Rohatyn:2,auspices:4,Briefly:6,sophists:4,Boyd:2,opaque:1,Boym:2,Boys:41,rotten:1,Kirkland:2,Aulnay:2,schoolboys:4,Quatre:2,newcasts:4,vodkas:4,"burnt-red":1,"A.D.L.":2,Houghton:2,brokering:55,stanch:83,BANKERS:57,"woolly-headed":1,growing:5,Crimean:2,affidavits:4,Hedding:2,likened:32,Colder:12,PATTON:2,Aho:2,Billheimer:2,repel:42,products:4,cataloging:8,"fellow-men":4,Wonder:376,examining:55,"half-time":168,"Portuguese-language":1,Lipson:2,Waldheim:2,anomalies:4,horticultural:1,"Dai-Tokyo":2,manipulate:42,strapped:45,aspirants:4,swanlike:1,arsines:4,Birkhead:2,"vine-crisscrossed":1,indefensible:1,Appropriations:46,statutes:4,benchmark:22,Editorial:3,"Anti-Ballistic":2,shrieked:16,"burr-headed":1,SNET:2,RADIO:47,nurture:63,Englanders:28,anthropological:1,Similarities:4,Almighty:2,documenting:8,Aoki:2,hesitate:42,reoriented:17,Rothschilds:28,digested:17,Furey:2,YOUR:377,compiled:54,ideologically:6,pink:3,fostered:54,entree:80,Alleghenies:28,Ltee:2,foment:39,"Ambassador-at-Large":2,"sky-high":1,pansies:4,buoying:8,adjectival:1,Farewell:2,agenda:19,unsolved:1,unbreakable:1,Hongkong:2,offences:4,bogeymen:4,Schantz:2,Patchen:2,Bangles:28,"PWA-owned":1,"still-to-be-named":1,"stock-index-futures":152,Volunteer:2,Philibert:2,sterios:4,pure:1,unflaky:1,Salsich:2,Repeating:8,Coolest:51,Supreme:2,Yamane:2,fundraisers:4,McNear:2,foiling:8,McNeal:2,pools:18,"lead-exposure":1,indolently:6,Displaying:8,denuclearized:17,Albertson:2,SURVEYS:4,prognosticators:4,aggravates:20,Hoxan:2,"index-linked":1,aggravated:54,seesaw:22,sands:4,Narbonne:2,sandy:1,lukewarm:1,EGYPT:2,Season:47,McVities:2,repositioning:21,fathom:39,Juliette:2,Towering:30,amendatory:1,spacesuits:4,Engle:2,Brumidi:2,Aptitude:2,terminated:54,Gershen:2,Fundamental:66,conservatives:4,alchemists:4,"Judd-Boston":2,befriended:32,Steiger:2,"post-hearing":1,McLendon:2,Guimet:2,childless:1,standbys:4,"mono-iodotyrosine":3,"original-equipment":3,Sondheim:2,Newburger:2,Hybritech:2,Managing:321,Burdett:2,Gunner:2,introspective:1,Pantasaph:2,NORTHEAST:47,fella:235,ASP:2,AST:2,guys:4,WORK:33,adjoins:20,"AS\\":11,chintz:33,attach:42,attack:24,buckaroos:4,Odom:2,Klan:2,Rinehart:2,Roquemore:2,Teixeira:2,Bini:2,DUN:2,"Rev.":2,Bing:2,clanging:21,formalities:4,Bride:2,R:47,Dutton:2,"World-Telegram":2,overwhelming:13,updating:55,Grossman:2,choreographed:14,Channing:2,Bognato:2,distinguishes:20,beg:149,bed:44,"RENT-A-CAR":2,snazzy:1,distinguished:81,bet:378,exhibit:24,rhythmic:1,Baris:2,"Curtiss-Wright":2,"R-stage":1,Gillette:11,Swiggett:2,carrots:4,"photographic-products":1,sardonic:1,battlegroups:4,torment:25,"all-options":1,constrained:14,batwings:4,"rice-processing":1,Isabel:2,mainstays:4,"square-built":1,INVESTORS:4,Retton:2,"no-frills":1,Dillinger:2,romances:4,dimming:8,"option-related":1,floundered:54,hoodlums:4,Urals:65,Worlders:28,Norths:28,nuisance:22,Northy:2,bloodthirsty:1,Somersaults:4,consequences:4,"WSJ\\/NBC":11,"semi-retired":1,Growth:47,"conventional-arms":152,Brendel:2,"six-ton":1,reprehensible:1,anyway:6,"contour-obliterating":1,farfetched:1,"coal-mining":1,parked:81,unenvied:1,Manske:2,counterterror:1,boutiques:4,remunerated:17,Bonaccolta:2,fiberglass:91,"ever-lovin":1,millennia:19,"Creditanstalt-Bankverein":2,attained:32,"stocks-index":1,Leszek:2,Medici:28,quantified:17,Eats:4,bodybuilders:4,assimilable:1,"User-friendly":1,Politically:6,Ilva:2,ascended:16,"heart-wrenching":1,shy:162,pricetags:4,uprisings:4,she:53,mixologists:4,Incrementally:6,solicitous:1,flogged:16,"Two-year":1,Stroking:8,sho:106,"home-building":3,accuses:20,halving:8,WEFA:2,typhoons:4,differs:20,Williamstown:2,accused:271,Tartary:2,"configuration-data":1,"add-ons":4,Hergesheimer:2,Chiriqui:2,Dimaggio:2,horribly:6,arraigned:32,horrible:3,neither:379,INCREASING:8,kidneys:4,Wipe:39,"BellSouth-LIN":40,McAlinden:2,spares:18,Campo:2,Recall:42,extolling:8,seemed:32,spared:54,Remain:39,Race:11,"middle-level":1,ailerons:4,mujahideen:64,Tunnard:2,undetermined:1,Poling:2,meritless:1,Revlon:11,"at-risk":1,anchormen:4,Masson:2,"year-before":1,Headlines:4,"High-grade":1,Chabrier:2,franchise:25,Tabuchi:2,"quantity-based":1,feeblest:51,Regalia:2,"Middle-Eastern":1,"new-mown":1,Immigration:2,conjoined:17,chimiques:64,MOTOR:2,"do-nothing":1,Raider:2,isolating:30,banshees:4,"well-paid":1,Pretend:39,"SEC.":2,ghoulish:1,Repayment:2,Lutsenko:2,capering:8,Logistics:2,owne:1,Tired:7,contexts:4,supervened:17,ripen:33,Avocado:2,chanceries:4,Tires:57,"disaster-subsidy":1,Rusty:2,"non-surgical":1,inaccurately:6,owns:20,cornering:8,"bi-modal":1,Cyprus:2,TAKING:8,ArgoSystems:28,Troops:123,Laverty:2,interrogate:39,plundered:17,"channel-zapping":1,disclosures:18,orbital:3,Dresdner:2,calamitous:1,incumbent:3,Machelle:2,Viareggio:2,"post-reapportionment":1,Repairing:8,rightfully:6,Lucassen:2,compared:54,Sabo:2,wrongly:6,Saba:2,Grimes:2,Norsk:2,"freight-transport":3,Throwing:8,Meinckian:2,Damonne:2,HEUBLEIN:2,Superman:2,She:251,taller:136,"non-communists":4,schnooks:4,"tell...":102,Blaber:2,Perasso:2,centralizing:30,"incentive-spurred":1,spells:72,Waldenbooks:2,"stock-picking":3,"fine-tune":39,deposits:18,deuterated:16,Broner:2,"drug-supply":1,Yasser:2,sonic:1,wooed:54,definitive:1,whims:4,swami:4,fats:4,historic:1,Autolatina:2,Attributes:4,"dental-products":4,Inspectors:4,"break-the-rules":1,sizes:18,worthwile:39,Burchuladze:2,sized:85,tablespoons:4,pinging:8,hydrolyzed:17,lends:20,Hoaps:2,Albrecht:2,Gerbig:2,rims:4,Teipel:2,goats:4,Babylon:2,Seizes:20,"price-and-seasonally":6,Institutio:2,retirements:4,Rhythms:28,medieval:3,Practically:6,Leavenworth:2,expansion:22,Strobel:2,imperfectly:6,choked:32,Aslanian:2,Pyrometer:2,eatables:4,U:11,celebrations:4,"Ford-Kissinger":2,citron:1,mushrooms:4,Foxx:2,brusquely:6,secretive:1,winging:8,Nakamura:2,agin:206,Rameau:2,Dunlop:2,Dayton:2,Lorca:2,CGE:2,figuratively:6,inner:1,CGP:2,TEDs:4,"R.F.":2,Perin:2,FED:2,prophetic:1,Campitelli:2,"government-encouraged":1,administrators:4,Daschle:2,fraternities:4,Hesse:2,Harrows:28,Industrial:40,apiece:218,annuities:4,millstones:4,projecting:8,Seashore:2,gagged:54,Cacao:2,Industrias:2,mechanics:4,Semel:2,Alla:2,boulevards:4,Tasaki:2,Fellows:4,"impulse-related":1,"build-ups":4,Ally:33,torrid:1,savagely:6,Appell:2,Telecommuncations:28,"Mexico-watchers":4,indiscretions:4,"deficit-reduction":22,Depicted:17,bronchi:4,Allday:2,Date:47,Healey:2,tightest:380,unsteadily:6,Chambers:130,retirees:4,Savage:40,Engraph:2,"Bernstein-Macaulay":2,"coal-preparation":1,protest:44,Toledo:11,intermingle:33,IJAL:2,"up.":6,fronts:4,Liverpool:2,Klein:2,Lunge:2,onstage:163,"high-coupon":1,Grocery:11,"pro-environmental":1,Auschwitz:2,"clear-channel":3,"dealer-managers":4,advocating:8,Queks:28,snowflakes:4,"well-structured":1,nursery:22,greenish:1,fortiori:64,"closed-circuit":1,swoons:4,bimonthly:1,Strasbourg:2,concise:1,Negative:1,Hounds:28,evaluated:54,twiddled:16,Affected:17,desirous:1,"hang-tough":1,"now-ousted":1,unskilled:1,Anselmo:2,evolving:8,centric:1,"baby-food":1,Items:4,never:381,Artisans:4,"S.I.":2,"second-hand":1,cardboard:22,Georgano:2,Fragile:2,buckled:112,groveling:55,piercing:30,Soering:2,tolerating:30,golds:4,"weapons-grade":1,Lilley:2,astute:1,Archangel:2,hunch:25,elaborated:17,"second-deadliest":1,dehumanize:39,elaborates:20,"near-monopoly":22,Telemundo:2,Binning:2,drowned:81,"college-educated":1,Armies:2,Corresponding:8,Heuvelmans:2,exited:32,Loire:2,misfiring:8,Insisting:8,Removed:17,tell:42,"slam-dunk":25,expose:182,Yuen:2,Hibbard:2,loony:1,"A.D.":382,shelters:4,"counter-trade":1,Esrey:2,inhabited:45,directorial:1,Vittorio:2,rights:4,Cornwallis:2,Vittoria:2,"Japan-made":1,frantic:1,endow:42,"Short-term":66,summarizes:20,barbers:4,"U.s":2,Ricken:2,squirting:8,CALLS:28,give:182,TransAtlantic:2,Humphries:2,gleefully:6,artifically:6,crystallized:32,"U.S":383,Phoenix:2,Gaisman:2,braids:4,Jack:2,Mokaba:2,butting:8,"U.K":2,"U.N":2,Hashing:47,peopled:17,Neesen:2,Connolly:2,Prickly:1,Quinton:2,"do-gooder":3,Shlomo:2,summarize:39,muddling:8,ambivalent:1,suppressants:4,DEFERRED:1,"U.S.A.":11,"electronic-test":1,"under-50":1,gulling:8,"anti-miscarriage":1,"cold-cuts":4,"L.B.":2,cofactors:4,Sharps:2,amplifying:8,overstepping:8,elucidations:4,Sharpe:2,panthers:4,partisans:4,indispensible:1,"private-label":3,"three-week-old":1,soaking:384,DIASONICS:2,"anti-lobbying":1,Bobby:2,decions:4,Detail:2,underscore:256,Frederik:2,Weakens:20,"Capitol-EMI":2,"quarter-century":22,calibrating:8,Sapanski:2,Goose:2,Fortescue:2,Milan:2,"less-cyclical":1,Tacker:2,motoring:8,enthusiasts:4,Dressed:17,Wow:106,RNAs:4,Charts:4,Waleson:2,Woo:2,taught:54,Bogner:2,Dresses:4,Dresser:2,conjectures:18,COOPER:2,"pig-infested":1,freelancers:4,anesthetically:6,ranted:16,HMS:2,conjectured:17,Tractarians:4,appraisers:4,HMA:2,Warners:4,"primitive-eclogue":1,Emeryville:2,Ricans:56,Weigand:2,Crowder:2,"over-emphasize":1,"tax-rate":3,greasy:1,logging:27,childishly:6,ist:64,prodigal:1,perforated:1,cellars:4,loud:97,"skilled-nursing":1,grownups:4,Dorothee:2,Sovereign:2,hoot:78,hook:25,Villanova:2,Folks:4,Attali:2,goblins:4,ECA:2,"financial-futures":4,"Hanover-Pebble":2,"non-realistic":1,ECI:2,"business-like":1,ECU:2,Wittgreen:2,Dainippon:2,ECP:2,"non-duck":1,"twenty-first-century":1,steamily:6,mutate:39,"bed-and-breakfast":1,nondefense:3,Boonton:2,Geroge:2,swells:18,"mid-thirties":4,Purchases:57,"M.A.":2,cruelly:6,depraved:7,Galina:2,normalizing:8,matter:24,Colin:2,childlike:1,espouse:33,"clerical-lay":1,"Louisiana-Pacific":2,Floor:11,pistons:4,rivers:4,Flood:31,expeditions:4,Poets:4,"power-hungry":1,boaters:4,"it...":102,demoralizing:8,subcontracts:4,Khin:2,Instructions:123,Dirks:113,wrists:4,psychologically:6,replenished:54,Ludlow:28,repatriate:42,Adelia:2,"government-set":17,Trenton:2,Dynasts:28,greased:32,Dynasty:11,SHOPPERS:4,greases:4,moviemakers:4,"half-implemented":1,Marketers:57,Karsner:2,calculable:1,"Bay-front":1,Alvan:2,"evil-but-cute":1,resisting:8,unleashes:20,paralleling:8,Amana:2,MicroGeneSys:2,folded:45,Wight:2,Wolverton:2,integrate:42,"slender-waisted":1,Unitours:28,somnambulates:20,Comics:28,stop:182,Cawley:2,libellos:4,cracks:18,"HEWLETT-PACKARD":2,coating:21,thermoforming:1,comply:42,Gloucester:2,briefer:12,POUNDED:16,Sally:11,thrusts:18,"weed-killing":1,briefed:54,consanguineously:6,Straniera:2,Clapping:8,"Joint-research":1,ethical:1,Roark:2,Kempinski:2,Juanita:2,Viag:2,Wangemans:28,revenuers:4,"auto-strop":1,tantamount:1,unbanning:55,Bucknell:2,Yards:2,Eurofighter:2,juxtapose:33,deflecting:8,Podolsky:2,were:385,pickins:4,richest:51,modeling:122,picking:55,"white-clad":1,mucky:1,horsemen:4,prudential:1,subverting:8,Abnormal:1,Refcorps:4,Reasoning:47,Devoted:17,appeared:32,Jouvet:2,Snow:11,administrations:4,Wentworth:2,Constantin:2,turnouts:4,dusting:55,unsloped:1,particulars:4,recognised:16,Cagayan:2,ethers:4,obtained:386,Stout:2,quantities:4,sunshiny:1,Marines:65,individualists:4,misquoted:17,Huskers:28,Boothby:2,profitably:6,Sellars:2,near:387,apocryphal:1,neat:1,DESPITE:127,Tigard:2,Enel:2,anchor:24,"power-starved":1,"automotive-emissions-testing":1,traditionalistic:1,is:388,it:53,Dante:11,strivers:4,Ruder:2,in:389,textiles:4,sanitized:17,"two-product":1,convulsively:6,overstated:54,bottles:18,Fergeson:2,anoint:39,"insulin-dependent":1,bottled:103,Berettas:4,overstates:20,Chilblains:4,phobias:4,Pencils:4,astringent:1,"no-man":1,declaring:8,redevelop:39,Neihart:2,Bramwell:2,lonesome:1,"Hard-Hearted":2,Truck:11,"quarter-inch":1,potentials:4,Craftsmen:111,Air:11,stiffened:32,"pari-mutuel":1,Pelican:2,practiced:45,BeechNut:2,timeouts:4,Pucik:2,Sakaguchi:2,Sonja:2,Vasvani:2,squamous:1,practices:18,Minicar:1,"Packaged-goods":4,Thornburg:2,facto:390,Sulaiman:2,sporting:5,identify:42,Drivon:2,supernormal:1,facts:4,Shenzhen:2,"bed-type":1,Mattone:2,regarded:81,Rotunda:2,defray:39,moody:1,beholds:20,Holch:2,Freya:2,darlings:4,converged:16,Albania:2,vapors:4,Lucca:2,reconsidering:8,"low-down":22,Alvise:2,Targo:1,esthetics:4,"svelte-looking":1,signposts:4,unexplored:1,anodes:4,"package-delivery":1,"Crude-goods":4,Klauber:2,"first-three":1,Denverite:2,Lifeco:2,Maddry:2,"red-turbaned":1,Covering:2,Triandos:2,daytime:3,"RNA-based":1,"motor-control":1,societyonly:6,JMB:2,unmagnified:1,nonpoisonous:1,Basse:2,"friend-of-the-court":1,"bank-backed":1,"car-safety":3,Baileefe:2,Swedes:41,Sweden:2,firemen:4,bury:42,unendurable:1,BECHTEL:2,zur:64,"B.F.":2,Conceptually:6,untenured:17,gabbing:8,"sleep-disorder":1,unwillingly:6,Technicians:65,"incentive-maximizing":1,Lappenberg:2,Idal:2,Rindos:2,correspondents:4,Tomash:2,"RJR-style":1,Tomaso:2,formerly:6,"pilot-training":3,"gut-Democratic":1,Hymowitz:2,intellectual:3,Krutchensky:2,Playback:2,Cosmetics:56,frightened:81,"Behind-the-scenes":1,snorts:20,magnetisms:4,catlike:1,"per-share":3,pitons:4,Cantoni:2,lurid:1,placeless:1,unknowable:1,"drought-stricken":1,garments:4,Convenience:129,powerfully:6,Survey:11,Bauer:2,massacred:32,obsequies:4,Melzi:2,tryin:21,"Semi-Tech":2,hikers:4,bellwether:22,unvarying:8,Ratners:2,Gaithersburg:2,Rayon:2,separated:391,sticks:18,sidestep:42,"all-woman":1,sticky:1,Conner:2,fashioned:54,stirrings:4,gowned:1,nonpareil:1,Jeffersonian:1,alerts:72,"half-witted":1,breakwaters:4,"co-insurance":3,ribbons:4,dies:72,diet:25,diem:147,Colloton:2,died:32,derail:42,Roxy:2,pessimists:4,Vattern:2,"Giants-Houston":2,Mitterrand:2,sobering:30,Changeable:1,mobilized:54,gunslingers:4,skip:42,jingling:8,"low-temperature":3,"option-based":1,"tourist-delivery":1,skim:392,Sneed:2,skid:393,Evening:11,deceitful:1,"paper-goods":4,Sylphide:2,Hopley:2,Broadcast:2,answered:32,phonemes:4,"better-than-average":1,string:25,PriMerit:2,"mass-reproduced":1,HUD:2,Explicit:1,geometrical:1,"pay-in-kind":3,Wildwood:2,Where:394,LANDOR:2,Recess:25,LAWYERS:123,staples:4,banished:54,"Health-care":1,miniaturized:17,Lesbian:2,banishes:20,humanistic:1,"two-timed":17,Lorlyn:2,Venn:2,recooned:16,extenuating:8,pregnancies:4,"frequent-flier":1,"trading-related":1,"less-liquid":12,Loesser:2,NESB:2,Grads:4,Macassar:2,ere:127,"overcoming...":102,photosensitive:1,leatherbound:3,Masterpiece:2,"half-forgotten":1,unrestricted:1,Quack:395,Damian:2,Sensenbrenner:2,Coward:2,Variations:65,Seaton:2,Uniondale:2,snagging:8,Leath:2,Brendle:2,"Theatre-by-the-Sea":2,"bids...":102,Ikegai:2,souring:21,crusading:8,Matrix:2,OBrion:2,Hammarskjold:2,professorships:4,Alkylate:2,Viss:2,pollute:39,"Bridgestone\\/Firestone":2,SunCor:2,Visx:2,scenarios:4,Guadalupes:28,Visa:11,balks:20,armchairs:4,brashest:51,"grow-or-die":1,Inhalation:2,McGonagle:2,"airline-acquisition":1,satirizes:20,Grisoni:2,subsistent:1,Leinonen:2,"performance-sharing":1,Brae:2,Brad:2,calorimetric:1,Bran:2,antismoking:1,Benelli:2,"balk.":33,veterinarians:4,Pallo:2,repressing:8,Children:56,deceased:338,Oatnut:2,Caring:8,"cost-saving":1,proscriptive:1,Baruch:2,Lamma:2,FOOTNOTE:2,pawning:8,coincident:1,Dutch:396,dimwits:4,"sell-order":1,normalize:39,strainin:8,rays:4,Dahmane:2,"slim-waisted":1,tilt:70,necklaces:4,ping:25,pine:78,chemical:22,till:397,HUH:2,skates:4,pins:18,Hubba:106,thermometric:1,Oher:2,whodunnit:106,designed:54,scalloped:1,"millionths-of-a-second":1,Hippophagique:2,Furs:2,Hendl:2,"twice-around":1,Fury:11,maybe:6,unobvious:1,carriers:4,Gaussian:1,fluent:1,provide:42,thorny:1,pickets:4,thorns:4,Feared:17,cute:1,"daily-wear":1,"free-buying":1,"Item-Categories":28,"Medicaid-covered":1,Walzer:2,cuts:208,CAHNERS:2,Utahans:28,"Merrill-Lynch":2,Budieshein:2,"Jean-Rene":2,Kozak:2,plagiarized:17,salves:4,"Iranian-backed":1,serenaded:54,"Wage-settlement":1,extirpated:17,alluvial:1,nouveau:1,finance:24,captivated:45,shatter:39,sooner:398,Usines:2,"state-sector":1,misinterpreters:4,"budget-sensitive":1,aspirations:4,Kestner:2,killed:54,ornraier:68,Bonniers:2,Stores:41,Storer:2,Wakeman:2,unwashed:1,"Hispanic-market":1,peasant:22,Southwestern:40,"stock-quote":1,"thin-margin":1,Amstel:2,"Borrioboola-Gha":2,Lux:64,Luz:2,Misconceptions:4,Luc:2,gurgling:8,aloof:97,Touted:17,Steamship:2,socialized:54,flintless:1,undulate:42,socializes:20,Ehrman:2,papers:4,Maureen:2,Mastering:8,nudes:4,unless:127,Siamese:2,gagging:8,democracies:4,"cholesterol-lowering":1,Whelen:2,"follow-on":1,Farrar:2,Deciding:8,Already:6,bared:16,widths:4,drizzling:30,listings:4,proffered:32,Haden:2,"foreign-entry-limit":1,rewrites:20,Windex:2,exotic:1,"water-borne":1,Braye:2,scandalized:32,Didion:2,"test-like":1,ISI:2,XIII:2,ISO:2,Anthong:2,ISC:2,Rotorex:2,"restaurant-industry":1,scandalizes:20,rivets:72,incompetently:6,vermeil:1,Pringle:2,plains:4,fellowships:4,Botts:2,helpings:4,Midsized:1,"less-than-alarming":1,massaged:17,accurately:6,SEMICONDUCTOR:2,videodisks:4,cartels:4,Maclaine:2,framers:4,gotta:399,LifeSpan:2,venture:205,commends:20,Autobiography:2,Jockey:2,stoicaly:6,"fifth-consecutive":1,"E.E.":2,plunge:24,"France-Germany":2,Arnolphe:2,backwoods:152,"Tollman-Hundley":2,"Dworkin-Cosell":2,personalized:14,pranks:4,"present-time":1,Ballhaus:2,Articles:65,Ravenscroft:2,"non-prescription":3,investigations:4,weakwilled:1,"anarchist-adventurers":4,Strawberry:2,indwelling:30,contrasts:18,conspicuous:1,Magarity:2,Teich:2,beachfront:22,refunds:4,fills:20,wreathed:17,Arrayed:17,"sixteen-year-old":1,Kasavubu:2,fille:64,massacres:4,Galena:2,Monastery:2,Blohm:2,trotted:32,obstructive:1,"Ltd.":11,Hoyvald:2,filed:54,contemporary:3,Graduate:129,Gato:2,Gati:2,Gate:11,lieder:3,"pluri-party":1,Payless:2,Stapleton:2,histories:4,Cafferarelli:2,nickels:4,Saltzburg:2,"anti-program-trading":1,savoring:8,underage:1,Leaves:4,spraying:21,framing:21,Toodle:2,Midway:305,"third-straight":1,reading:21,snorted:16,Yuli:2,Wycombe:2,ruddy:97,Malmesbury:2,Soeren:2,monarchists:4,"anti-conservation":1,innovative:1,Exhibits:28,Sigourney:2,unsecured:1,Hopefully:150,"cost-benefit":1,steadfast:97,Stena:2,Forgive:39,"performance-oriented":1,whereabouts:19,metabolites:4,rads:4,Ferrier:2,"Houston-Montgomery":2,checks:18,oversized:7,deletions:4,Barkley:2,killing:5,Competitors:4,Froelich:2,pillared:7,"top-rated":1,"pre-World-War":1,"Thirty-eighth":2,"cents-per-hour":1,indelicate:1,Tours:28,holders:4,decimals:4,forecasting:122,Elizabethan:66,Kuse:2,Whitlock:2,possessive:1,Zellerbach:2,Tigue:2,perpetuating:8,Corash:2,Sotnikov:2,quadrupling:55,arts:4,caricature:25,"all-too-familiar":1,localisms:4,shortening:55,constituencies:4,"trading-oriented":1,"business-communications":4,Allstates:2,Taxpayers:56,Picus:2,spills:18,Selwyn:2,those:246,Minoru:2,Minors:4,disconnected:14,Discounts:4,Malmo:2,Fixture:2,"aircraft-engine":3,"client-service":3,Fallick:2,deformities:4,awakened:54,endothelial:1,Basketball:11,"corn-buying":1,Florian:2,endowed:45,rubbing:55,undertones:4,"camp-made":1,kindnesses:4,middle:22,Koyo:2,ferns:4,Puffing:8,"family-run":1,wimping:8,Hoyt:2,insofar:400,same:1,intermediary:22,autonomously:6,Peabody:2,gaspingly:6,Leroy:2,Message:47,devours:20,munch:39,disincentives:4,Canticle:2,Defaults:4,Smeal:2,Mortars:4,exluding:8,discernable:1,intermittent:1,Tamerlane:2,DOONESBURY:2,Phibro:2,Rubega:2,imprint:63,Hiss:2,adrenal:3,Chavis:2,dipped:32,Genelabs:28,Rattner:2,Carmody:2,vivify:39,"Jeep\\/Eagle":2,Ethics:401,Banquet:11,liken:33,presentable:1,Carat:2,"Concert-Disc":2,admitting:8,dimensioning:13,"F.S.L.I.C":2,Moosilauke:2,blankets:18,noncompetitively:6,nosy:1,CPTs:4,Artfully:6,nose:25,neuronal:1,Pathology:2,Enron:2,Dress:59,specifies:20,Democracy:11,alternated:32,Ned:2,Neb:2,Nec:64,specified:81,Nev:2,New:272,Net:117,"car-dealers":4,gross:104,Intermoda:2,Lempesis:2,"PS\\/2":2,Gogo:2,Valspar:2,Artie:2,Gogh:2,Barokocy:2,buttressed:17,Lycidas:2,Doritos:4,underwriters:402,cliques:4,thefts:4,broken:14,Kyne:2,buttresses:18,"highest-priced":51,squarely:6,Husky:40,roaming:55,pettinesses:4,"California-bashing":1,tease:182,othe:1,Kalin:2,arty:1,MANY:1,organizers:4,"check-processing":3,Dimensions:130,Functions:28,Contacts:28,"not-strictly-practical":1,"then-current":1,Xydis:2,Kwasha:2,"theories...":102,Baring:2,"state-private":1,Larsson:2,Conductor:47,daubed:16,Nest:2,Greiner:2,brute:22,fates:4,Suffering:8,Nesi:2,Luth:2,"two-tiered":1,Counsel:11,mornings:4,countersuing:8,proportionately:6,Transition:47,"DIAL-A-PIANO-LESSON":2,"anti-infectives":4,wiping:8,collosal:1,staircases:4,Walker:2,Gutfreund:2,Castle:11,"municipally-sponsored":1,belated:1,"bomb-proof":1,"Cigarette-vending":1,"HUD-supervised":1,"co-chief":3,anemated:17,Nouvelle:2,"sudden-end":1,SHOULD:190,solvents:4,Commissioning:8,undereducated:1,Blues:41,Allgemeine:2,COFFEE:47,TuHulHulZote:2,leaked:54,croons:20,VISX:2,VISA:2,lifetime:22,"go-betweens":4,Nieman:2,PKbanken:2,Miringoff:2,bragging:55,unaccustomed:1,Drilling:11,"definition-specialization":3,students:4,Vadehra:2,Balanchine:2,deriving:8,obsesses:20,Houten:2,elastomers:4,tackle:95,revolve:42,remote:1,Restructure:33,Intangible:1,"Secretary-designate":2,"home-health-care":1,"high-balance":1,nutrient:1,"counter-trend":1,starting:5,bottoming:8,growling:8,Trish:2,Gallitano:2,Voute:2,suburban:1,alerting:8,Wayne:2,"half-owned":1,"b-reflects":20,Euler:2,reluctant:1,Transcaucasian:1,Fremont:2,investigational:1,Bologna:11,Fulghum:2,selloffs:4,Beame:2,shifters:4,rambunctious:1,Vehicles:65,overdone:17,Holliston:2,scour:149,Ventured:2,extractors:4,benevolent:1,Course:2,Rector:2,mistaking:55,incompatibles:4,Surety:2,Buds:28,fauteuil:64,titled:81,MacGregor:2,"JSP-supported":1,Benzell:2,knitted:45,titles:4,Budd:2,Unam:2,Wycoff:2,CHECKUPS:4,Liberties:111,"high-profit-margin":1,Ellington:2,sociologically:6,Grievances:74,Eskandarian:2,unreported:1,HENRI:2,pupated:17,K:403,venerated:17,HENRY:2,biweekly:3,drubbed:17,fatter:12,search:44,"feminine-care":1,Pumwani:2,"emergency-claims":4,Nissei:2,fatten:42,pathological:1,Devin:2,Devil:11,Scriptures:41,bathe:39,Warriors:74,transit:22,seceded:17,debugged:17,Yaddo:2,establish:42,barked:16,"issues-such":1,Conoco:2,"Hard-surface":1,rotogravures:4,"water-holding":1,Transfer:47,OUR:404,achieving:8,OUT:324,BOTH:246,Glamorous:1,Boeing:116,"career-bound":1,FEDERAL:40,brisk:1,dammit:405,Chukchi:2,Racal:2,maharajahs:4,Schwartau:2,"income-paying":1,intercepted:32,Comany:2,clergy:19,Tagalog:2,"ex-jazz":1,compare:95,buttress:39,ionizing:8,socal:1,AHSC:2,"gray-looking":1,wisely:6,"Ex-Presidents":4,Carpenter:2,Stacy:2,Cabanne:2,Balkanize:39,Stack:2,heartwarmingly:6,galactic:1,charms:18,petite:1,servicers:4,"capital-intensive":1,"slangy-confidential":1,bouffant:3,petits:145,Jepson:2,Sophie:2,Cadbury:2,bloom:24,Sophia:2,"coffin-sized":1,coax:39,unreservedly:6,coat:25,cemeteries:4,Prawiro:2,What:406,finalized:54,"U.K.":129,Pearlman:2,Intermark:2,"M\\/I":2,clumsily:6,Wham:106,Whah:293,Ranking:21,Pinola:2,Morehouse:2,render:42,Leyland:2,Marietta:2,clamor:174,bereft:7,infantrymen:4,"time-temperature":3,Gullah:2,minting:8,Dorcas:2,walls:4,Hansmann:2,Seelenfreund:2,detach:39,Mogadishu:2,Afrique:2,Dist:2,Chung:2,token:3,Kronish:2,"under-owned":1,Dish:2,McDonnell:11,"upper-echelon":1,clamp:63,"paper-company":3,clams:4,"low-pass":1,"securities-laws":4,dullish:1,implicated:17,Granville:2,Pattenden:2,allusions:4,"sub-minimum":1,ides:4,initiatives:18,reinstating:8,Lawyers:56,HOLDINGS:28,Popkin:2,numbingly:6,Outlet:2,avenge:39,Rocketdyne:2,Ukraine:2,Rosalynn:2,stridently:6,Parsons:2,Anytime:6,Inacio:2,"Chin-Use":39,Fenerty:2,Magoon:2,Capwell:2,Squeezed:17,Pelham:2,Yankees:46,"junk-bond-financed":1,Raines:2,Rainer:2,"Tasaki-Riger":2,settlers:4,omit:42,Nazzella:2,Gettleman:2,Homeowner:2,Inna:2,Kieslowski:2,McKinley:2,Pullman:2,CONVICTS:20,"soot-stained":1,bullies:72,Officers:407,smaller:136,Salerno:2,Gilbert:2,unfunnily:6,Lipton:2,"Saltis-McErlane":2,"energy-hungry":1,Slight:1,totally:6,entreated:16,Pediatric:2,beardown:1,"matching-fund":1,Oberreit:2,ravings:4,madmen:4,"three-fifths":1,pickups:4,"Philco-sponsored":1,workbenches:4,interactive:1,Jurong:2,Waterville:2,plead:42,Schmetterer:2,Somerset:2,collateralized:7,Kozloff:2,schizoid:1,Virginia:2,extracted:54,Joffrey:2,listeria:64,RPM:2,Beefsteak:2,Hanwa:2,equipping:55,"medium-sized":1,depths:4,Communications:41,"self-correcting":1,Anatomically:6,pocketing:8,squelched:17,handscrolls:4,loners:4,Encouraging:8,squelch:33,ASDIC:2,Armageddon:47,Regime:2,lumping:8,Helms:2,antisubmarine:1,Bixby:2,"tax-backed":1,Fiechter:2,persuasively:6,"mother-naked":1,Sensor:2,"goose-stepping":8,gangs:4,philanthropists:4,Takihyo:2,"J.T.":2,anachronisms:4,freedoms:4,generators:4,Whitlow:2,cysts:4,Marry:2,"Barre-Montpelier":2,Marra:2,promptings:4,Reich:2,Kingdome:2,slingers:4,cumulate:39,"real-life":1,"twiggy-looking":1,Smartt:2,Hebrews:28,reputable:1,"Op.":11,McGurk:2,tended:112,Wright:2,individual:3,tender:205,Tuchman:2,enveloped:17,Collaborative:2,multiparty:22,manumitted:17,TCU:2,TCR:2,halves:18,Plunking:8,envelopes:4,TCI:2,TCF:2,Isaiah:2,"technical-ladder":1,interfaces:4,"constitutional-law":3,analogues:4,overvalued:212,trespassed:54,"cleaned-up":1,Belshazzar:2,Preambles:4,"understand\\/adopt":39,combustibles:4,"mid-February":2,Grieco:2,"PW4060":2,Rossi:2,"Krauss-Maffei":2,Jenner:2,Sidney:2,Counselors:28,Ladehoff:2,Payline:2,suppressing:8,"seven-inning":1,create:42,TROUBLES:4,"Ever-more":6,Lousie:2,"fast-frozen":1,Senora:2,Lubbock:2,Ritchie:2,hopefuls:4,Servant:2,flavorful:1,Casino:11,"pre-1933":1,understand:42,realms:4,Dycom:2,Pozen:2,"Sino-British":1,Ding:2,unify:39,enchanted:14,Dino:2,bill:24,bilk:39,Salpetriere:2,Dinh:2,prolusions:4,Defending:8,"non-Dow":2,Incorrect:1,vaults:4,shoddy:1,cadge:33,tribesmen:4,arenas:4,Monarque:64,saline:22,headless:1,Zimmer:2,leafed:16,Carrying:8,copying:21,Martinique:2,dishonouring:8,"F.D.":2,"less-hurried":1,Barksdale:2,Motor:11,itch:63,praising:8,"Sinhalese-dominated":1,"most-obvious":1,citadels:4,"Bermuda-based":1,"information-display":3,sandals:4,Coffin:2,knowed:17,"grown-up":3,Figura:2,Langbo:2,Figure:169,percentages:4,"high-tech-sounding":1,y:11,revising:8,absolving:8,Considering:8,echoing:8,makeshifts:4,Bremen:2,Cycads:4,Chojnowski:2,Sheckley:2,zodiacal:1,diversions:4,Overstreet:2,excites:20,shouting:55,bridal:1,Alida:2,Scholars:65,"co-managed":81,matters:18,Enhance:2,Sigoloff:2,Reedy:2,Orthodoxy:2,"gut-flattening":1,friezes:4,Rawlins:2,"protein-restricted":1,Chosen:2,peddlers:4,examples:4,"quarter-point":22,"fee-shifting":1,ferroelectric:1,Bretz:2,aerobic:1,Brett:2,per:408,pen:25,Simplex:1,"best-performing":186,peg:256,anarchic:1,"F18s":4,chartists:4,Roulac:2,"all-night":1,"I.N.D.":2,Bledsoe:2,chanting:55,Elsie:2,chargeable:1,defrayed:17,engorged:17,Banfield:2,Lovingood:2,robbers:4,conciliatory:1,beans:4,Privately:150,"industrial-gas":1,"C.A.I.P.":2,Datsun:2,reckonings:4,Helps:20,STUDIES:4,uncaused:1,"meet...":102,Tbilisi:2,Sleepwalkers:4,forward:173,Punjab:2,doctored:17,Mikulski:2,weaker:136,interagency:22,nodular:1,"re-enacting":8,juxtaposed:17,dueled:16,juxtaposes:20,"brain-damaged":1,"pre-sale":1,Debban:2,Doing:116,Soon:6,"floppy-tie":1,Kuhlke:2,Ohio:2,unequally:6,MVP:2,Accident:11,"life-like":1,Jenco:2,spoonfuls:4,omens:4,"revenue-law":3,"semi-catatonic":1,Versailles:2,TXO:2,fogged:1,Sumarlin:2,swamp:25,Rieke:2,plugged:54,bronchioles:4,Fiberglas:10,excrete:39,Andrews:2,Ebaugh:2,transferors:4,Cardenas:2,"seventh-biggest":1,Tonkin:2,Intercede:39,aggregates:4,fished:17,fervently:6,Branagan:2,oceanthermal:1,retranslated:17,Zapfel:2,amused:81,Scots:56,Scott:2,Worldly:150,boathouses:4,Nordine:2,"out-of-bounds":1,Haldeman:2,Intrepid:2,dogged:81,Meagher:2,"front-page":3,dioxins:4,Saint:2,Isle:2,Islander:2,Someone:47,waterflows:4,Weir:2,Orly:2,granular:1,Wein:2,Weil:2,Ernesto:2,Hempel:2,inject:42,Bridewell:2,confounding:8,Berets:28,Telesis:2,Dirion:2,resonant:1,subservient:1,samovar:147,Brumbaugh:2,burlesques:4,Abbot:2,mobilize:39,Cesar:2,Select:59,unpublishable:1,Turkey:11,ovens:4,hardening:8,educators:4,tinny:3,Smalling:2,bloodshot:1,agricolas:64,"high-sulfur":1,WHAT:409,WHAS:2,campuses:4,"Machinist-union":2,Johnnie:2,Supplemental:129,Weakest:51,raccoons:4,Seize:59,Biscuit:2,Backstage:6,nonexistent:1,intercept:24,"puffed-up":1,Cheil:2,Unida:2,jockeys:4,"Jeep-brand":1,Unocal:40,Petrone:2,Storeria:2,DISAPPOINTMENTS:4,resurrect:42,compellingly:6,Papandreou:2,"four-family":1,Conmel:2,"fourth-quarter":3,Kapadia:2,Chancellorsville:2,Blossom:2,SMU:2,"Interstate\\/Johnson":2,facades:4,Manila:2,"ups-and-downs":4,oval:3,resolutions:4,SMD:2,"name-dropping":47,Status:47,"Barcelona-based":1,Statue:2,Declaration:11,McCaughey:2,Galway:2,Vasady:2,"Single-subject":1,Kattus:2,ashamed:1,informally:6,Bulletin:11,"misty-eyed":1,grandmotherly:1,RIGHTS:4,Period:47,nullified:54,"do-everything":1,celiac:1,Inconsistent:1,Impressions:4,"steel-related":1,Shining:116,"pool-care":1,CONSULTING:2,whitehaired:1,Comroe:2,Goldenthal:2,"flour-milling":3,"second-year":1,effectively:6,Galata:2,Starks:2,spruce:25,"debt-heavy":1,regions:4,druther:39,fete:39,Graciela:2,Ridgway:2,Fryar:2,aft:34,carvers:4,Cliff:2,Technical:40,annexed:16,"market-research":22,"frenzy-free":1,UKRAINIANS:4,"Japanese-South":2,"cost-finding":1,Gazing:8,Freightways:74,primers:4,italics:4,Livestock:47,Healy:2,MacDowell:2,Resist:39,cuvees:4,"retail-banking":3,fallback:22,Hausman:2,HUGO:2,deliberative:1,Dunbar:2,"in-house":34,Pherwani:2,hugged:16,lands:18,"Shangri-La":2,"bow-tied":1,Hermann:2,"American-trained":1,Hindle:2,"band-wagon":1,sic:410,Schedule:2,lampposts:4,acres:4,resorting:8,"farm-trade":1,"Presbyterian-St":309,Pembridge:2,unnerved:187,Stricken:2,phagocytes:4,repassed:17,"Hard-hitting":1,GMAC:2,institutionally:6,doffing:8,Churpek:2,Adobe:2,Unemployment:47,ahdawam:106,"Baltimore-Washington":2,Uyl:2,slipping:8,vivified:17,LaRosa:2,reintroducing:8,Previous:1,Ghost:47,Whaley:2,thwart:411,transported:54,Whaler:2,programmed:14,"Sino-Soviet":1,Mercers:28,programmes:4,"most-valuable":1,Rotterdam:2,Westland:2,defend:42,Sussex:2,Tut:2,"magic-practicing":1,opining:8,electronics:91,red:3,Magwitch:2,Aitken:2,retrieved:54,consortiums:4,soreheads:4,Theodor:2,chattily:6,EXPECT:33,trends:4,Buffalo:11,cured:54,"Multi-employer":1,cures:18,"taxable-fund":1,Operators:113,strippers:4,STEEL:2,plastics:4,"dusty-green":1,embarrassed:45,hurdle:25,Birdwood:2,rusticated:17,afield:6,"Hans-Ulrich":2,splotched:1,"data-processing":22,"non-Christians":111,ripples:4,realistically:6,rippled:16,wistfully:6,"less-traveled":1,Warhol:2,Kilty:2,Deacon:2,environmental:1,sporadically:6,"absent-minded":1,"Battle-tested":1,Pesaro:2,"non-executive":1,slack:412,Sabha:2,"Low-flying":1,splotches:4,MATTEL:2,boyish:1,Engineer:2,Moiseyeva:2,Lech:2,"two-year-long":1,patting:8,discussions:4,Rudnick:2,thyroidal:1,handsets:4,"X-linked":1,Nugent:2,lawmkers:4,"safety-related":1,"debt-reduction":22,KnowledgeWare:2,Airways:111,Goldman:2,Hitching:8,Flem:2,"program-related":1,Flea:2,Flee:33,Nikes:28,"HOME-SALE":1,hazel:1,Cheri:2,"tartan-patterned":1,WACS:28,Matteson:2,"tax-writing":1,"W.E.":2,heartening:1,Illustrated:2,Mohamad:2,discursive:1,absurd:1,trobles:4,planks:4,Sansui:2,Irrawaddy:2,overhangs:4,Straighten:39,rusted:1,Unconscionable:1,debacles:4,hydroelectric:1,Yoshimoto:2,anthropic:1,Complaints:4,SOUTHERN:2,"Sgt.":2,chairmanships:4,Reversal:2,"bat-roost":1,thrived:32,Matsui:2,"can..":190,SAVINGS:74,gardenettes:4,timing:21,thrives:20,areas:413,crabs:4,"Back-of-the-envelope":1,"king-sized":1,excreted:17,"Pistol-whipping":127,Oriental:66,dissolves:20,"Ca.":2,farthest:380,heightens:20,subsidizing:8,Symes:2,yearning:21,scholastic:3,refrained:32,Talmadge:2,Boil:39,kinesthetically:6,Dnieper:2,exploited:54,"respiration...":102,cheaters:4,"ex-reporters":4,purses:4,pursed:16,July:2,Avedisian:2,grumble:149,Sabinson:2,jeopardizing:8,propulsions:4,Axa:2,Axe:2,Gagarin:2,"professional-design":1,optional:1,Crary:2,Juergen:2,instant:22,robberies:4,provincial:1,Olshan:2,predispose:42,dBase:2,conquered:54,passing:5,glorious:1,UMW:2,alphabetically:6,unventilated:17,Savannakhet:2,Magpie:2,seashores:4,laugh:24,"Run-down":1,Weird:66,instigators:4,piecewise:6,Lithuanian:1,Salmon:2,"Electro-Optical":2,Corot:2,perennially:6,asymmetrically:6,arises:20,perplexed:7,"America\\/International":2,arisen:17,atmospheric:1,censuses:4,contradicted:32,Appignanesi:2,Blockbuster:2,"Chicago-centric":1,Jacobs:2,likable:1,prosy:1,Jacoby:2,"paper-manufacturing":1,"CD-type":1,Bellcore:2,Wrongs:4,haunches:4,portray:42,Cristiani:2,untoward:1,progressing:8,indistinguishable:1,Car:11,shuttle:22,Herzfeld:2,Orden:2,Lombarde:2,material:22,Lombardo:2,Dusseldorf:2,Lombardi:2,bullying:8,assessing:8,flew:16,"ante-bellum":390,Order:11,besmirch:39,uncombable:1,center:414,"around-the-clock":1,roughhewn:1,overshadowed:54,Globally:6,retiring:30,supercharged:1,oops:106,publicize:39,restuarant:1,fixated:17,reupholstering:8,Ragsdale:2,Sirot:2,"super-absorbent":1,Seaman:305,"Abscam-indicted":1,books:415,surpass:42,seats:18,Scraps:4,anye:1,raves:20,field:139,"area-wide":1,Kamehameha:2,bluebonnets:4,bench:25,adminstrative:1,"foreign-policy":22,raved:16,"Comparable-store":1,Aqazadeh:2,Greenwood:2,tests:18,haltingly:6,worlds:4,testy:1,repulsions:4,condescending:13,Mennen:2,Tarantino:2,incompletely:6,"newly-appointed":1,porous:1,commencements:4,"Darvocet-N":2,corporativists:4,Laundered:17,BVI:2,works:18,lucidly:6,imprints:4,"graphic-arts":4,mushroomed:54,Mineola:2,majeure:80,deviants:4,Editor:11,legislated:54,Mukherjee:2,"job-hunters":4,whined:16,Hardball:2,Mike:2,est:64,encouraging:30,obsessed:14,dunes:4,"biotechnology-based":1,"cents-off":1,Wenger:2,kidnappers:4,panes:4,"lumpen-intellectual":1,manifesting:8,"electrical-safety":1,Glenham:2,Newarker:2,Lousy:1,snapped:112,ORDERED:17,"well-informed":1,InterVoice:2,"E.M.":2,"radio-controlled":1,distilling:55,smartly:6,"sea-transport":1,"comet-like":1,Rucellai:2,Financially:6,"large-deposit":1,Questions:283,Bessie:2,baseless:1,"Law-enforcement":3,rendered:54,varitinted:1,"State-Local":2,"public-health":3,rhythmical:1,billions:4,lacked:32,weekends:4,eine:64,"calorie-heavy":1,"earnings-driven":1,enticed:16,"Owens-Corning":2,"growth-controlling":1,AGAIN:6,buy:416,"co-anchored":17,Der:2,Losses:123,Paperboard:11,but:417,shute:39,Dei:87,Del:2,Den:2,Deo:2,"first-floor":3,Deb:2,Dec:2,Dee:2,Def:2,embargo:25,misty:1,princes:4,Salant:2,frugally:6,breweries:4,Albertine:2,Salang:2,minutes:4,moralizing:30,windless:1,airmen:4,Meantime:150,"wide-eyed":1,Hofstad:2,Dunkirk:2,Euromarket:2,Marches:28,Shvets:2,virtual:1,shearing:21,Worker:2,Altogether:6,Phase:47,"I...":102,Aca:2,"greater-fool":200,Annihilate:39,Ace:11,brainlessly:6,Jerebohms:2,"glacier-like":1,Act:11,Zhitkov:2,McFall:2,Scotchgard:2,"solution-type":1,contraceptive:3,deluxe:1,Ashurst:2,"test-preparation":1,winders:4,AYER:2,Scandal:47,augmented:81,"low-load":1,Pacemakers:28,"state-supported":1,represent:42,"twice-extended":1,revoking:8,Uhl:2,poorest:51,Grumman:2,Additionally:6,"non-consolidated":1,pride:78,Merabank:2,placated:17,Unpopular:1,nonresident:1,Pilgrim:11,Pilgrin:2,Industry:47,Metzler:2,every:246,softened:112,upstream:218,Durenberger:2,Industri:2,Steak:2,Presence:2,Archipelago:2,"Hanover-Misty":2,Hemphill:2,"make-work":3,MacNamara:2,joggers:4,Batchelor:2,Shareholders:123,picketed:32,cooperative:3,"Arab-Israeli":1,"Express-Buick":2,Sokolov:2,weddings:4,estimates:18,Rash:2,crocketed:1,persuade:42,Cosgrove:2,freehand:97,estimated:81,Burroughs:2,Obsolescence:2,allowances:4,"third-class":1,Continuous:1,sheeted:1,"morbid-minded":1,Hachuel:2,smidgins:4,conduct:24,streetcars:4,injections:4,pats:4,Indonesia:11,bearishly:6,Holiness:47,stared:32,"market-oriented":1,transmits:20,Ferraro:2,Ferrari:2,contentions:4,bulks:20,stares:4,Ferrara:2,reversals:4,Herwig:2,Coddington:2,auction:25,Hoof:2,proportioned:1,Pieces:113,Engaging:8,characterizing:8,monogamous:1,"pay-back":1,vacations:4,Idrissa:2,"tie-in":22,touchdowns:4,visibly:6,visible:1,Kids:130,Leech:2,Minority:11,Housed:17,discrepancies:4,Houses:4,"government-mandated":1,Interfunding:2,Grimesby:2,acceded:32,microwavable:1,corporis:64,casualties:4,Stanger:2,mg:22,ma:147,Alternatives:2,"WBBM-TV":2,Bramalea:2,my:418,quarrel:25,mnemonic:1,Sark:2,"high-sounding":1,"then-Treasury":66,Gutfreunds:28,Motel:2,Sara:2,Sidewalks:28,DJS:2,Sary:2,Mardis:2,"predicting-machines":4,end:419,Fundamentals:57,idosyncratic:1,frescos:4,Jeep:47,Kreisler:2,"that...":102,"six-thirty":1,charging:55,Handelsbanken:2,Essentially:6,VCRs:4,unanimously:6,"unit-making":8,SMART:1,Maxwell:2,arbitrate:39,Praver:2,enervating:8,scout:25,Cattle:123,Seidler:2,Wintour:2,imbued:17,Selected:420,"non-identity":1,"half-brothers":4,reformers:4,fads:4,Dahl:2,Leonid:2,canto:147,stingrays:4,expectations:4,Keats:2,Keath:2,"egotist...":102,fade:95,Lauber:2,"tall-oil":1,KRAFT:2,"Bristol-Myers":2,"cost-containment":22,Sturdy:1,Gotta:216,"carrier-based":1,roost:63,disparaged:32,Geffen:2,Injun:2,Odysseus:2,"Russian-dominated":1,DBL:2,Laguerre:2,DBC:2,mothers:4,chuck:25,Sting:2,Moritz:2,filling:55,yakking:8,Morita:2,skeletal:1,DBS:2,woolgather:39,lasting:30,Lanese:2,signing:55,"Messerschmitt-Boelkow":2,Hodge:2,fussing:8,magnets:4,Hippocrates:113,Katonah:2,vade:64,"market-opening":1,"co-produce":39,"two-hour":1,"metal-processing":1,Imprimis:2,"Telephone-operations":4,got:421,Telecussed:16,scopes:4,Rugged:1,"Circus-Circus":2,hand:422,AFP:2,glisten:44,periodontal:1,inexpensive:1,Mountain:11,priorities:4,labored:112,Embassy:11,Sisulu:2,cooperating:8,Pharmics:2,Nicolas:2,already:6,Working:423,Leverett:2,Incredulous:1,selfless:1,sober:1,categorize:39,Overlords:28,Flaherty:2,solicitations:4,"shareholder-owned":1,"physician-reimbursement":1,euphoric:1,"six-time":1,ballistic:1,Wolstenholme:2,analgesic:3,ASSOCIATION:11,Fur:11,servo:22,Seldom:6,abates:20,took:16,Londontowne:2,Patterns:4,Sunset:2,dBASE:2,Fun:2,abated:54,nonpartisan:1,whereby:293,Features:28,"near-Communists":4,"foul-smelling":1,unsentimental:1,"more-attractive":1,cowhands:4,"steady-Eddies":4,Pocasset:2,Adele:2,lifesize:1,Dimly:6,fashion:25,Dying:116,overleveraging:8,"Hanover-Lucy":2,talking:424,staggeringly:6,"conditioning...":102,Etsuro:2,"paid-in":1,doughty:1,Jasmine:2,balling:8,"R.V.":2,localities:4,"mid-twentieth":1,"hot-dog":1,Absent:425,"near-identical":1,CWP:2,Collective:2,humbly:6,Priestess:2,rumble:78,Communistic:1,centering:55,tabling:5,prostitute:25,peers:18,romantick:1,epistolatory:1,"anti-leak":1,Anaconda:47,silencing:8,Collateralized:2,"special-purpose":1,reorganize:39,arrayed:17,McDonough:2,EDISON:2,"all-lesbian":1,studiously:6,snickers:4,satiric:1,Furniture:11,rinsing:21,Soifer:2,Manute:2,novelists:4,blinking:426,baffle:39,Gingl:2,Weymouth:2,demagogues:4,Armco:2,intersperses:20,"Watson-Watt":2,"spice-laden":1,Raimer:2,Disabled:427,interspersed:17,Rodrigo:2,Guterman:2,Burritt:2,thwarting:8,strainers:4,"lay-sisters":4,demented:7,Galax:2,taxied:16,Braitman:2,discriminating:30,Herron:2,amalgamated:17,postride:1,interviewing:55,luminescent:1,loopaholics:4,Clarke:2,Statistique:2,Shuxian:2,Roderick:2,volumetric:1,Unificationism:2,Impco:2,Unificationist:1,byways:4,flowering:21,improve:42,Danco:2,"slow-spending":1,Dance:11,"make...":102,layered:17,Kaye:2,"Supra-Expressionism":2,towels:4,BSPP:2,"double-breasted":1,Destler:2,unfurled:17,Malacca:2,stirringly:6,foully:6,Chance:47,trampled:45,diskettes:4,fantasies:4,Hucksters:2,"metal-coil":1,snips:4,"automotive-lighting":3,usurped:17,"oil-spill":22,Budlong:2,"auto-industry":22,dissatisfactions:4,Mahone:2,lessen:39,Medibank:2,lesser:136,Domingos:2,teachers:4,"office-furniture":1,inexplicit:1,Gross:40,Eurodebentures:4,nightgowns:4,usable:1,Simms:2,Attridge:2,"operator-services":4,Cramer:2,"four-page-a-minute":1,Stahl:2,wound:428,yahoos:4,BOGGS:2,RECORD:2,complex:3,Vieux:2,"CBS-owned":1,"Fla.-based":1,Investors:92,Minkow:2,pampering:8,twiddling:8,Spectra:123,constricting:8,"laissez-faire":390,Pedestrian:2,Hilton:2,vilifies:20,Ethyl:2,"highway-construction":1,feuded:16,Williamsburg:2,APPLIANCES:28,uncooperative:1,Herder:2,Intercepting:8,Raghib:2,Wing:2,Wind:11,hairless:1,interprets:20,"Guttman-type":1,actresses:4,"quake-hit":1,D:429,Tichy:2,Gabriel:2,"timber-dependent":1,Content:1,reapportion:33,Rudolf:2,apart:430,"anti-Newtonian":1,intertwined:14,clearheaded:1,remanding:8,Lichtenstein:2,"M.I.M.":2,anciently:6,"all-Negro":1,Educate:39,overnighters:4,reunifed:17,sanction:24,gangbusters:4,Hillsborough:2,Nippon:2,untried:1,meters:91,precautions:4,Harrigan:2,embodied:54,"non-commissioned":1,Xanax:2,RATTLED:16,reinvest:42,Looming:8,prejudicial:1,cooped:338,Repeatedly:6,Brezhnev:2,Implores:20,"cash-laden":1,ironclad:1,erodes:20,Tegal:2,"multi-agency":3,"Oakland-Alameda":2,CJS:2,"lookee-loos":4,landowners:4,nontransferable:1,"agriculture-chemicals":4,Leobardo:2,shards:4,Kafka:2,catkins:4,Lucretia:2,cooled:81,"self-splicing":1,Foss:2,Novacor:2,"scandal-plagued":1,paddies:4,primitive:1,Guthrie:2,froze:32,preambles:4,Lebans:2,tapings:4,taffy:1,Survive:39,jeunes:64,Dodger:11,interlopers:4,lags:72,Baldy:2,unpretentious:1,"grain-trading":1,"anti-racketeering":1,"full-clad":1,head:414,medium:22,Sundays:41,preschoolers:4,heal:39,"world-leading":1,Suckow:2,Liffe:2,heat:44,hear:42,Ewe:2,"free-spirited":1,nodded:32,counsel:44,Uruguay:2,compositional:1,"high-powered":1,bargain:25,danseur:64,adore:149,"advertising-conscious":1,"co-opted":17,mustering:8,Electronic:40,southernmost:1,adorn:42,sinful:1,"one-thousand-zloty":1,"non-diva-like":1,simulations:4,pigpens:4,"M8.7sp":2,Nauman:2,Chiefs:111,willingly:6,Poo:2,Monteath:2,isomers:4,"futures-related":1,incestuous:1,EST:431,"new-loan":1,ESP:2,Heebner:2,CyCare:2,ESB:2,reassuringly:6,Unconscious:2,withhold:42,Denlea:2,oeufs:64,backward:218,Contributions:4,Suvorov:2,forgeries:4,counseling:21,Choral:2,brokerages:4,MasterCards:4,Iacocca:2,fusing:55,Buddy:2,Cilluffo:2,"S.D.":2,contemplating:8,flowered:103,trustees:4,Waverly:2,sceptical:1,Rosoff:2,Kafaroff:2,Haole:64,"formed-tooth":1,broadly:6,Countries:41,thawed:17,hattes:4,Hargrave:2,"drug-abuse":3,roving:8,"eighteen-year-old":1,Indebted:1,denounced:32,Muratore:2,Wollman:2,denounces:20,"money-market":3,Hsieh:2,Rederi:2,inland:218,"off-off-Broadway":40,"nonresidential-contracting":1,Diebold:2,Durakon:2,bake:82,Jana:2,allout:1,Theatre:2,"El-Abed":2,manikins:4,"up-market":1,Reeves:113,Mirek:2,retroviral:1,Maneret:2,eliminations:4,Trackdown:2,Annuity:2,"plant-location":1,Khomeini:2,dissipates:20,meteorites:4,Liechtenstein:2,"Jan.":128,groups:4,dissipated:54,"lonely-hearts":4,"Rocket-powered":1,unidentified:1,pearly:1,PEOPLE:4,pearls:4,culpa:64,ratable:1,"aircraft-engine-maintenance":1,kerygma:64,abounded:16,Talmud:2,Raikin:2,"patronage-free":1,morals:4,Catholicism:2,Interlake:2,AuCoin:2,"Trend-following":1,Brissette:2,Vasso:2,Hungarian:66,Radzymin:2,criteria:4,Gillett:2,Affidavits:4,"blacked-out":1,Gintel:2,Vivacious:1,chocolate:22,Gesualdo:2,Groundwater:2,Push:44,Carsten:2,Crystallographic:66,"trick...":102,districts:4,predominating:8,slightest:51,Gerolamo:2,corrupted:17,parings:4,amazons:4,newsletters:4,"sky-tapping":1,stroke:25,Lenwood:2,Manderbach:2,requirements:4,Marketing:432,Cartoonists:2,minivans:4,innumerable:1,Considered:17,Flyer:2,Gallagher:2,"Wage-price":1,speaks:20,Elkhorn:2,irrational:1,rites:4,motorists:4,Dinosaur:2,outlandish:1,tipped:32,evoke:42,nannies:4,Powers:2,Hashimoto:2,reposition:39,"flat-bottomed":1,misbegotten:1,compressing:8,"fire-control":1,persons:4,Asleep:6,glancing:30,refund:25,Feiner:2,undervalued:45,fangs:4,accolades:4,"in-store":1,worship:44,blocked:81,segregationists:4,rebalancing:8,Qualls:2,Sierras:28,"bead-like":1,Falco:2,coordinated:45,Factories:57,"quick-tempered":1,sparing:30,Highness:2,Turtles:28,"M.T.":2,appraised:17,HRT:2,radicals:4,gourmet:22,warranted:81,HRH:2,HRE:2,feathered:7,HRB:2,Clams:4,Josephus:2,Bolduc:2,Mentum:2,belts:18,slumps:72,Gotterdammerung:2,"fourth-level":1,"fair-trade-related":1,"lower-paid":1,Campaigning:8,Gilroy:2,Heathrow:2,Airbus:2,weighted:103,nettlesome:1,"weight-control":1,pillaged:16,blacked:17,"Britain-U.S.":1,Forks:4,reckons:20,"quake-torn":1,sustains:20,obfuscations:4,Shakespearian:1,Grabbing:8,disposables:4,someplace:43,Ciporkin:2,Bodner:2,"more-natural":1,Coudersport:2,ENG:2,Keilin:2,ENI:2,Deppy:2,obituaries:4,"light-headed":1,"half-moons":4,explorers:4,Leuffer:2,Julian:2,Delray:2,"Glass-Steagall":2,teammates:4,deprogrammings:4,Industrialistes:2,FDA:2,Expenditures:57,"mind-altering":1,Slobodin:2,Nairne:2,sovereign:202,soaring:30,Scripp:2,Forrestal:2,Geographical:1,disinterested:1,surveys:18,Johan:2,"R-Bergen":2,Espagnol:2,Parkways:74,circa:6,Dove:47,Biosite:2,"interest-rate-sensitive":1,hug:44,Whitten:2,tempers:4,greatcoated:1,huh:106,inexpressible:1,inexpressibly:6,Cortex:2,"ill-advised":1,circulates:20,Cortes:2,petrified:7,DeLay:2,demythologizing:8,tawdry:1,Tryon:2,diplomatic:1,DOWNEY:2,Lawful:1,Gagne:2,"EX-OFFICIALS":4,"broken-nosed":1,armored:7,Hirsch:2,underprepared:1,"right-to-work":1,PolyGram:2,stolid:1,Vollard:2,overjoyed:1,exploratory:1,Sadie:2,Schuller:2,Capitalizing:8,Watercolor:2,dining:122,Strouds:2,Maltese:40,hyperemic:1,Selve:2,"stock-basket":22,sterns:4,Munro:2,Mickie:2,precluded:112,Sheiner:2,visitors:4,Gandhi:2,bioengineers:4,encasing:8,Carpentier:2,"tax-cut":3,considered:45,Morin:2,Tensile:1,Protectionism:11,"Post-Serialism":2,Habla:2,vetted:17,Comecon:2,revamping:55,"once-proud":1,"yen-bond":1,southwestern:1,Triland:2,Syrdarya:2,SOUTH:2,woolen:1,interessant:64,Veraldi:2,"half-full":1,Rauch:2,crimp:63,"low-lying":1,hooting:1,Pune:2,narrows:20,Piazza:87,Puna:2,Piazzo:2,boilers:4,"seventeen-inch":1,"art-dealing":1,substitutionary:1,indulgences:4,tailor:63,"food-shop":1,primates:4,LXi:2,"a-Discounted":433,Laurentiis:2,mewed:16,Shantung:2,Officielle:2,Mirage:2,Foulds:2,"non-writers":4,Loggia:2,BELL:2,Fontana:2,ancestral:1,violated:32,sleepily:6,simmering:8,violates:20,Voyager:2,fails:72,Frayne:2,charters:18,seers:4,Trunk:47,Bangalore:2,sackes:4,Loopholes:4,receivers:4,"best-run":51,"self-serving":1,disdainful:1,floundering:30,"bang-sashes":4,"package-sort":1,dutiful:1,Ga:2,Songs:65,Falegnami:2,"discussions..":4,poivre:147,successes:4,darin:1,Phamaceuticals:28,energies:4,Imbrium:2,Replies:4,Smiling:8,bunks:4,authoring:8,Ransom:77,Flaws:4,"physician-patient":1,"after-effects":4,robotics:4,Leatherneck:2,sampling:21,Luftfahrt:2,Sciences:111,initialing:8,unleaded:1,poll:70,Events:123,runaway:344,squaring:8,lifes:4,Kroczek:2,Bacillus:80,"high-profit":1,withstanding:8,Downgrades:4,filmmakers:4,gaited:1,"Fall-in":2,carryforwards:4,hardly:6,Downgraded:17,WAO:2,Kortunov:2,WAC:2,Wedged:17,stupendously:6,Shevack:2,virutally:6,WAZ:2,cresting:8,WAS:16,WAR:11,paying:30,libelous:1,McLeod:2,amend:42,"two-income":3,Reservists:28,straitjacketed:1,Someday:43,shrieks:4,Preseault:2,trackless:1,"SS-24s":28,heelers:4,snaking:8,Shingles:4,clutter:25,"buy\\":1,ETHICS:4,Ozick:2,Alyce:2,resentful:1,"Generic-Drug":1,"Cen-Tennial":2,unrolled:1,coarsely:6,shifts:18,Brotherhood:2,Beaverton:2,"less-popular":1,Silver:213,Konowitch:2,Kevlar:2,booths:4,Pullmans:4,ninefold:97,producers:4,Idle:1,"half-staff":1,weaknesses:4,CANDIDATES:4,threaded:17,Struthers:2,"insurgents.":4,"Asset-management":1,Amazonia:2,Tigrean:1,"C.O.G.":2,"seventy-two":1,Byting:8,guided:45,Krapp:2,"laser-read":1,guides:18,Cowan:2,overlapped:54,assemblages:4,Tropicana:2,Dome:2,wall:24,Scores:57,"anti-profiteering":1,scheduled:45,POTABLES:4,loaned:54,Tale:47,heterozygous:1,coaxial:1,Crafts:28,JVC:2,Tall:1,"left-hand":1,sheared:7,unnerving:30,Sonatas:123,"Asset-backed":1,Revised:157,Finally:6,Datatronic:2,arrays:4,"junk-LBO":1,Something:47,surgicenters:4,recalls:72,Boasts:20,outpaces:20,"mileage-based":1,Studds:2,Army:11,fluttered:16,Roslev:2,Arms:46,"Brierley-controlled":1,Capote:2,outpaced:434,sociologists:4,tonally:6,"top-secret":1,adjuncts:4,floured:17,tintable:1,incidentals:4,Sacrifice:47,"already-tense":1,fusty:1,Ceil:2,nutty:1,Disc:2,quitting:8,calmed:32,Orchard:2,Wilmington:11,communicate:42,nudist:1,Venetian:40,Roch:2,calmer:12,Rock:2,flattest:51,Ramillies:2,"writer\\/producers":4,on:435,"tear-filled":1,ol:436,oh:106,of:221,reinforcing:8,Inverness:2,subdues:20,Souvanna:2,op:11,amber:3,Jordon:2,Gebhard:2,Backers:4,garner:42,"accountants...":102,abrogate:39,Aronson:2,Bowen:2,strictly:6,Tailors:2,hazards:4,strict:1,racist:3,"Export-Import":2,"flaunt-your-wealth":1,extolled:16,"Hospital-Cornell":2,condone:39,equated:54,Verses:57,jua:64,ABCs:4,soprano:22,strenuous:1,subcontractors:4,applying:8,"street-corner":1,"pork-barrel":3,gherkins:4,Joanna:2,"bulb-making":1,"anti-alcohol":1,"five-hundred-year-old":1,Enemies:4,castles:4,"south-of-the-border":1,Imelda:2,Armenians:28,"x-There":437,revamps:20,lightly:6,drawin:8,politics:91,unteach:39,beds:4,Pentagonese:2,Doman:2,Physicist:2,Slides:4,Slider:2,unneeded:1,dismayed:14,"auto-parts":176,ICI:2,Suffers:20,ICN:2,ICM:2,ICC:2,ICA:2,ICG:2,ICE:2,fetid:1,polyisocyanates:4,Franyo:2,Cromwellian:1,ICS:2,Cliffs:74,unconstitutionally:6,illusive:1,Caplan:2,Azlant:2,Surplus:40,Eminonu:2,Nurses:4,multimegaton:1,odds:4,unscathed:1,GATT:2,Likely:97,rimmed:249,Primarily:6,Fame:11,Theoretically:6,underutilized:17,migrated:54,Edison:11,"Japan-U.S":2,sluggers:4,Faint:1,Toto:2,Tots:74,surgical:1,migrates:20,unmoved:1,"long-run":1,Hondius:2,longstrained:17,defaulters:4,"Neo-Romanticism":2,Custodian:2,assuage:39,participants:4,diluting:8,Mirsky:2,program:24,depending:8,"fill-in":1,positivists:4,woman:25,equivocal:1,sparkplugs:4,"thin-lipped":1,induce:39,Raeder:2,Classes:91,Morvillo:2,soles:4,rebounds:72,NPL:2,"writing-instruments":1,"wave-travel":1,unlike:438,Penang:2,sanctify:39,grandfather:25,Aiding:2,Kolsrud:2,vibes:4,Motorcycle:2,Pearlstine:2,conflicted:32,coxcombs:4,Digate:2,"chimera-chasing":1,"Oce-Van":2,rats:4,Thieme:2,Proudfoot:2,rate:24,"anti-contamination":1,rata:390,CALLIOPE:2,"surprise-filled":1,sutures:4,Headly:2,ophthalmologists:4,Betty:2,Eveready:2,barbecue:25,interlaced:14,guns:18,prosaic:1,KISSINGER:2,LOAN:11,Walitzee:2,overactive:1,Redeemer:2,retraining:21,bullishly:6,"vice-presidents":4,Ogonyok:2,misinterpret:42,caravans:4,ornithological:1,reincorporating:8,Accomplishments:4,sculptural:1,drunkards:4,Grayson:2,reshufflings:4,"timber-state":1,thankfully:6,Wendel:2,"still-raging":8,"should-be":1,controversialists:4,Wendee:2,Acres:2,screens:18,impolitic:1,"major-league":1,feedings:4,Aspenstrom:2,Arctic:40,viscoelastic:1,forisque:64,piggyback:25,Pardus:2,Katangans:28,converters:4,Intek:2,Intel:2,CNCA:2,golly:106,drips:20,draughts:19,Inns:28,Aden:2,Inter:2,draughty:1,"end-of-school":1,debates:18,bystanders:4,Expanding:8,policemen:4,recast:39,debated:54,Wade:2,ROUGH:1,bugaboos:4,Wada:2,evangelicals:4,"Baa-2":66,"Baa-3":117,cosmological:1,"Baa-1":117,Intergraph:2,Rainey:2,arise:42,cultivate:39,"anti-monopoly":1,offspring:19,Arps:2,"packaged-goods":152,HomeCare:2,Bonus:2,"highest-rated":1,cleansing:21,motels:4,nitwits:4,Tufts:2,cytokine:439,"record-high":1,emulate:39,Pointers:4,Atkisson:2,Laue:2,Laux:2,indomitable:1,Perluss:2,capitalize:39,rotund:1,WTVJ:2,Davises:28,Everyone:47,Whittenburg:2,automobiles:4,"export-bound":1,strutting:30,specifying:8,agnostics:4,"State-financed":1,rentals:4,Linus:2,unhip:1,Siepi:2,schillings:4,McN:2,Interesting:1,anachronistically:6,Brazos:2,underwhelmed:17,"Anglo-Jewish":1,paunchy:1,concentric:1,Arias:2,Smithfield:2,Zhaoxing:2,utilizes:20,Lindner:2,"sky-reaching":1,Ohira:2,Fitzhugh:2,glide:42,environmentalist:22,Carnegie:2,nonproductive:1,"deficit-ridden":1,muddied:14,"khaki-bound":1,"fully-diluted":1,Bandar:2,speechless:1,units:4,evaded:54,Tualatin:2,playthings:4,Karos:2,bigger:136,"Amadou-Mahtar":2,CORNFELD:2,"non-automotive":1,Masons:41,utilized:54,Scottish:40,"short-sellers":4,nab:39,aspens:4,Display:25,Lobar:2,Militant:1,modernized:81,"knock-out":1,Rhea:2,seditious:1,"Chaplin-like":1,marketplaces:4,Third:440,disbelieved:16,"at-market":1,insignificances:4,Samuel:2,"pasted-in":1,puckering:8,Nightly:2,PHONE:2,Wazir:2,postponements:4,"base-stealing":1,Deane:2,hailing:8,Malt:2,gut:25,experimenting:8,Doolittle:2,"Year-round":6,Deans:113,Mali:2,attendant:22,Male:10,Bloch:2,Block:11,Addicts:4,coaches:4,Rachelle:2,"soil-bearing":1,THIEVES:4,"high-horsepower":1,turne:39,solidly:6,unhealthy:1,"four-sided":1,Mendoza:2,rankles:20,SUSPECT:1,defects:4,Refsum:2,pedal:63,Drugstore:11,overrode:16,moan:39,rails:18,collar:25,prescient:1,Cummings:2,Newer:12,unchecked:1,"frustrated...":102,Viewers:4,Cinzano:2,Crabs:2,pains:4,SINCE:127,"public-opinion":3,Ottawa:11,Arcilla:2,rustlings:4,Crabb:2,Plumbing:2,punters:4,Nut:2,NOVA:2,Delvin:2,gangling:1,undiplomatic:1,populating:8,mismanaged:16,Oliver:2,asham:1,Olivet:2,outstanding:1,Longhorns:2,"second-look":1,delisted:54,Beryl:2,"flight-to-quality":3,Quiney:2,hexagonal:1,semiliterate:1,Masillon:2,Cayman:2,interferes:20,DiIulio:2,lackadaisical:1,"four-person":1,empirically:6,Drexel:11,Parsifal:40,interfered:32,Helpline:2,Internaional:2,reckon:149,pillage:63,measures:18,reunited:17,"eight-and-a-half-foot":1,SOFTWARE:2,Paddock:2,measured:45,Pieta:2,queasily:6,grams:4,"time-hotels":4,Zen:2,Zel:2,dissolved:54,aquifers:4,Gloversville:2,Zey:53,Perfect:66,"link-ups":4,asphalt:22,Knill:2,"Walters-Donaldson":2,Majority:2,Genome:2,costing:55,Alexeyeva:2,aggravate:149,nevertheless:6,Instructors:4,Troyes:2,Conaway:2,Whitby:2,Kandinsky:2,Courcy:2,ILA:2,furnaces:4,revered:14,Epicurean:1,compliments:4,"Kaddurah-Daouk":2,oaks:4,"non-edible":1,"crime-busting":1,PHH:2,keenest:51,imponderables:4,PHS:2,paradoxical:1,consciously:6,SHORT:66,Parkersburg:2,"X-rated":1,Urielites:28,Homemakers:2,Derails:4,Boniface:2,efficacious:1,"move-up":1,nailed:54,Cutrer:2,slapped:32,Codevilla:2,Jubal:2,"incentive-reduced":1,Colmer:2,Hyannis:2,orbiting:8,"C.D.":2,cancelling:8,"Principal-only":1,Ednie:2,"days.":91,Janus:2,succeed:42,venturers:4,ciliates:4,Willetts:2,orchardists:4,license:24,Oxley:2,MHz:4,Christianson:2,Priscilla:2,"Non-Smokers":2,sojourners:4,breastworks:4,"vehicle-production":1,ARMs:91,"off-balance":1,slots:4,"Mountain-Hi":2,Snook:2,bolster:95,Filippo:2,"Co-op":47,Zomax:2,illumined:16,apprehensively:6,pinpoints:4,Revson:2,illumines:20,"yielding-Mediterranian-woman":1,sending:55,Blanton:2,vaguely:6,Pioneers:65,Suitors:4,"R.L.":2,"obsessive-compulsive":1,corrode:149,"employer-provided":1,Reily:2,parachutes:4,tweaking:55,Kobe:2,Shannon:2,welding:21,QUOTABLE:1,Sumitomo:2,"Jones-Imboden":2,interlacing:8,leans:20,vacuumed:16,Izaak:2,"computer-driven":1,inspirationally:6,Jellinek:2,OKC:2,"Idaho-based":1,"India-born":1,tradedistorting:1,arrives:20,Southmark:2,wallops:20,Hanford:2,Manzoni:2,"world-commerce":1,Prokofieff:2,domains:4,arrived:32,Generalissimo:2,"government-bond":22,Bookies:4,robust:1,lower:441,Backe:2,equalled:17,persuasive:1,bounces:72,Rubeli:2,deliverable:1,Starkey:2,Terrace:2,bounced:32,Broxodent:2,Semmes:2,Handmade:2,competitive:1,inactive:1,Poindexter:2,Scripture:11,"export-boosting":1,"pin-curl":1,Freida:2,advisers:4,rowed:16,exclusively:6,rocklike:1,Filed:17,Estancieros:4,Visker:2,civilizational:1,Criminologists:4,Baranovichi:2,Daihatsu:2,Definitely:6,unwomanly:6,Carrie:2,jots:20,Kenny:2,Salida:2,"citizen-sparked":1,flabbergasted:7,Stellar:2,Bertelsmann:2,Aventine:2,McMaster:2,"anti-smokers":4,"social-issue":1,"less-than-successful":1,folders:4,tiefes:64,streaming:8,BRNF:2,grenades:4,"snake-rail":1,"bushy-tailed":1,capos:4,tampers:4,"Raoul-Duval":2,Lawsuit:2,Tarnopol:2,Guar:1,jumpy:1,beleaguered:7,jumps:18,Harriton:2,Arragon:2,Altimari:2,Payton:2,powerplants:4,Procedural:1,Decries:20,volunteering:55,Kimsong:2,Bovine:2,Essex:2,huffed:16,Subsystems:4,Skopas:2,Bears:41,mustached:1,mustaches:4,Hillsdown:2,Beare:2,Beard:2,"hope...":102,introverted:14,tumble:25,creaked:16,Every:246,oddities:4,mountains:4,Gainesville:2,Gautier:2,"Boy-Marquita":2,"taxpayer-related":1,Grenada:2,deployed:54,McNabb:2,Perdido:2,"higher-profit":335,drinkers:4,Harrity:2,Loan:11,geneticists:4,stalking:442,"N.R.":2,ingrates:4,Elan:2,dazzlingly:6,"more-conventional":12,sunnier:12,LBOs:92,beguiling:1,saturate:39,associated:45,Calenda:2,"Management\\":1,Underground:1,associates:18,Singh:2,Bagatelles:28,"laser-type":1,Amstrad:2,inequities:4,"AIDS-prevention":1,Recently:6,Laguna:2,Elected:17,jackboots:4,develops:20,Laughing:2,weigh:42,Making:229,Letterman:2,Andean:66,potters:4,"non-enforcement":1,"bills-measures":1,weights:18,carved:81,proximate:1,Natrona:2,Cranes:65,Panamanian:66,"high-blood-pressure":1,"computer-service":1,"whiskeys``":133,"J.D.":2,"long-bodied":1,Launching:8,Dodge:2,Shere:2,Hazlett:2,deterministic:1,Duclos:2,Jovian:1,Sarason:2,stable:3,Buyer:2,Odyssey:11,Mort:2,Brassnose:2,overlaps:20,Superintendents:4,talons:4,"much-publicized":1,reinterpret:39,bounding:8,drinking:122,incoherent:1,"off-price":1,"cloud-flecked":1,reappearing:8,"three-judge":1,"synthetic-leather":1,Silbert:2,Waymouth:2,Newgate:2,State:443,Atorino:2,Fung:2,Maryland:11,"Two-Stem":1,checkers:4,frankfurters:4,"radar-eluding":444,outlasted:16,Simmon:2,Henderson:2,"mutual-aid":1,Airports:113,gaily:6,Shantz:2,Light:99,pushing:5,slated:54,swirled:16,MAINTENANCE:2,"Stat.":11,confiscating:8,"Job-Bias":1,Maddalena:2,"low-sugar":1,Yalagaloo:106,ELDERLY:1,Ismaili:2,warnings:4,nervous:1,Eckhardt:2,Amicable:2,payoffs:4,reds:4,examinations:4,slinging:8,"preferred-stock":3,Treat:63,redo:39,Jergens:2,Rafales:28,rackety:1,Ernie:2,"Treasury-bond":1,"No-Tobacco":2,rackets:4,Erling:2,Pyrrhic:1,Andreotti:2,Sunda:2,Intervenes:20,Count:445,"by-passed":17,Rodriquez:2,Chuck:59,"pale-blue":1,Exclaimed:16,Trains:4,distractedly:6,"by-passes":20,Taiwanese:446,Balcor:2,amethystine:1,lumber:78,Ptolemaists:4,purports:20,befits:20,Mollica:2,spying:55,Feature:2,"mega-problems":4,hemlines:4,summers:4,"one-branch":1,decaying:30,Pilgrm:2,Aldermen:4,buoyant:1,lamechians:4,unites:20,Shows:18,Patriarchy:2,Assn:2,Snellville:2,Philo:2,Bairnco:2,masks:4,"Gummi-Werke":2,Complying:8,cheaper:136,Bouchard:2,Moonan:2,straps:4,ferret:63,Stubblefield:2,batter:25,spreads:72,saturated:81,Manzi:2,unfortunates:4,Moslem:40,"Time-Mynah":2,mathematicians:4,Wachtell:2,Warwick:2,Gargan:2,Gildersleeve:2,takings:4,frailties:4,Shell:11,gadflies:4,sackings:4,"anti-nuclear":1,nostalgic:1,estimating:55,Factorex:2,permanent:1,inspecting:8,shores:4,orange:3,Queens:74,eastward:6,bumbling:13,Hawks:41,christianizing:8,makings:4,Strukturbericht:2,adversely:6,Carnarvon:2,satellites:4,impaired:14,unpublicized:1,Greenland:2,Swaggart:2,transitional:1,profound:1,Pro:87,retorted:16,"Jose-Maria":2,"this.``":133,Subject:22,mitral:1,studios:4,psychopharmacological:1,Octet:2,mothered:17,"iron-willed":1,Octel:11,Angevine:2,Which:447,clinching:8,Moreau:2,Flustered:1,"studio\\":1,Hawke:2,"exotic-Hawaiian-locale":1,hollering:30,whitening:8,Historians:57,Buying:210,apses:4,Raimu:2,Neptune:2,Wilsonian:1,promptly:6,Fairy:11,usual:97,"broker-dealer":448,Bulgaria:2,manicures:20,"age-old":1,enlargements:4,Wegener:2,illicit:1,manicured:17,Chayet:2,"inky-brown":1,DOGS:4,"computer-reservation":3,"bolt-action":1,vases:4,McCullough:2,"G.O.":2,listless:1,Lemme:39,proposing:8,Shoemaker:2,steams:20,Rausch:2,Potlatches:28,"investment-management":22,Tyner:2,uniting:8,Voss:2,"flip-flop":449,Marge:2,ticklish:1,rigs:4,Vose:2,Margo:2,"x-rays":19,Rousseauan:1,postgraduate:1,shallow:3,Bolotin:2,Toronado:2,Wheels:2,"O.E.":2,LIBOR:2,Shin:2,Belth:2,ricocheted:16,"simple-seeming":1,hearings:4,"Ziminska-Sygietynska":2,boring:450,Hopkinsian:2,infectious:1,screeching:30,chattered:16,Sheena:2,Nazionale:2,Suhler:2,"human-based":1,Folded:2,westward:277,"Ritz-Carlton":2,Metromedia:2,Compounding:8,intersecting:8,Bernardin:2,"over-pretended":1,matchmakers:4,"double-crossed":16,alienating:30,willful:1,trivia:91,"=":451,"God-given":1,comest:33,Dragoslav:2,"pomp-filled":1,harmful:1,Detroit:2,Gregory:2,"Hanover-Sally":2,thespians:4,Wollo:2,halved:81,"clipboard-size":1,appallingly:6,LEVINE:2,Mitchel:2,KICKING:8,lumpier:12,diagnostics:4,Appleseed:2,Lessons:4,EFPs:4,burners:4,tidings:4,Devens:2,serving:55,democrats:4,Innovation:2,Wilkinson:2,filmed:45,clutching:8,Jay:11,interclass:1,sunflowers:4,Sharply:6,myriad:3,"counter-balanced":1,"off-the-cuff":1,threateningly:6,overeating:21,"formidable-appearing":1,wrestlings:4,Persuading:8,Ulisse:2,SPENT:16,trims:72,"non-Jewish":1,Bowser:2,THF:2,THE:89,Sulgrave:2,THC:2,bellies:4,Grobstein:2,enlisting:8,ended:452,Penny:11,plopped:16,ministered:16,disparities:4,sparrows:4,"pre-Easter":1,Uneven:1,expel:39,Engaged:17,fantastically:6,nonferrous:1,Unity:2,Rales:2,Units:46,Harapiak:2,unlimited:1,junks:20,arguably:6,wagers:4,scathingly:6,freckled:1,Rothenberg:2,statehooders:4,Wrangler:2,Irises:130,weighing:55,"world-wide":97,Torchmark:2,Catatonia:2,probing:5,"radiation-produced":1,sonorous:1,commands:18,"month-end":3,Strait:2,budgeting:21,Confused:14,Sungene:2,Unlikely:6,illiquid:1,Veracruz:2,Canneries:2,tinning:8,unconvincing:1,Timothy:2,Worthless:1,"cheap-shot":1,Dromey:2,unfolding:30,"wholesale-sized":1,narrower:12,"litter-strewn":1,packaging:21,"Bristol-Meyers":2,misapplied:17,respect:24,narrowed:32,RD:2,cavities:4,"ton-mile":1,fishers:4,hunters:4,"Herald-Examiner":2,Forecasts:41,Bonneville:2,literal:1,sidesteps:20,catechize:39,floats:20,Aderholds:28,ghettos:4,Exxon:11,Ababa:2,sufficient:1,jaded:7,Credit:453,"billion-asset":1,hightechnologies:4,Acknowledges:20,XYLOGICS:2,interstices:4,"once-absolute":1,Quilt:11,"riflemen-rangers":4,Trumped:17,Kleinaitis:2,"made-for-TV":1,"not-so-subtly":6,Taiwan:2,"buy-stop":1,Quill:2,intercity:3,potions:4,Lassie:2,Reinvestment:2,palely:6,DJIA:2,dual:1,snuck:16,Strom:2,Intelligent:40,Stroh:2,"coal-fired":1,"kitty-cornered":1,Halliburton:11,unwired:16,"non-dischargable":1,Reinhold:2,Sandburgs:28,Sperling:2,sincerest:51,"Wal-Mart":2,"OTC-market":1,"fixed-repayment":1,Pivot:2,courant:64,Gilda:2,aftuh:6,Rosso:2,Savonarola:2,Stated:17,Staten:2,tithes:4,States:41,Stater:2,demonize:39,Welch:2,Fawcett:2,Shearson:2,bending:8,"beer-bellied":1,routinely:6,dockworkers:4,Schnader:2,Bonham:2,gyrations:4,Bonfiglio:2,wealthy:176,Yass:2,fishing:27,"active-matrix":3,Microscopically:6,NAHB:2,reconsidered:54,Marin:2,"well-turned-out":1,"satellite-linked":1,supply:24,"upper-medium":1,nos:4,enact:39,captivating:13,layering:55,toured:16,"seventh-inning":1,Meager:1,Droll:2,Below:206,aeternitatis:64,Dvorak:2,Maumee:2,helpful:1,tryouts:4,piasters:4,"Camaro-Firebird":2,"multibillion-yen":1,loser:22,loses:72,Honey:11,Skip:216,Maria:2,herons:4,"Saab-Scania":2,retractable:1,elevators:4,mattresses:4,growth:70,Bonanza:2,throughout:206,Formally:6,Promoters:113,mines:4,markers:4,blenders:4,earrings:4,mined:54,patiently:6,trout:19,truckers:4,obey:42,analysed:17,"over-night":1,"Gram-negative":1,Umkhonto:2,Longmont:2,"re-creations":4,Warburg:2,saddle:25,sectarian:3,gulping:8,Nogay:2,Stagecoach:2,"multi-disciplinary":1,taxpaying:1,"Wander-Years":2,additives:4,own:454,Cornell:2,Marseilles:2,Stockard:2,Takao:2,"kilowatt-hours":91,"Soviet-controlled":1,Ribeiro:2,"J.F.":2,policed:17,"soft-looking":1,Diversity:47,Milberg:2,blanketed:16,smoothing:8,"package-holiday":1,"Israeli\\/Palestinian":1,Rowley:2,breeding:55,"inter-company":1,bitches:4,fixers:4,decisis:64,Sonoma:2,Tel:2,Jenny:2,Tea:11,"Anti-A":2,Ted:2,Tee:183,Tex:2,Sheehy:2,Cetron:2,Jenni:2,demonstrate:42,rickety:1,recork:39,"here-for":1,Embittered:1,Pagones:2,Instinctively:6,"soft-shell":1,hymns:4,conspired:32,Lander:2,"hard-to-fit":1,"needle-like":1,Haun:2,Stetsons:28,Bartlesville:2,Tempering:8,Dustin:2,Yeni:2,triphosphopyridine:1,volumes:4,apportioned:17,Payson:2,Converts:4,Musical:40,Baltimore:11,quicker:455,"capability...":102,McInroy:2,Fights:4,pricey:1,intentionally:6,"whole-egg":1,Lyster:2,CANADA:2,Steelton:2,raining:8,sitters:4,"Thorn-EMI":2,hordes:4,"quota-breakers":4,Hasting:2,"mark-denominated":1,foul:456,revelers:4,prices:18,"BROWN-FORMAN":2,Until:124,Antar:2,crooned:16,Kushkin:2,Manufacturers:41,Michaelcheck:2,quadruple:83,outwit:39,Belgians:111,demoted:54,Climbing:8,sinking:9,callin:8,"SP1":1,"financial-planning":1,"laser-resistant":1,pierce:39,tantalizing:30,lignite:3,Redding:2,Heights:74,uttering:8,Hannifin:2,Less:457,brutish:1,"cross-top":1,Vast:1,Quist:2,disunited:17,Jerez:2,"anti-Galileo":1,commented:32,Lesk:2,Conventional:66,tolerate:42,Summerspace:2,"na/TO":2,Hecla:2,"non-ICO":1,resignations:4,DiVarco:2,Huai:2,relieving:8,thunder:44,Perinetti:2,Earthmen:41,Companion:47,Guerrillas:57,bonuses:18,grovels:20,Pudwell:2,legations:4,PROSECUTORS:4,"top-flight":1,sobs:4,fissured:17,Resins:28,Forgotten:2,fissures:4,Botulinal:1,Dominique:2,Zita:2,flatlands:4,Petite:1,Xiao:2,"newspaper-publishing":1,unwanted:1,indulging:8,Mutton:2,"labor-saving":1,Towsley:2,Skates:2,Pompeii:2,zoning:21,opponents:4,derivatives:4,"good-hearted":1,reticulate:1,"anti-deer":1,Rabin:2,females:4,standardized:7,"high-wage":1,pointedly:6,taffycolored:17,smelts:4,zipped:16,"foul-mouthed":1,tastefully:6,Merz:2,Nuell:2,grimed:17,plunged:32,Merv:2,Ropes:28,anticompetitive:1,plunges:18,municipally:6,"marketing-and-distribution":1,Cyoctol:2,overextend:33,"slimmed-down":1,Amoskeag:2,Energie:2,Loudon:2,Dempsey:2,unmasked:17,comedians:4,imperishable:1,"child-safety":1,Zimet:2,Cabbage:11,Mullins:2,tripling:8,"latest-quarter":1,thermodynamic:1,survivable:1,despondent:1,Players:41,McInerney:2,constants:4,Erie:2,Knowledgeable:1,drinks:18,deutsche:80,"first-mortgage":3,"pet-rabbit-raising":1,trellises:4,Fabulous:40,timers:4,communistic:1,"Drug-industry":1,Renowned:17,Criminals:4,MONTHLY:1,Recruiter:2,"side-conclusions":4,Recruited:17,wrought:45,deregulating:8,superregional:1,unforeseen:1,auditors:4,survivors:4,Karangelen:2,insubstantial:1,Stainless:40,Khost:2,easier:458,Implements:4,Wilcox:2,thrones:4,slate:22,Presumably:6,blini:4,aspersions:4,constructional:1,schools:4,Pechiney:2,slats:4,lenient:1,Prudent:2,"CODE-NAMED":17,renditions:4,"fiscal-first":1,Hobbes:2,"Pitney-Bowes":2,loyalties:4,unwary:1,pliant:1,series:19,"slow-building":1,Yeres:2,Recognizing:8,Okada:2,depositing:8,substantially:6,emulsified:17,TRADE:47,Hahn:2,"high-temperature":3,"ten-concert":1,"less-self-confident":1,"single-market":3,redundancies:4,"heavy-duty":3,"H.K.":2,Culvers:28,Super:40,Chaikoff:2,written:14,Abortion:11,"safe-cracking":1,Pension:47,Lapin:64,mobsters:4,desks:4,Frankfurt:77,withered:7,"Princeton\\/Newport-like":1,exposing:30,Rosenberg:2,Mingo:2,Chan:2,Chao:2,shipped:81,speedy:1,coeds:4,Cadam:2,repealed:54,Anjelica:2,caught:54,speeds:18,Universities:92,bowl:78,Dun:2,"most-likely":1,dailies:4,celebrators:4,Due:459,sallies:4,channels:4,"second-degree":3,infused:17,abutments:4,Trabants:28,elms:4,Messelt:2,betrothed:16,prepurchase:1,"Italian-led":1,Chorale:2,"over-arching":1,hypothetical:1,SoundView:2,"external-trade":1,bethought:39,Encyclopaedia:2,"Gallon-Loren":2,immensities:4,lunges:20,expunged:17,Summit:11,scholastically:6,"unfair-trade":1,crawl:63,lunged:16,Serkin:2,showed:32,elegant:1,hyenas:4,project:44,Frequency:2,involutorial:1,blasphemed:16,Wessels:2,Furies:4,Sulya:2,Woodyard:2,untrained:1,antagonistic:1,shrubs:4,Memorex:2,ANSA:2,gripe:256,nigs:4,asymmetric:1,recommended:112,doors:4,Ask:216,grips:4,Ash:2,Iain:2,Jones:2,Sardina:2,Catherall:2,debonair:1,reverberated:54,Althea:2,Warrick:2,"stock-price":3,cams:4,camp:25,Schwada:2,rotary:1,"consumer-product":3,CREATIVE:1,memberships:4,Brideshead:2,howl:25,"Baden-Wuerttemberg":2,Lisbon:2,circulations:4,"Chicago-Warsaw":2,came:16,Anglicans:4,Symonds:2,Abdul:2,"shark-infested":1,reschedule:39,Marcella:2,participate:42,falsehoods:4,unmanaged:1,Marcello:2,"convenient-type":1,Reaching:8,quaint:1,"Tripod-Laing":2,Ranked:17,salvos:4,Wealthy:2,ballyhooed:17,"On-Site":2,organizes:20,"D.C.":129,"pre-empt":83,denounce:149,psychiatric:1,foremost:97,Encompassing:8,tenaciously:6,"worth-waiting-for":1,Xiaobo:2,dipping:8,Mackenzie:2,prayerful:1,Seventies:28,"sludge-covered":1,twinkling:55,Bennington:2,freewheelers:4,Neurenschatz:2,Winners:4,cloning:55,Subverts:2,McPherson:2,resigned:112,pricking:8,"no-lose":1,pressured:460,rings:18,"top-drawer":22,pressures:4,Wednesdays:57,oedipal:1,Lockies:28,"Pooh-like":1,apples:152,Bebe:2,wanted:85,"J/NNP.G.L.":2,"employment-services":1,fullscale:1,Porkapolis:2,TANDEM:2,reconstitute:39,Quemoy:2,attendents:4,disdain:24,Sovran:2,Weybosset:2,Blessed:157,planned:81,Menshikov:2,alternate:279,"ramrod-straight":1,BCD:2,fudged:16,Caton:2,"liberal-conservative":1,BCA:2,munches:20,trickiest:51,smithereens:4,hers:227,gleaming:8,munched:16,Sorry:461,grazing:5,BCS:2,Pomton:2,parley:25,Orrin:2,Malay:2,dynamically:6,deportations:4,dots:4,"face-to-face":97,Algiers:2,"FDA-regulated":1,"sewer-repair":1,gavottes:4,gloats:20,"low-ceilinged":1,Schulz:2,Nominations:4,doth:20,expansionists:4,Gatward:2,gritty:1,scowled:16,NSBU:2,Kuiper:2,excited:81,"light-rail":1,betas:4,MAGURNO:2,Campbell:11,"Pitt-Rivers":2,"Southmark-supported":1,Painters:4,taunts:4,overpowers:20,Teferi:2,upscale:34,Gazette:2,churchmen:4,damaged:81,allegoric:1,Naw:106,DILLARD:2,verify:42,"by-gone":1,"drop-out":1,damages:18,Roine:2,Wratten:2,emphatic:1,voyages:4,"Scripps-Howard":2,Roskind:2,Retrovirus:2,seamen:4,Hinsdale:2,haggard:1,simulates:20,Spalding:116,Zielinski:2,Beset:17,fanatically:6,simulated:14,quantitative:1,pairings:4,dissects:20,veils:4,Thank:42,Thanh:2,THAT:462,Subsequent:1,"Baden-Baden":2,DRI:2,Bien:2,Position:25,Thant:2,THAN:127,DRG:2,Pumpkin:2,"self-assured":1,magically:6,Soweto:2,"old-fashioned":1,Sulamith:2,palmtops:4,innocent:1,botanists:4,SystemOne:2,"knock-down":1,Cathleen:2,shabbily:6,Chrysler:2,ratcheting:463,Geier:2,"Campbell-brand":1,brought:54,specie:147,Claudio:11,bulked:16,Graziano:2,headwalls:4,sailorly:6,ballooned:54,Yoshizawa:2,consultants:4,Bismark:2,"Philadelphia-area":1,Norton:11,"newly-created":1,enemies:4,Messing:8,iniquities:4,Cudkowicz:2,polluted:103,birdlike:1,disheartened:17,Hatching:2,Convertible:66,theological:1,McElroy:2,Remy:2,shakes:72,secularists:4,REJECTS:20,Admittedly:6,Valedictorian:2,Dooley:2,Marocaine:2,Westpheldt:2,Characters:4,defensive:3,poppies:4,pliers:4,officiating:8,Gurkhas:2,AVX:2,Valentino:2,Valentina:2,fabrications:4,entrants:4,Valentine:11,annualized:45,Scrapings:4,AVC:2,hulking:13,Use:362,Blacks:92,Greeks:65,Few:66,raises:72,sow:256,Latino:1,"Ont.":2,Fey:2,Checkit:2,authorizes:20,waits:20,"La-la-landers":4,support:44,constantly:6,Labeling:8,Schrager:2,Yoshio:2,Expressionism:2,Hinkle:2,"fellow-employees":4,remarking:8,Nickelson:2,Akers:2,"well-cemented":1,Servicios:2,"Jens-Uwe":2,inside:464,devices:4,"faster-working":12,"Hungary-Suez":2,glaringly:6,Weatherford:2,Buoyed:17,communize:39,Intourist:2,Kurlander:2,Trooper:2,guideposts:4,"pig-drunk":1,centrifuged:17,Observations:4,"death-row":22,negotiations:4,Unused:1,Francisco:2,"AP-Dow":2,Trace:2,Track:11,ambrosial:1,Hernando:2,Tract:2,Tracy:2,superfluous:1,models:4,Amos:2,"Journal\\/NBC":2,Charley:2,Vadstena:2,Person:11,vestiges:4,Charles:2,Charlet:2,Bayanihan:2,pet:465,conferred:54,Willam:2,renegotiating:8,hangovers:4,pep:25,"hay-shakers":4,skate:39,asymptomatic:1,bribes:4,Wee:2,Falmouth:2,obsessively:6,reverting:8,bicycles:4,bribed:32,atavistic:1,persevere:42,Everytime:6,Yield:11,Carvain:2,roundups:4,Stratforde:2,fretting:8,"Kai-shek":2,Rand:2,amoral:1,Rank:11,Peterpaul:2,Jansenist:2,Nicaraguans:28,aviators:4,"rate-increase":1,Maquilas:2,sigh:78,sign:24,Aganbegyan:2,Slemrod:2,parachuting:8,Associations:130,Westphalia:2,hamstringing:8,Epilady:2,irresolvable:1,Veselich:2,Equality:2,leaped:32,AFRICA:2,"over-simple":1,understanding:27,Woman:11,Hoboken:2,"language-housekeeper":1,Emmy:47,BLOW:2,"Rush-Presbyterian-St":2,nonelectrical:1,Memorials:2,"One-armed":1,Alaouite:1,ineffective:1,"automated-teller-machine":1,Doaty:2,Wixom:2,spurts:18,Zealander:2,"cheek-to-jowl":6,Morover:12,convenes:20,logical:1,DOE:2,fake:466,Atonement:47,DOS:2,flagging:13,DOW:2,DOT:2,PLANTS:4,crammed:54,Dershowitz:2,voices:18,Sarasota:2,angry:1,Delayed:1,Sigler:2,"large-city":3,"broken-down":1,enriched:17,wicked:1,scratched:32,Poetics:2,Mortar:11,pollsters:4,Yocam:2,transoms:4,Marchese:2,Jimmy:2,scratches:4,Valhi:2,sieben:64,Sintered:17,sanctified:1,Saga:11,pretend:83,Sage:2,Kegler:2,inflamed:249,flannels:4,Prudhoe:2,Squier:2,Newsweek:11,Slotnick:2,awesome:1,virgins:4,validly:6,Broadview:2,allowed:467,stole:16,Medtronic:2,"no-trade":1,savor:39,dysgenic:1,Evenflo:2,"tax-free.":1,undertook:16,"field-officials":4,"federal-funds":1,misjudgments:4,wardens:4,"ex-aides":4,Peripherals:111,Hooch:2,revealed:85,golfers:4,Ozarks:28,Literaturnaya:2,consequently:6,nomadic:1,Probe:2,ordinarily:6,opinionated:1,so:468,sl:106,snowed:16,tutoring:55,se:469,drunken:1,augurs:20,wrappin:8,"status-roles":4,flips:72,Magarrell:2,flagships:4,experiments:4,Perth:2,omitting:8,frequents:20,razors:4,Paray:2,bulldoze:39,drunker:12,lovelies:4,Swifts:28,sacrosanct:1,tore:32,constituted:32,avid:1,tellingly:6,internationally:6,how:293,torn:14,Greylag:2,sylvan:1,"April-June":2,Pandick:2,"foreign-aid":22,Arguably:6,Stabbert:2,Asilomar:2,TCMP:2,hop:25,Choices:57,Mideastern:1,"dance-theatre":1,"equipment-packed":1,Rockettes:28,reckoning:21,shouted:32,Simulator:2,Lazzeri:2,roasts:4,Macbeth:2,"now-shuttered":1,cropping:8,Preti:2,Pretl:2,suffixes:4,Vitzhum:2,"Department-sponsored":1,Shared:2,Learned:172,suhthuhn:1,"accordion-folding":1,rioters:4,Sauce:2,"I.P.":2,squared:103,abide:42,navels:4,Ghostbusters:123,Article:47,squares:4,dilemmas:19,recalculating:8,Enichem:2,Meynell:2,cooperatively:6,palatial:1,Provigo:2,recordings:4,McCaw:11,bumpy:1,poems:4,Westfield:2,scarred:7,Whampoa:2,gilts:4,Ballon:2,Pritzker:141,Deficiency:2,Ballou:2,err:149,Ortiz:2,Balts:28,"shareholder-payout":1,open:470,"second-level":1,ripping:8,partook:33,Hmpf:106,Hmm:235,Daremblum:2,shiver:25,deglycerolized:17,convene:42,begotten:17,infected:471,Paluck:2,"pre-Christmas":1,Goodbody:2,homemade:1,preprepared:17,Moineau:2,"raccoon-skin":1,fooled:17,favors:72,Lester:2,"once-exploding":1,coats:4,Suiza:2,individualized:7,"top-ranked":1,favore:64,addressing:8,unadited:7,shipowners:4,Baullari:2,Creme:2,Nichias:2,JAGRY:2,Idaho:2,Rehnquist:2,Simmonsville:2,Nyunt:2,Congregation:2,"management-information":3,blinding:13,adjusting:55,ironically:6,Quinn:2,backyards:4,staffed:17,TIMES:2,Anker:2,crochet:39,Prescott:2,winters:4,Auditorium:2,Erasing:8,photochemical:1,"Well-educated":1,Beghin:2,Vallecas:2,nonlethal:1,Scattered:17,"adult-training":1,"conservatively-cravated":1,versa:472,"three-mile":1,"cancer-causing":1,"low-base-price":1,laws:4,Jacki:2,lexical:1,murmurs:20,"CF6-6":11,babbled:16,Balladur:2,merit:44,Roland:2,Comvik:2,Magten:2,Trelleborg:2,"re-emphasizing":8,Indirectly:6,debunk:39,unplagued:17,"state-centered":1,Edith:2,rephrase:39,"management-pilots":1,assistant:22,freezing:5,Listeners:4,Bunker:2,"complex-valued":1,"reserve-draining":1,Pontiff:2,"Euro-cards":4,hinges:18,parasitic:1,Hound:2,hinged:17,orchids:4,Patricio:2,nouveaux:64,artistically:6,Optek:2,Patricia:2,redcoats:4,Batallion:2,"R.,Vitro":2,anyways:106,Ashtabula:47,heifers:4,Hendricks:2,Egalitarianism:2,"Kan.":2,misappropriated:32,Gulbuddin:2,That:473,ostensibly:6,sites:4,Elmhurst:2,Twentieth:2,Thad:2,Thai:40,Than:127,molds:4,Thal:2,vertical:3,Securities:474,capitalistic:1,concentrate:95,Tjokorda:2,Kann:2,Kano:2,mans:20,raddled:17,Kane:2,unamortized:1,Kant:2,Barberton:2,Whatman:2,Preferably:6,Timberlake:2,hurts:20,"very-highly":1,Morbid:1,Ivern:2,FSX:2,Rivoli:64,"H.M.S.S.":2,caring:5,swashbuckling:1,"sorely-needed":1,Stowey:2,Medieval:40,recaptured:17,bereavements:4,concede:149,damping:30,prototype:22,reflex:22,enable:42,"half-a-million":1,Analysts:123,antiquarian:1,nonqualified:17,diffuse:82,sharpshooters:4,Spiritual:1,profane:1,polls:18,"end-use":1,Supplementary:2,Wyeth:2,spotlight:25,aerosolized:17,Album:47,"grown-ups":4,Cooking:2,"gritty-eyed":1,Takanori:2,pinks:4,Rolodexes:28,binary:1,expenditures:18,missiles:4,"Latest-quarter":1,prevail:42,wiring:21,Rafferty:2,Cerus:2,mouldering:8,Tobruk:2,"non-contact":1,licit:1,"black-robed":1,barbed:7,Seto:2,boosted:32,Escape:128,Risparmio:2,"much-copied":1,Commonly:6,recapture:63,LIVESTOCK:11,Buser:2,customized:14,clobber:39,quixotic:1,Milwaukee:2,"earthquake-trained":1,"petroleum-products":4,"Gramm-Rudman":2,HBO:2,"Minneapolis-St":2,HBJ:2,safeguards:4,fateful:1,Smuzynski:2,"ex-President":40,jarred:32,Shugart:2,Tattingers:28,Regnery:2,unviable:1,"family-planning":3,Altama:2,starving:30,HOFI:2,around:475,delinquencies:4,scurrying:8,Baltic:66,Pricor:2,"MGM\\":2,"cuff-like":1,inexplicably:6,Neiman:2,"direct-mail":3,Notwithstanding:127,inter:476,Recognition:11,Matsushita:2,RALLIED:16,explaining:442,conditional:3,"blood-specked":1,perpetrators:4,Komleva:2,"revenue-neutral":1,MacLeishes:28,composers:4,"moon-round":1,memories:4,"grand-looking":1,Danubian:1,corrosive:1,Huricane:2,"M.D.":11,brats:4,Totten:2,UnionFed:2,"computer-aided-design":1,transformers:4,Freudenberger:2,Embryos:4,Expanded:17,Aswara:2,undercuts:20,Rosewood:2,Serge:2,cozy:97,"fifth-highest":1,origins:4,swarms:4,Mozambique:2,Terminator:2,slights:4,"starry-eyed":1,Stimson:2,shied:32,"less-visible":1,Magnus:2,headsets:4,Away:477,legged:1,screws:4,fishes:18,homeless:3,shies:20,Magnum:47,"Plain-vanilla":1,Estonians:28,dawned:16,hev:39,her:478,"ever-increasing":1,bristles:72,Heiwado:2,hey:106,Iliad:2,Veille:2,"over-broad":1,bristled:16,Englewood:2,verbatim:218,Mahfouz:2,Fosterite:2,"U.S.Japan":1,handsome:1,underdressed:1,rescuing:8,House:129,browbeaten:17,"mid-engine":1,"Soares-Kemp":2,telepathic:1,invigorating:8,"trend-followers":4,Thursday:2,Estee:2,lairs:4,"low-profile":1,Estep:2,appalling:1,"water-filled":1,"Glazer-Fine":2,Segalas:2,querulous:1,solaced:17,deterrant:1,misplace:39,Employees:56,"crack-induced":1,Thurow:2,midsize:1,Aspen:2,"paint-recycling":1,resell:392,Coolidges:111,"Soviet-Finnish":1,Leighfield:2,mask:24,mash:25,mass:479,"inter-exchange":1,Zeitung:2,sin:24,Hinzack:2,axles:4,bosoms:4,recapturing:8,"anti-rejection":1,Vincent:2,evicted:17,"Jean-Honore":2,Rickel:2,Hafetz:2,Harper:2,chewing:5,asterisks:4,Entries:4,uncounted:1,Rickey:2,overpowered:54,Honotassa:2,wavers:4,documentaries:4,Mitofsky:2,showings:4,CHILDREN:4,"often-repeated":1,Vivaldi:2,HOUSE:2,EXPRESS:2,dodged:32,"no-inflation":3,harry:39,Woodin:2,Heinemann:2,Candu:2,discriminates:18,"bond-holders":4,discriminated:480,Kangyo:2,Sylvio:2,Ifint:2,"product-design":1,Sylvia:2,crests:4,"F-20s":28,Rossilini:2,hormonal:1,misrouted:17,Restraint:2,Weichern:2,whirled:16,"lower-than-expected":1,Karolinska:2,immiserated:1,sentient:3,"prestige-sentitive":1,Herald:2,Luthringshausen:2,Latvian:66,Nonmagical:2,Feathertop:2,welded:17,transposed:17,Cone:2,Cong:2,reactors:4,Conn:2,"somewhat-ambiguous":1,"non-police":1,Licks:2,reacquired:17,"software-industry":1,"non-flight":1,homilies:4,expends:20,spooned:16,Cardinal:40,beheld:16,pulls:72,Varnessa:2,Medmenham:2,Fragin:2,"less-intrusive":1,Ovalle:2,Varese:2,amassing:21,"one-for-one":1,"check-ups":4,"still-daylighted":1,"sports-oriented":1,foundations:4,"meat-packing":3,Neumann:2,Nessel:2,Nessen:2,railroading:8,unvaryingly:6,Schlitz:2,merveilleux:64,prompt:347,"soak-the-rich":1,"off-the-books":1,Cautious:1,"cross-licensing":22,implausibly:6,Jackals:4,Marschalk:2,Dhabi:2,burgs:4,Basses:28,frivolously:6,att:127,glowing:481,Measures:4,relinquished:32,"half-century":22,sq:1,perversely:6,"second-tier":1,Baslot:2,"three-men-and-a-helper":1,blotted:32,Flags:123,waver:256,waves:4,ethics:91,Helpless:40,SKIES:4,decontaminated:17,refuse:95,rustlers:4,Conditions:4,ADMITTED:16,Elfner:2,inquire:39,"Mid-America":2,"M-m-m":106,Sophoclean:2,functionaries:4,Confutatis:64,Kronenberger:2,grasshoppers:4,JFK:2,Atwood:2,"mud-sweat-and-tears":1,furthering:8,Sotela:2,implausible:1,Dixon:2,stealin:8,laced:45,termed:32,"telegraphic-transfer":1,Oberstar:2,"anti-European":1,laces:4,lacey:3,tentatively:6,Grammar:2,Theirs:482,transbay:1,"anti-hooligan":1,Michael:2,Quadrant:2,speculate:42,"professional-level":1,homogenize:39,"trans-Atlantic":66,hereafter:6,Eagleburger:2,nauseous:1,Resistance:11,unsprayed:17,REGULATIONS:4,Petroles:2,found:345,shambling:8,dosed:54,safaris:4,Rose:2,reduce:42,Rosa:2,"Forest-products":4,jellies:4,Rosy:2,doses:4,Rost:2,"leadership-sanctioned":1,KangaROOS:2,Ross:2,embattled:7,Publicly:6,Rimes:2,Gander:2,Durlach:2,"tele-processing":1,Launches:20,"nuclear-power":3,meteorological:1,salute:25,Eskimos:28,demure:1,sublimed:17,belies:20,qualify:42,conditioning:21,housebound:1,WESTWOOD:2,owners:4,Younis:2,"spike-haired":1,"Oopsie-Cola":2,Years:56,"reorganization-plan":1,sensations:4,longneck:1,warheads:4,Imhoff:2,Verplanck:2,rooted:14,belligerent:1,Reverend:2,IFIL:2,sacrificial:1,DREXEL:2,Chesterton:2,unpleased:17,Hopei:2,guest:22,Rude:40,Rudi:2,"month-old":1,Brigantine:2,omnipresent:1,Elmsford:2,Plantations:92,crow:25,Hopes:4,Rudy:2,"intra-state":1,warmly:6,Clarkson:2,lavished:32,Straightened:17,satirical:1,crop:483,Dumont:2,endlessly:6,thawing:8,"non-democratic":1,polarized:17,Mantle:11,layouts:4,"runners-up":4,MetWest:2,TUCSON:2,Floats:20,shellfish:19,teensy:1,suffocating:30,canceling:8,beforehand:6,pedestrian:3,"George-Creque":2,Overnite:2,freakishly:6,"hand-sized":1,Comique:2,Dobbins:2,Micronic:2,knobs:4,"three-part":1,"thyroid-stimulating":3,"eagle-eyed":1,yearbooks:4,Underscoring:8,"under-three-years":1,"securities-law":22,darts:19,Yaklin:2,Harpo:2,"women-owned":1,"Counsel/NNP...":102,"Roussel-Uclaf":2,lessons:4,majoritarian:1,actionable:1,Cost:47,herniated:17,Honduran:1,dragged:54,Prapas:2,Braque:2,cruises:4,Drenched:1,Freon:47,secretaries:4,lengthwise:218,Wedel:2,freight:25,"Man-Made":1,Fatal:2,Fatah:11,"pre-existent":1,Exports:57,Southerner:129,"Cie.":2,dwindled:32,Istel:2,competently:6,Pitfalls:4,Arundel:2,Travellers:4,Confederate:129,"hush-hush":1,Defense:11,Danube:2,banned:54,"January-March":2,Slocum:2,Tarkington:2,Code:2,"Atomics\\/Combustion":2,quizzed:16,deductive:1,Gruller:2,"radiation-protection":1,Suzman:2,Coda:2,carbines:4,Haynes:2,Cananea:2,"Arizona-related":1,"Plasti-Bars":2,McCormack:2,unqualifiedly:6,largesse:25,eradicating:8,"re-edited":17,startup:22,potent:1,backfire:42,"gas-turbine":1,baritone:22,"sliding-rate":1,demons:4,"weapons-control":1,Ilona:2,Idris:2,prodigally:6,"black-haired":1,Viva:64,screeched:16,Vive:64,enclosures:4,Mezzanine:2,Browning:2,Martinsek:2,Kobacker:2,respondents:4,screeches:18,Weickerian:1,Leona:2,Leong:2,Leone:2,preponderantly:6,Jason:2,Carena:2,Pittenger:2,Brawer:2,Declines:4,Merighi:2,Todd:2,"farm-supply":1,Irelands:2,"Stocks\\/Mutual":2,Nobel:2,Duriron:2,frosty:1,"U.S.-Mexican":66,Reuling:2,Harwood:2,Plews:2,Rousseau:2,"four-minute":1,KVDA:2,adornments:4,Weirton:2,Tagg:2,Watt:2,raced:16,champion:139,paddles:4,races:18,representative:22,systematic:1,packers:4,doctorates:4,"two-party":1,Journeys:4,Orem:2,"far-sighted":1,Northbrook:2,medically:6,"public-spirited":1,Oncogenes:4,leaning:8,Englishwoman:2,Stelco:11,occlusive:1,ContiTrade:2,clucked:16,Dairymen:2,pacemakers:4,Telzrow:2,Kanska:2,AWAY:484,Kulani:2,actuaries:4,"recently-announced":1,Sinfonica:2,involutions:4,stung:54,Harnessing:8,knitting:55,Leatherman:2,understating:8,Lines:41,Liner:2,Nisshin:2,nouns:4,"Italian-made":1,selfdamaging:1,Limited:71,"then-president":1,flagpoles:4,alleging:8,italicized:17,normals:4,theatres:4,equilibrated:17,"airline-related":1,Villages:4,befuddled:32,jerkings:4,stunt:25,befuddles:20,mistresses:4,Kogyo:2,Orens:2,Krisher:2,"pro-abortion":1,"one-square-mile":1,"A.O.":2,Breaux:2,jutting:8,Palomar:2,skateboards:4,suffering:5,baskets:4,entrenched:45,Kucharski:2,"blue-collar-mail":3,Boneh:2,d:485,"anti-liquor":1,squandered:54,Methodist:40,Yardeni:2,Highly:150,"played-out":1,continue:42,yields:18,Methodism:2,Kochitov:2,Bones:4,Cason:2,NRDC:2,partying:8,spring:44,Retrovir:2,Fahrenheit:11,attics:4,Scot:11,thermostats:4,curious:1,Collischon:2,"gun-running":3,Bittker:2,Schwalbe:2,"heavy-armed":1,"on-the-job":1,transactions:4,Aloft:1,Railbikers:4,BS:2,convulsions:4,"three-dimentional":1,slopping:8,Assimilation:2,"rural-care":1,Brady:2,overallotments:4,Rianta:2,Lagrange:2,sanguineous:1,departures:4,digitizes:20,Wenham:2,shadings:4,IVF:2,MERRILL:2,PCBs:4,Deaconess:2,"won-lost":1,weatherbeaten:1,Ottoman:2,forearms:4,Aussedat:2,Narrowly:2,"junkbond-financed":1,NEG:2,NED:2,Gujarat:47,NEC:2,Styron:2,"blue-carpeted":1,NEW:117,Scarborough:2,depositors:4,striven:17,"retail-brokerage":1,strived:16,Tokai:2,"anti-program":1,suit:486,Smoking:321,Yuan:2,strives:20,Should:487,Baptist:488,"hoo-pig":106,inches:170,graciously:6,slump:24,"well-regarded":1,slums:4,inched:32,"highest-yielding":1,Sergei:2,refinancing:21,Minnesotan:2,yeller:1,burrows:4,up:489,us:53,um:490,un:147,uh:106,"last-minute":3,ascertainable:1,"short-dated":1,yelled:32,storing:55,parses:20,consigned:32,"pollution-causing":1,hangups:4,thugs:4,Durcan:2,fixing:55,"post-crash":1,"specialty-printing":1,Kalyagin:2,deviate:39,Bagley:2,ferried:32,Espectador:2,lucid:1,"garbage-in":1,cranking:8,Zug:2,ferries:4,"anti-Fascist":1,leaflets:4,Timbers:2,Revolutionibus:64,duopoly:6,"walk-through":1,holes:4,Webber:2,KGB:2,KGF:2,fresh:491,holed:54,having:8,Rotan:2,melts:20,knotted:103,tattered:7,Kennington:2,soften:39,"ex-investment":1,softer:154,Summarizing:8,coverts:4,Gerstenblatt:2,"Del.-based":1,longstanding:1,edgewise:6,Miserables:64,"Volvo-Renault":2,Designed:17,Bottoms:4,glees:4,"On-Line":40,treasures:4,pestilent:1,stocked:54,Noffsinger:2,creeps:20,panting:5,Schechter:2,"semi-city":1,"anti-fraud":1,wipe:42,Medford:2,"FFr1":2,Forellen:2,Maurice:2,"Y-MP":2,Dennison:2,racy:1,"huh-uh":1,Hoagy:2,discounting:308,Mervyn:2,"near-completed":1,Telaction:2,Agence:2,Buente:2,licensed:45,"two-button":1,imply:42,Graedel:2,licenses:18,Parodis:4,graduating:55,Bonavia:2,Janes:28,Janet:2,aboveboard:1,Yontz:2,Waukegan:2,Achieving:8,consistently:6,Cuddeford:2,polluting:30,sixth:97,Ferencik:2,Rumscheidt:2,Campagnoli:2,Prior:6,Giamatti:2,Kuhn:2,technical:1,Odors:2,inoperable:1,Immortal:2,resulting:492,buffered:54,Starke:2,outcomes:4,unmasculine:1,"now-dismembered":1,"million-mark":1,Pripet:2,causal:1,Younkers:113,Korn:2,exciting:13,Kori:2,"ivy-covered":1,DRUGS:28,Millburn:2,McCollum:2,pedagogical:1,Drag:39,irrepressible:1,"Sony-Columbia":66,humorless:1,forefathers:4,midday:163,Kors:2,Himont:2,cathodophoretic:1,Eastland:2,ESTATE:47,Beadleston:2,"Smith\\/Greenland":2,Koppel:2,DEVICES:2,unplug:39,"first-section":1,rubbish:22,Yokogawa:2,Hironaka:2,Oxnard:2,Donics:2,prompts:20,Marjorie:2,Scandinavians:28,Spirituals:4,emphatically:6,nonliterary:1,slid:493,perfecting:8,pelvic:3,slim:82,Liberation:2,slit:25,tantrums:4,slip:182,Brelin:2,Duties:113,mullets:4,Phelps:2,delay:44,"non-propagating":1,"second-story":1,"higher-fat":12,paternally:6,palates:4,manacles:4,McGowan:2,Keansburg:2,Reprisals:4,eminences:4,Hive:2,graveyards:4,fits:72,hawk:24,Cleva:2,"non-Greek":1,Centers:494,commodities:4,Lybrand:2,"pollution-free":1,antelope:19,"cross-dressing":1,Tennenbaum:2,"future-day":1,Barnumville:2,deducing:8,chosen:14,snouts:4,"non-farm":1,blistered:17,diluents:4,winners:4,"quite-comfortable":1,"bakery-mix":1,mitigates:20,Wholesale:66,outlined:45,"SKr225":4,innermost:1,launder:39,Cardiac:2,Aliber:2,legendary:1,Social:495,"golfers...":102,outlines:18,presidential:1,regionalism:1,minimalist:3,wallowing:8,Titans:4,Haumd:2,WestLB:2,expectantly:6,Willard:2,Poodle:2,Steiner:2,stepmothers:4,castigate:39,Grips:4,Zubin:2,benefiting:8,Chebrikov:2,"community-oriented":1,antimissile:1,motifs:4,hilarious:1,Photographic:1,"eye-filling":1,Qintex:2,delineate:39,Sukuma:2,subsiding:8,uncontrollably:6,"pre-publication":1,"spill-related":1,graze:149,tresses:4,"cutting-edge":3,Cathodic:2,shortest:51,Lesser:2,reposed:32,"top-of-the-line":1,Point:129,Cravath:2,Ackerly:2,put:496,qualifying:8,Ulbricht:2,ultramodern:1,Shearing:2,staggered:85,yells:20,Blomdahl:2,Hasse:2,Calgon:2,"quasi-mechanistic":1,Kempner:2,"self-help":326,suppositions:4,Grigsby:2,"over-spent":1,"pre-Reagan":1,"instruction-set":3,inalienable:1,"institute-sponsored":1,fouling:21,Actual:1,"Half-time":1,difficult:1,disengage:39,Housman:2,Hastily:6,meanin:55,"exposure...":102,bother:42,reacted:32,extravaganzas:4,"animal-based":1,rollercoaster:22,Afrika:2,collecting:55,trusting:13,gently:6,reassuring:30,gentle:82,Eidsmo:2,defending:30,fourteenth:1,"C.S.":2,affinities:4,Mutants:4,Pockmanster:2,hungrily:6,Compiled:17,Rickenbaugh:2,awed:14,waffles:4,"public-service":3,astride:127,waffled:32,"flash-bulbs":4,awes:20,Borrowers:4,Conservatory:2,unobtrusively:6,pitches:18,"Journal\\/Europe":2,Moudy:2,"old-age":1,Godunov:2,gussets:4,midmonth:6,ratifying:8,Lindemanns:28,philosophers:4,MCI:2,tramps:20,ambitions:4,MCA:2,"five-point":1,Aquinas:2,mechanical:1,recoil:78,painting:21,incarcerate:39,Shawnee:2,Heyden:11,"public-transit":1,Whitmore:2,Cablevision:2,"net-capital":1,briny:1,Daley:2,Rangers:28,Manoplax:2,Waste:128,pitched:85,principal:202,"anti-gay":1,burnished:17,noir:64,timpani:4,Experimenting:8,should:190,buttons:4,"reading-rooms":4,"ever-changing":1,bomblets:4,meant:32,capsules:4,means:132,Telesystems:113,impinging:8,McBee:2,Salaries:4,Wankui:2,Nightingale:47,shaping:55,Sinner:2,Fleury:2,Because:206,Jacobite:2,unexecuted:17,"extra-sensory":1,glossed:32,default:25,"neo-fascist":1,unfeasible:1,favoring:8,Hock:2,"low-rated":1,"international-leasing":1,indecisive:1,correlations:4,meted:54,packed:81,"Human-rights":4,Ariane:2,"fill-or-kill":1,Terminals:4,Meatheads:4,taunting:55,cloudless:1,"score-wise":1,"fire-colored":1,ends:18,"court-approved":1,drachmas:91,butts:18,hogging:8,rejoins:20,reappears:20,"covert-operations":4,mooing:8,observable:1,"non-striking":1,Devotees:4,invited:54,PERSUADING:39,"Sky-god":2,Holyoke:2,Lindsey:2,"cents-a-share":1,trumps:4,"government-sanctioned":1,"Four-fifths":4,Scribe:216,invites:20,Inspiring:30,"half-cocked":1,Pietermartizburg:2,stranding:8,Sartre:2,Girls:113,distil:39,"nine-to-five":1,subsedies:4,whispering:55,"higher-density":1,"specialist-firm":1,keying:8,pulsated:16,Monmouth:2,Bruccoli:2,"music-loving":1,Pensive:1,Phone:47,hawking:55,transporters:4,chastised:32,"Harlan-Hickory":2,Tremblay:2,"high-positive":1,Stadt:2,hindquarters:4,chastises:20,Knights:46,toasting:8,Pledge:2,affirmative:3,"Innis-Maggiore-Olson":2,"Push-Pull":2,Ciriaco:2,"Index-linked":1,Bingaman:2,discoveries:4,"iron-shod":1,globalizing:8,concerted:7,whitewashed:17,"reverse-surface":1,appalls:20,"ice-free":1,"loosely-taped":1,"rhinovirus-receptors":4,Fitting:8,askew:6,"Gre.":2,upmarket:1,"publicly-held":1,"organ-transplant":3,concealed:81,Asch:2,lengthening:8,Safer:2,"now...":102,Podolia:2,Carmer:2,Tribunal:2,Grew:16,drink:24,Prendergast:2,cafeterias:4,Greg:2,Midas:2,Carmen:2,Carmel:2,pleasantly:6,"labor-intensive":1,fascinate:42,fully:6,shacks:4,"do-good":1,"fuel-neutral":1,Need:497,Sapporo:2,renegotiated:54,Closer:68,reprographic:1,immortalized:17,Fuming:8,"fine-point":1,Cave:2,"actress\\":1,Negroes:41,"Herrin-Murphysboro-West":2,Deltacorp:11,outleaped:16,Corcoran:2,clipped:54,exempt:82,memorandums:4,Heroic:2,"multi-media":4,"know...":102,Clemente:2,Logsdon:2,checking:55,Capacitors:2,Clements:2,humors:4,supervise:42,whopping:1,airports:4,passable:1,evildoers:4,"willow-lined":1,redound:39,Ruys:2,shuddered:16,philanthropies:4,nerves:4,Ambroise:2,inexperienced:1,Arrowhead:2,Ansco:2,hypersonic:1,uncharacteristic:1,algebraically:6,habits:4,pacifistic:1,treks:20,crudely:6,Eugene:2,Cutrere:2,cruelest:51,Marcus:2,"random-access":1,Sundor:2,blowing:498,Solon:2,"out-compete":39,Aziza:2,staccatos:4,"dollars...":102,Solow:2,Proefrock:2,Alsatians:28,Unveiling:8,Foreclosure:2,"left-justified":1,gazing:8,whistled:32,accusers:4,Dependent:40,Uh:499,Dukakises:2,Broader:12,Erburu:2,Harlingen:2,Sommer:2,stockynges:4,centrist:1,Speakers:4,rectify:39,delenda:64,longings:4,assess:42,Labour:2,protozoa:4,"withholding-tax":1,larvae:4,Frauds:28,Omnibank:2,Contrarian:1,larval:1,Wiener:2,impeding:8,pool:24,proliferating:8,Berbera:2,insanely:6,FE:2,Mondrian:2,Artistes:2,"savings-and-loans":1,Hutchinson:2,shamanistic:1,lowered:112,Reggie:11,Chelsea:2,compute:39,multinational:1,gravitational:1,imbalances:4,"J.Y.":2,"one-family":1,Leverkuhn:2,tertian:1,appraise:39,undecideds:4,Karen:2,contribute:42,availabilities:4,unsavory:1,Scrapiron:2,"r-Revised":342,readjustments:4,Bearden:2,Utah:2,Yesterday:500,scholarly:1,"proto-Yokuts":4,Janachowski:2,"test-practice":1,predominant:1,Pompadour:2,reckless:1,jumbos:4,Geraghtys:28,Acquiring:8,Vitus:2,Shokubai:2,"Middle-class":1,townsmen:4,"six-year-old":1,draperies:4,"OCN-PPL":2,SRS:2,amahs:4,"influenza-pneumonia":1,hedges:4,Isuzu:2,ticketed:17,Constantinos:2,"Barber-Greene":2,domponents:4,"mid-size":1,"By-the-Sea":2,controversial:1,superefficient:1,defraud:39,Madelon:2,Vince:2,obsoleting:8,Shirley:2,Ovcharenko:2,Patriarca:2,Rakestraw:2,Patriarch:2,begrudge:39,expectable:1,"used-car":22,tagging:8,manes:4,Hefter:2,pique:104,"semi-nude":1,"pro-Europe":1,"HIV\\":2,"chest-back-shoulder":1,Kinsey:2,triumph:25,fliers:4,monotonous:1,bubbling:55,"ice-filled":1,"long-standing":1,Available:1,meekly:6,Culture:11,"P.L.":11,"Kawasaki-Rikuso":2,revolutionize:39,"no-tax-increase":1,Sonata:11,frank:3,Downstairs:163,Bourgeois:2,festive:1,revels:4,Stinnett:2,kindred:1,conglomerate:22,Hassenfeld:2,"flower-inscribed":1,watchers:4,Constellation:2,"plain-spoken":1,unhelpful:1,"F.A.":2,Unveiled:17,browsing:55,Novalta:2,Winch:2,envious:1,"stripped-down":1,Connery:2,"one-shot":1,"pre-nuptial":1,Reporter:11,motivate:42,negative:3,"voice-altering":1,mightiest:51,Pflaum:2,toneless:1,memoranda:4,Pezza:2,Hamiltonian:1,GOODY:2,award:24,Teams:4,Golenbock:2,"ever-swelling":1,Geldermann:2,characterize:42,Molard:2,theories:4,"custom-design":1,Walsh:2,Chorrillos:2,workstations:4,BEARS:2,Bruns:2,Sealey:2,grandees:4,Brunk:2,Bruno:2,Sealed:2,"Dollar-Britten":2,hatted:17,Passat:2,validated:17,"substance-abusing":1,acrobatic:1,Welsh:40,Leger:2,"one-liners":4,"Pru-Bache":2,interview:25,types:4,Gilts:4,cherubs:4,Aliah:2,Nikkhah:2,"melt-textured":1,"castle-like":1,Grgich:2,"Place-names":4,midlands:4,strategists:4,witching:3,Lifestyles:111,"IV-drug-free":1,hasty:1,"government-managed":1,retort:44,"red-blood":1,extirpating:8,arterial:1,infested:14,decide:42,Walbrecher:2,Colonial:40,Vons:28,Regatta:2,Meister:2,Tips:2,bombing:21,highlights:72,"ex-smokers":4,Velasquez:2,workable:1,bespeak:33,Fairview:2,versus:501,stabilities:4,woken:17,"mid-50s":4,exhaled:16,"fresh-ground":1,affianced:17,rocky:1,tampering:55,Librarians:4,"five-days-a-week":1,absolve:33,rocks:18,artifical:1,"four-fold":97,"Af-inch":1,lifted:32,schemes:4,kneels:20,"pro-NATO":1,Confess:39,Stelzer:2,Antoine:2,tultul:64,accompnaying:8,Konikow:2,ratepayers:4,transcends:20,motorized:14,Crucians:28,prohibitions:4,jiving:8,"non-liquid":1,attested:54,Tredici:2,"market-stabilizing":1,dishwashers:4,veto:25,Tomkins:2,Sirowitz:2,Havisham:2,mourning:55,campaigns:4,LIES:20,"V-1":2,"pro-democracy":1,"no-valued":1,Yasuo:2,Kageyama:2,"fishing\\":1,volatile:1,buys:72,created:45,September:2,Torah:2,creates:20,regress:39,Contrary:1,Oji:2,Bridges:130,Padovan:2,vulgar:1,daunting:13,Gamecock:2,Bridget:2,pots:4,Ackerman:2,"Bauer-Ecsy":2,sparse:1,"Gen.":2,guzzle:39,thick:34,"mid-19th":1,"four-engined":1,Uncle:11,observations:4,snags:4,Selena:2,lunatics:4,filibuster:25,pinpointing:8,Ajit:2,happily:6,besuboru:64,haflis:4,Chattanooga:2,Geno:2,"factory-outlet":1,Koyata:2,tabloids:4,"random-storage":1,Gene:2,Kurnit:2,Penal:2,scenes:4,TUC:2,minus:502,Sayre:2,"freight-cost":1,effectuate:39,Kisen:2,"dog-eat-dog":1,constellations:4,Hauser:2,dabbed:16,"high-minded":1,Isao:2,quieter:12,MacIsaacs:2,laden:322,"American-Jewish":1,hamper:63,quieted:32,Library:11,"fruit-flavored":1,Reinisch:2,transmit:42,correlating:8,writhe:25,Frozen:17,Computers:41,"Bessie\\/Harper":2,Ryder:2,exercised:45,Korea:2,Wenz:2,Sieckman:2,exercises:18,Andrus:2,Went:16,Atsushi:2,alumni:4,Scene:11,voulez:64,missed:112,Skaggs:2,Egnuss:2,theatrically:6,Tombigbee:2,"pre-trading":1,Monitor:2,Opaque:1,doped:1,damed:32,"number-crunchers":4,"Ralston-Purina":2,Ganges:2,"cherry-flavored":1,steadying:1,Anna:2,European:10,"coup-makers":4,"pant-legs":4,Judsons:28,"easy-to-reach":1,"Security-Connecticut":2,deepest:51,firebombs:4,Fiscal:10,cardinals:4,"going-private":1,gored:17,Quick:503,Bahia:2,monologues:4,Concertante:2,Fife:2,winos:4,covering:55,idioms:4,Clinic:2,pointers:4,Functionally:6,"half-percent":1,Luxurious:1,uninhabited:1,"w.":1,Rivals:4,Foster:2,cattle:91,Longhorn:2,Hardly:6,Indonesian:66,Comprehensive:40,Water:11,"Ben-hadad":2,counterattacked:16,"payout-bylaws":4,failings:4,"warmed-over":127,ocular:1,terms:18,Inevitably:6,wo:190,Gignac:2,"patty-cake":1,"sleek-headed":1,McFee:2,Danilow:2,admirals:4,"Gumbel\\/Walt":2,convertible:3,overestimated:32,electing:8,foes:4,"Chicago-Paris":2,Guidelines:4,didactic:1,Boliou:2,brag:95,brah:64,Cokes:4,kronor:504,"year-end":168,"fresh-perked":1,dawdled:16,headlights:4,condemned:81,Kean:2,Seemingly:6,Divertimento:2,Cleaning:55,"co-anchor":22,droplets:4,"sequence-tagged":1,"Dream-Torkin":2,fest:318,"scaled-backed":1,XYVISION:2,deterred:54,vaccinating:8,Percussion:2,launches:72,stubs:4,air:505,aim:24,trumpeted:32,aid:44,inspired:81,launched:506,paeans:4,plateful:1,Baltasar:2,"V.O.":2,VWR:2,electromechanical:1,uplift:25,slighting:8,Roseanne:2,Willcox:2,Petitio:2,Pratt:2,Gerlinger:2,"air-freight-forwarding":1,hierarchies:4,Amaral:2,palpably:6,noncommercial:1,palpable:1,"de-emphasize":39,"commodity-price":1,prescribed:81,Addressing:8,diagramming:8,episodic:1,peacocks:4,Charlestonians:65,"television-related":1,Wartzman:2,contact:70,prescribes:20,droppers:4,analyzable:1,"white-coated":1,Swank:2,Picchi:2,Parkland:2,kali:64,"anti-social":1,Editors:4,nondrying:1,bandied:17,"new-spilled":1,eying:8,tyrannize:39,"re-activate":39,board:275,marginal:1,Thornburgh:2,expelled:54,progressed:32,KODAK:2,Try:42,"Thomson-CSF":2,vies:20,cosmical:1,progresses:20,"non-employee":1,Lizt:2,Arpege:2,bogeys:4,"super-regional":1,Liza:2,"self-portraits":4,reinterpreting:8,augur:33,"hard-hitting":1,Naperville:2,"non-party":1,honored:81,lashes:4,Cirona:2,Sunbird:2,eyeing:8,lashed:32,Sheraton:2,treasurers:4,somersaulting:3,"Ear-Muffs":28,Boltz:2,"/":22,mulls:20,nuzzled:16,"Jupiter-bound":1,Judea:2,beating:55,haberdasheries:4,JYJ:507,Medgyessy:2,Micronics:2,"cash-strapped":1,"home-grown":1,Ebasco:2,"third-tier":1,"GM-10s":2,"budget$":84,constructive:1,flinching:8,Baxter:2,callable:1,Strickland:2,goldbanded:17,"Chinese-Soviet":2,"three-meter-high":1,Simba:2,hazes:4,Popoff:2,Dauphine:2,FEARS:4,bound:508,Hopi:2,Tipperary:2,Insider:129,"non-controlling":1,crags:4,capped:112,Judging:210,croaks:4,Sarandon:2,mutates:20,divertimento:1,Reptilian:2,mutated:17,Oakhurst:2,herdsmen:4,tints:4,converse:63,"Minn.-based":1,"less-established":1,Novello:2,PRESIDENT:47,restive:1,true:1,Left:509,nationwide:97,absent:82,Menuhin:2,undefeated:1,liens:4,"Alar-style":1,anew:6,inquiring:13,lowering:55,Purvis:2,lumped:54,"warm-red":1,Fieldcrest:2,write:42,"fast-food":22,topped:32,Jolliffe:2,frolic:25,quickening:8,"growth-suppressing":1,EXXON:2,declassifying:8,Isoda:2,"Daisy-Cadnetix":2,Koran:2,concurrent:1,"vacuum-formed":1,Krohn:2,"five-and-twenty":1,Macksey:2,governed:81,outlive:39,collared:17,WBAI:2,loyal:1,rainier:12,"telephone-network":1,erased:54,deigned:16,Goetz:2,"quality-conscious":1,margined:17,unmixed:17,Bowenized:17,Marsha:2,Britches:4,adamantly:6,Cassiopeia:2,Yamabe:2,Palme:2,killings:4,Bold:2,sacked:32,Beregovoy:2,Finis:2,Boll:2,"co-presidents":4,Fritzie:2,decking:21,pondered:32,Gentile:2,"Eighty-Eight":2,"non-accrual":1,Kodiak:2,entries:4,"non-metallic":1,perceived:45,Parker:2,PUTS:28,Just:510,Kiddie:2,"womb-to-tomb":1,shuttering:8,perceives:20,SR:2,woven:14,unsubsidized:1,"three-dimensional":1,WoodMac:2,Berche:2,Bert:2,purchasers:4,curse:25,appear:42,Surlyn:2,Georgian:66,pleasingly:6,Berg:2,consortia:91,Imaging:2,pulsating:8,Imagine:216,appeal:24,consolidations:4,Conspicuous:1,Momoyama:2,vocalists:4,oscillating:8,"fast-grossing":1,fractious:1,Jittery:1,suckers:4,Jerral:2,Sells:511,"pesticides.``":133,Alvear:2,incoming:13,Reservoir:2,impatiently:6,SF:2,depositions:4,pictorial:1,Staggeringly:6,"tax-revision":1,"Flav-O-Rich":2,penalizes:20,"mild-winter":1,Murrow:2,Amonasro:2,outfly:39,jolts:4,stings:4,penalized:54,stingy:1,prove:42,Legent:2,territories:4,BSN:11,"non-Big":1,"ca.":325,cuter:12,BSB:2,anemias:4,Pity:59,hesitates:20,Pitz:2,symptomatic:1,absorptions:4,commissioned:54,hesitated:32,containing:8,fingered:32,"Air-raid":1,Fyodor:2,unsung:1,"rapidly-diminishing":1,Lieb:2,organizations:4,Klute:2,Lied:2,indescribable:1,Magnetic:1,cap:24,abacuses:4,undiversified:7,hardest:512,renders:20,can:513,"pepper-coated":1,"room-rate":1,Hirschfeld:2,"book-to-bill":3,nonpaying:1,o:514,repackaged:17,Varigrad:2,"Actor-Crooner":2,McNichols:2,haulers:4,unwavering:8,Backer:2,Bitter:1,freezes:72,Firemen:4,Marshes:2,Eaters:4,Pericles:2,"pinch-hitters":4,deviated:32,Matsuo:2,backlots:4,deviates:20,Ablard:2,Whitfield:2,Metropolitan:2,"Grishaw-Mueller":2,priestly:1,"electrolysis-of-water":1,Heeding:8,Celnicker:2,hightops:4,deactivated:17,Aichi:113,"Dream-Miss":2,"WNBC-TV":2,deactivates:20,restructurings:4,Compress:39,quibs:4,"medical-test":1,Rogers:2,Fall:128,Peralta:2,Panzhihua:2,tails:4,woodchucks:4,denominational:1,Interfering:8,Phalanx:2,Milt:2,intrigues:4,chuckled:16,scarcer:515,"still-commanding":1,Bressler:2,chuckles:18,Redford:2,intrigued:14,Mile:2,Mill:2,skirmishers:4,Milk:47,"back-issue":1,sobbingly:6,Pere:2,Perk:2,directing:55,hurried:112,"T.H.":2,Suzuka:2,Peru:11,hurries:20,happen:42,Suzuki:2,Mythical:1,irons:18,Assess:39,shadowing:21,antiwar:1,communicating:55,worshiped:17,Mimieux:2,increase:44,Threads:4,rational:1,"side-by-side":6,ruinous:1,Conte:2,"Af.":11,punky:1,cars:4,carp:174,punks:4,INTENSIVE:1,intruding:8,caro:64,counteracted:54,ominous:1,Belmonts:28,care:44,Gulick:2,beautify:33,McCurry:2,Linker:2,"billion-a-year":1,entrusted:17,Partisans:4,Linked:17,diocs:4,"low-end":3,"high-power":1,Bois:2,Titche:2,indecent:1,untrue:1,Templeman:2,drove:250,truthfully:6,checked:45,waned:32,crossings:4,"mortgage-insurance":3,undergrads:4,"triple-checked":16,national:34,Garratt:2,wanes:72,dismembered:16,Segura:2,"needed...":102,asides:4,quam:64,Hobart:2,Nairobi:2,DataPlan:2,"model-year":1,bastions:4,monopolies:4,Starling:2,unimpeachable:1,"profit-oriented":1,incepted:16,Yasumichi:2,"sea-damp":1,troublesome:1,contentious:1,"consolidated-pretax":1,Locking:8,punctually:6,comfy:1,distorted:45,"fetal-protection":1,Trash:59,USIA:2,Okinawa:2,USIS:2,deux:64,Hadson:2,Aggie:2,uncousinly:1,Hillyer:2,Mijbil:2,price:24,affirmations:4,KSAN:2,successive:1,"]":167,Childhood:11,SSMC:2,forever:6,Scrabble:2,unamended:1,underestimates:20,"well-rounded":1,thefin:8,rambling:22,operagoers:4,mains:4,"U.S.-made":1,Alquist:2,Hoopla:2,Ruhollah:2,"low-acid":1,REITs:4,Southwest:180,Chautauqua:2,Hisao:2,saints:4,Kiang:2,Jacoboski:2,deployments:4,"computer-unit":1,inventions:4,misquoting:8,Banerian:2,overwritten:1,"Angeles-Pasadena":2,shepherding:8,grossing:8,Barring:8,peritoneal:1,Sidak:2,Burnand:2,denting:8,Haydon:2,Capitoline:2,unsaleable:1,"ad-hoc":1,"long-dominant":1,shareholdings:4,indeterminable:1,crotchety:1,effectual:1,quickie:22,gleamed:16,nonspecifically:6,physically:6,Bankcard:2,Hofstra:2,asleep:218,CBC:2,"char-grilled":1,Catalonians:28,exterminating:8,decidely:6,incite:42,Tons:4,Wetter:2,Leeds:2,Rostagno:2,Coordinating:2,Heffer:2,Golly:106,"sun-burned":1,Scenic:1,blame:182,sinecures:4,Delaunay:2,Thaxter:2,pertain:149,"Oh-the-pain-of-it":106,Through:124,newfound:1,evict:39,mites:4,Jeremy:2,diachronic:1,Jose:2,Pictures:41,deviating:8,"Flite-King":1,ASSOCIATES:74,"Chinese-inspired":1,evangelists:4,"eight-team":1,"upper-house":22,Sportscasters:4,McWilliams:2,Tylan:2,Stick:59,Tanks:4,prurient:1,linguistic:1,jerky:3,marrowbones:4,Harpener:2,confectionary:1,Portsmouth:2,rubs:18,Ravine:2,Pasley:2,"P-E":11,"purse-snatchings":4,regurgitating:8,Schnitz:2,"pistol-packing":1,freely:6,thrillers:4,Manuela:2,ein:64,Herdman:2,alcoholic:3,AIW:2,"health-care":22,AIR:11,AIM:2,Hammacks:74,pleads:20,attributed:32,AID:2,AIG:2,Silberberg:2,AIA:2,"de-iodinating":30,farmwives:4,"quarter-to-quarter":1,Sturgess:2,halogenated:16,Dorrances:28,Conquete:2,"image-making":22,followers:4,"Co-cola":2,"mouth-watering":1,"n-dimensional":1,petted:17,adipic:1,Rowswell:2,bigoted:1,anecdotal:1,Beaver:2,smelt:32,alligators:4,Prosopopoeia:2,enchanting:1,Bogota:2,Dass:64,constitutional:1,Dash:11,"Rep.":2,Heliopolis:2,"well-fleshed":1,"calculator-toting":1,"emergency-medical":1,comment:95,GIMMEE:106,Barco:2,valuable:1,fleeced:17,unstaring:8,WAFA:2,Niepce:2,"temblor-prone":1,geographically:6,Lewinton:2,"young-skewing":1,fussily:6,warms:20,zany:1,Exporters:28,unfold:42,"non-clients":4,Pietruski:2,rules:18,"counter-successes":4,calendars:4,briefest:51,listening:55,unaccounted:1,culprits:4,Toney:2,"snail-like":1,commend:42,conversing:8,dislodged:32,Palmer:2,"everyone...":102,greeting:27,Interpore:2,Nuveen:2,Seniors:123,Thea:2,Alfred:2,bespectacled:1,immovable:1,Daytona:2,fairs:4,"post-mortal":1,"U.S.-China":40,Vowing:8,Customs:41,fullyear:1,cleansed:32,Earl:2,pylons:4,JUST:6,Crunch:63,radial:1,Schumpeter:2,uneasy:1,Undugu:2,"reader-friendly":1,Earp:2,throw:95,Ears:4,supervises:20,trekked:16,previsions:4,Guadalcanal:2,supervised:85,wold:190,"rate-tightening":1,Knowlton:2,flashbacks:4,"Parichy-Hamm":2,"inflation-created":1,numerically:6,skunks:4,Jesperson:2,"law-school":22,"male-headed":1,Gutenberghus:2,removing:8,Stabenau:2,backbench:1,"school-research":1,"nerve-ends":4,greying:8,Sewing:116,indicators:4,Carlin:2,Lancia:2,Naster:2,Strapless:2,Cagliari:2,Commitment:2,quantitatively:6,Highways:516,postures:4,"two-disc":1,naysayers:4,SEEQ:2,"stiff-backed":1,"mid-January":2,Fleming:2,SEEK:39,statuses:4,Prometrix:2,NLRB:2,"Data-destroying":1,Reach:2,Palladian:2,snuffed:54,CompuServe:2,suites:4,esthetic:1,Fernando:2,computerized:517,Outsville:2,suited:54,Cashways:28,CityFed:2,redecorating:55,airheads:4,Paragould:2,"Pedigree-contemplating":8,Fromm:2,"hard-working":1,Fancy:40,untidy:1,Feders:2,"judgment-proof":1,outlining:8,skeleton:22,ESPN:2,Fernand:2,"neutrino-sized":1,Brandhorst:2,contortionists:4,Chadroe:2,refocus:39,federalize:39,equate:42,"interior-furnishings":4,ESPs:65,Salk:2,Sala:2,Compassionately:6,Sale:11,maladjusted:1,Salt:128,Tortoises:28,concurring:8,isms:4,louis:4,unfailingly:6,"state-level":1,mutterings:4,ogling:8,"Triple-A":40,Gulag:11,Stoecklin:2,CAMPAIGN:2,colossal:1,Grandmother:2,Jessey:2,overturns:20,Generalized:2,keening:21,"gentler-sloping":1,Giurleo:2,ecclesiastical:1,Singles:18,boardrooms:4,"line-item-veto":1,proselytizing:55,"heavier-than-usual":1,Lyneses:2,Namib:2,Prosecutors:4,"computer-data-storage":1,Staged:17,loose:518,modify:42,mendacious:1,Sniffing:8,selective:1,"Diamond-Star":2,Newburyport:2,Bendjedid:2,unproven:1,"REAL-ESTATE":3,Plouf:2,Cougars:28,Korngold:2,disassociate:39,"C-minus":1,Shimbun:2,Aeroflot:40,limos:4,Ziari:2,grindings:4,fatsos:4,thatches:4,straightened:32,Alvarez:2,toys:18,Nicol:2,"read-only":1,Explorer:2,probabilities:4,Cadillac:11,Agrippa:2,Handyman:2,Ghoreyeb:2,Australites:4,FCC:2,Undoubtedly:150,entails:20,Torsten:2,stylistic:1,"studio-quality":3,Kalipharma:2,Yukihiro:2,captors:4,instrumental:3,impulse:22,mounted:81,Yerevan:2,Gerstacker:2,breezes:4,pawns:4,offended:81,"hand-made":1,adjudging:8,fronted:16,Boston:2,propounded:16,Normalize:39,ions:4,decapitalized:1,"Chinese-American":66,Martinsburg:2,northernmost:1,BACKED:16,bloodless:1,CAE:2,firmly:6,"tandem-seat":1,"E.T.C":2,menus:4,"multi-gear":1,Clerks:123,Aldridge:2,Renault:2,Malvenius:2,sneak:182,Nickless:2,Dogumenti:64,Dreams:92,gardeners:4,telephoned:32,"custom-make":39,preferential:1,negligibly:6,Southland:2,MAKE:39,spectra:4,inundations:4,Peron:2,negligible:1,telephones:4,crafts:4,wreaking:8,Laurie:2,crafty:1,orientations:4,"Jansz.":2,help:182,sooo:6,soon:6,"IL-2":2,held:45,drooling:8,kinetic:1,Michilimackinac:2,fanning:55,skirmishing:21,"startled-horse":1,Sweanor:2,Marlborough:2,teeming:8,watchdogs:4,"single-class":1,Silvershoe:2,acculturated:17,"Frito-Lay":2,nondollar:1,indefatigable:1,ye:519,"re-declared":16,anticipated:81,vomit:33,anticipates:20,ys:20,"drought-shriveled":1,"Abdul-Raheem":2,Solchaga:2,Sandia:2,ifs:4,Culmone:2,Ierulli:2,malfeasant:1,lexicostatistics:4,Lippi:2,stopped:32,Council:11,Sandip:2,minstrels:4,Battalion:2,"give-away":1,End:169,Kennelly:2,Eng:2,positioned:45,Acid:1,kidnapping:21,Grenoble:2,Cozen:2,Swavely:2,dominates:20,"Antwerp-based":1,surrounded:291,Hawthorne:11,"price-corroding":1,trusts:18,flattening:55,"Israeli-Palestinian":66,intransigents:4,preparers:4,"earnings-per-share":1,issue:24,"like-minded":1,"WSJ\\":2,dictatorial:1,Clarendon:2,Washingtons:28,labs:4,Taittinger:2,reason:44,"fortress-like":1,launch:63,"good-for-you":1,persuading:55,platter:3,blossom:520,beggars:4,Codifying:8,Elsevier:2,"product-liability":3,consultations:4,presumptions:4,Sybase:2,"space-weapons":4,dominating:30,croissants:4,prohibitively:6,maple:22,"stress-related":1,Kaulentis:2,bum:449,transcendent:1,"Money-fund":22,"Twenty-seven":1,signaling:55,sulfuric:1,norms:4,ulcerated:1,Guevara:2,uncolored:1,Schuyler:2,Seiler:2,alluding:8,Jeopardize:39,merciless:1,battering:55,"S.C.":2,ousted:45,Deficit:2,Parliamentary:1,overstaying:8,Gon:8,Goh:2,God:183,Gog:2,Goa:2,Got:521,Kalonji:2,"once-devoted":1,sidewise:218,Approvals:4,Demographics:4,officers:4,"cross-purchase":1,faultlines:4,applauded:32,Sandler:2,experienced:81,"English-Scottish-French":2,"Long-debated":1,Magnet:2,Slipping:8,Massacres:4,experiences:18,Aboveground:1,"C.C.B.":2,Placements:2,Warman:2,Sticks:2,loopholes:4,unreasonable:1,unreasonably:6,latest:138,hips:4,Lennox:2,Gauleiter:2,languid:1,bespeaks:20,"ex-Attorney":2,scorched:249,Ministers:41,"flood-control":1,"social-class":1,Lennon:2,Mengistu:2,"debt-ceiling":3,HILLS:2,"psychically-blind":1,paranoid:1,"vibration-control":1,doodads:4,hardened:81,Duffy:2,Phineas:2,legible:1,Sorrell:2,trimesters:4,outlast:39,Sangallo:2,Hayasaka:2,docile:1,Feldman:2,"soft-drink":22,"event-risk":3,enlargers:4,molten:1,"cyanide-laced":1,"snake-oil":3,"L.H.":2,Powerful:1,"insurance-company":22,"state-owned":1,Councilman:2,miseries:4,"jury-rigged":16,Bricom:2,poisoned:54,courteous:1,adjudicators:4,Varlaam:2,Ackerley:2,Tahoe:2,disapproving:1,linkups:4,CHANGED:32,pithiest:51,purposeless:1,protecting:8,Receptech:2,"big-game":1,Disgruntled:1,"sixth-biggest":1,bifurcate:39,Haestier:2,Boltzmann:2,Quips:20,Soloviev:2,Tehran:2,"day-long":1,"opening-hour":1,"as-yet":6,Coupal:2,invisibly:6,Veronis:2,rudiments:4,"pseudo-symmetric":1,invisible:1,Hohlbein:2,lookalike:1,secrets:4,Infantry:2,Superconductors:4,Schaack:2,woke:16,"class-warfare":3,weatherstrip:39,procedural:1,Graham:2,"inflation-wary":1,Wan:2,passively:6,Productivity:47,"home-run":3,hackers:4,hewn:17,Ltd:11,complies:20,"cross-sectional":3,Traditionally:6,spotting:442,Way:47,hews:20,complied:54,Was:16,War:129,Alexandrine:1,"Capt.":2,psychotherapists:4,Cedar:2,"f.o.b":1,"reduced-fat":1,Saabye:2,Poppenberg:2,Allies:41,overstate:42,"Chesebrough-Pond":2,permeating:8,Fluent:66,Mayfield:2,Allied:40,recalled:32,coalitions:4,bidding:27,reenact:39,"egg-on-the-face":1,randomly:6,loom:256,soiled:81,look:182,"well-written":1,assertedly:6,Aldomet:2,mainframe:22,"lightning-occurrence":1,endanger:42,loot:25,"non-junkies":4,LOWER:12,Pena:2,Directive:2,"out-of-touch":1,clientslose:1,Fingers:2,confound:39,reads:20,Dictator:2,Roloff:2,"three-hour":1,Foley:2,Born:231,repudiated:54,discredit:63,terram:64,"personal-care":3,Ariadne:2,TAMPA:2,Gerome:2,Reactionaries:4,arbitrators:4,Prick:39,skyrocketing:8,ALUMINUM:2,"half-baked":1,Sosnoff:2,pricks:4,"Dunn-Atherton":2,Rowlands:2,grossly:6,"mid-range":1,extortionate:1,migratory:1,Faneuil:2,festivus:64,Anabel:2,Internet:11,startups:4,"buttoned-down":1,Casting:8,"German-Italian":1,decayed:103,"brand-new":1,Saalfeld:2,"Bradford-White":2,"specially-trained":1,Ludlum:2,insert:95,"long-acting":1,"price-depressing":1,"Bank\\/IMF":2,sharers:4,"re-invested":7,outright:97,Alexandria:2,Previously:6,Ensign:2,Boxell:2,Windels:2,swooped:16,resold:522,mathematical:1,Haughey:2,Carols:28,Guitarist:2,"left-field":1,Plains:130,Caroli:2,Carole:2,Economy:11,savage:3,paginated:17,Citrus:2,Zhijie:2,venturesome:1,Gasset:2,conditionally:6,"great-uncles":4,Sangyo:2,Andriessen:2,forgets:20,minimal:1,berated:54,stem:182,"DOC-IN-A-BOX":2,step:24,outlanders:4,stew:25,lasts:20,plots:18,"space-systems":4,toppled:54,shine:24,"Jin-Shung":2,entailed:32,"talks-including":1,rumbled:16,shins:4,messaging:21,pullouts:4,classics:4,shiny:1,dietary:1,channeling:8,junkholders:4,paltry:1,computes:20,legislates:20,nonsense:22,Waltch:2,"quake-prone":1,Stalled:17,unbeknownst:1,Nogaret:2,Ruth:2,Villagers:4,Papermils:2,Gassman:2,Victims:123,Salvatore:2,Shylock:2,"Turkey.":2,disallowed:32,manufacture:182,dips:4,inept:1,specialty:22,bolsters:20,Blois:2,fishy:1,"gold-convertible":1,Unitarian:129,persisting:30,Brookmont:2,calligraphers:4,"patient-care":1,"Euro-jogging":1,accustomed:523,Lonrho:2,Moffitt:2,"Stone-Consolidated":2,Pagemaker:2,Ich:64,"Chalon-sur-Saone":2,chafed:17,Hampshire:2,INTERMARK:2,Kitchin:2,asters:4,chafes:20,"dammed-up":17,Abstractionists:4,liberalize:42,sullen:1,"All-weather":1,rewriting:8,"bottom-line":1,fuzzier:12,seduzione:64,Sisters:130,"battery-operated":3,McKesson:2,regulations:4,sluicing:8,"price-stabilizing":1,Coca:2,shorelines:4,thundered:16,overlong:1,Showtime:2,Intermec:2,sounder:12,"pink-petticoated":1,repatriations:4,berries:4,sounded:32,"sales-of":127,Erdman:2,Brophy:2,"non-life":1,"fair-market":1,"chicken-mutilating":1,"bell-ringers":4,"Canada-U.S.":2,"post-1979":1,"Lower-than-expected":1,Kuhns:2,Righteous:1,WLF:2,shackles:4,"best-sellers":4,Ballroom:2,Silas:2,Stone:2,Award:11,Aware:1,"wage-rates":4,backflips:20,shackled:17,Xiangyang:2,Swanson:2,upstarts:4,suite:80,Weider:2,virtuous:1,"eight-foot":1,Canadian:117,miners:4,quelling:21,Vermes:2,Jaime:2,cellular:1,crowed:32,facilitate:42,"non-existant":1,"ever-dying":1,exasperatingly:6,Partner:2,hairier:12,"panic-stricken":1,defiling:8,compensated:54,Nazario:2,teasers:4,among:127,decreed:32,compensates:20,"should...":102,Giorgetta:2,intraocular:1,decrees:18,"Seventy-fourth":2,banquetings:4,climes:4,poke:25,Locks:2,Environmentalists:57,marketed:54,TAMMY:2,referees:4,America:2,Dynabook:2,combative:1,accomplices:4,meandering:8,"four-door":1,"consumer-telephone":1,Cossacks:28,commercial:3,Heating:268,"case...":102,quell:39,Baird:2,ponytails:4,canals:4,Kostelanetz:2,Orgotein:2,Lying:8,Kernel:2,chant:25,overseen:160,"stone-still":1,whisking:8,COMMUTERS:4,oversees:20,Kerner:2,Gertrude:2,Waikiki:2,Ritz:2,unhitched:32,win:182,Yin:2,litigators:4,"muddy-tasting":1,Rito:2,redefining:8,Rite:2,Rita:2,"space-based":1,Bylot:2,"chemical-arms":152,remains:72,"one-stroke":1,Papa:11,Newfoundland:2,Matters:524,JSP:2,Papp:2,"Bhd.":2,nickeling:8,started:525,vivid:1,REAGAN:2,"rough-sanded":1,Roxboro:2,"one-plane":1,"Afro-Cuban":1,Seagoville:2,starter:22,Monterey:2,crosses:72,mythical:1,irreparably:6,UtiliCorp:2,irreparable:1,depravities:4,Traveler:2,Rostenkowski:2,"NP-27":2,"customs-cleared":1,"four-for-one":6,ushers:72,cheapens:20,ferrets:20,intimations:4,Halpern:2,Vistoso:2,serviceable:1,wonderful:1,skirt:44,"truth-revealing":1,intraparty:1,Mohlere:2,tubers:4,Blumenthal:2,romancing:55,NIAGARA:2,Heffner:2,BECOME:39,Winton:2,pantaloons:4,unserviceable:1,Cepeda:2,rations:4,fatigue:78,belongings:4,Weighted:2,advocated:54,Unimin:2,catty:1,feels:72,Emptied:16,Middle:272,advocates:18,"chain...":102,bakers:4,quotations:4,astronomical:1,Hoppe:2,combinations:4,Doonesbury:2,smarts:20,Representative:11,imitating:8,advisable:1,"sub-underwriters":4,Dwor:2,MOTORISTS:4,filets:4,Sink:2,STSN:2,manifestos:4,Steppenwolf:2,Sing:31,LBO:11,Harvester:2,affectations:4,placid:1,"mini-fiestas":4,grumbling:55,Pabor:2,divides:20,"Falwell-Robertson":2,Carmichael:2,shaking:55,legions:4,"front-end":1,conceiving:8,tumbrels:4,ills:4,Benedictine:1,"York-mind":526,IFA:2,IFC:2,"self-enforced":1,Piszczalski:2,IFO:2,deprivations:4,IFI:2,longhorns:4,confess:42,Prizms:28,Burzon:2,Contrasts:4,Gartner:141,withering:30,Upset:17,Surge:2,Ives:2,completely:6,Whiteford:2,Ivey:2,Anita:2,Hostaria:2,reeled:32,Mastergate:11,"pound-foolish":1,Carvalho:2,stride:24,shred:25,Gothic:66,derivations:4,"more-sophisticated":1,protagonists:4,soldered:17,Cycly:2,"Nasdaq-traded":1,Vinson:2,Rochester:11,Atlee:2,precisely:6,Boris:2,Conduit:2,stringently:6,Conradies:74,"non-partisan":1,Funds:92,NUS:2,Argos:2,NUM:2,MacAllister:2,Borie:2,"post-mortem":3,"best-looking":1,picturesquely:6,hitching:21,reallocate:39,Hugely:6,Silberman:2,varieties:4,"One-inch":1,Biopure:2,underperforms:20,bevor:64,unprovable:1,breezy:1,Ismet:2,REPLIGEN:2,Leleiohaku:2,dourly:6,Cornfeld:2,mediators:4,"follow-through":94,"b-Based":14,Gentlemen:123,EQUIPMENT:2,ultrasonic:1,close:527,wristwatches:4,Tadzhikistan:2,"post-Inaugural":1,roiling:30,Melott:2,cranes:4,Tuberculosis:2,Rollins:2,ecumenical:1,KWU:2,Vacations:57,Rolling:2,truck:44,Des:87,deploy:42,passionately:6,Torell:2,expires:20,camped:32,Weissmuller:2,expired:112,Godiva:2,simplicities:4,SAMURAI:2,"hot-colored":1,granddaddies:4,breeze:25,"Secretary-General":2,databases:4,Boskin:2,"radio-pharmaceutical":1,qualms:4,Tara:2,hammerless:1,Waal:2,Barney:2,Pushup:2,passe:1,MUST:190,soothsayers:4,based:54,tire:24,miniseries:91,"(":528,transplants:4,Mervin:2,rash:22,bug:78,Beacon:2,bases:18,suckered:17,bud:25,Barnes:113,Wald:2,"Jew-haters":4,Stella:2,Gorham:2,Popular:40,"C-SPAN":2,sowing:21,course:163,"outward-projecting":1,gust:163,Scientech:2,watershed:22,gush:149,fasteners:4,trodding:8,counterprogram:39,spotted:112,Staiger:2,mists:4,consulates:4,Lapp:2,Question:169,freeze:44,Pollin:2,desperate:1,reattached:17,Indicators:130,"XR-7":2,irrefutable:1,Bessarabia:2,reconfirm:39,unionists:4,missing:5,Toppers:2,"Demus-Schubert":2,supernatural:3,Greenbelt:2,Kenyans:28,Threepenny:47,outsiders:4,comparable:1,rinses:4,DeVries:2,demur:33,Chiat:2,Stonewall:2,Mulhouse:2,lamechian:1,melds:20,comparably:6,Gable:2,Titled:17,diligent:1,Ruvolo:2,"year-round":97,Pontissara:2,ranked:112,Lawyer:2,"RJR-Macdonald":2,"non-methanol":1,Vachell:2,christen:39,"Hydro-Quebec":2,budgetary:1,Picoult:2,Lok:2,Patton:2,Rosenthal:2,"Al-Seyassah":2,Los:40,Music:11,Low:40,Lot:47,instituting:8,hoverin:8,kings:4,Musil:2,Esnard:2,willy:6,"barrel-per-day":1,Sisk:2,Gregg:2,wills:4,"larger-than-expected":1,cowards:4,slowly:6,Consob:2,"Six-year-old":1,Stoltz:2,microtonal:1,"bi-regional":1,Bluefield:2,smokescreens:4,Sizzling:1,hytt:53,oversize:1,"anti-defense":1,"Babin-Festival":2,outspread:14,"spur-of-the-moment":1,Elvira:2,"re-thinking":8,underclass:4,Cohens:28,Rally:128,Risley:2,coincidental:1,Sergeant:11,Terrence:2,Nomisma:2,Stallard:2,inhabits:20,swinging:30,"Ariz.":2,bucks:18,municipals:4,trooping:8,overrendered:17,Metamucil:11,strange:1,tabbed:16,Virnich:2,fanatics:4,fide:145,wranglers:4,unconventional:1,plaids:4,promoters:4,nightly:97,Tulip:2,dammed:16,fierce:1,extendible:1,"Galveston-Houston":2,weld:63,"corn-based":1,Spofford:2,well:529,Fantasy:2,Sovietized:1,stirrups:4,Skill:3,spherical:1,Novick:2,Bathyran:2,attractively:6,insinuating:8,Spenglerian:1,Technological:2,"wild-eyed":1,Porter:2,Camilo:2,imparts:20,vide:64,Vignola:2,Coffield:2,swellings:4,Sultanov:2,accomodate:39,Esso:11,Hassey:2,Jacques:2,Doorne:2,Shampoo:2,recharging:8,cashed:32,Executed:16,Reid:2,Glorious:1,Gephardtian:1,Kita:2,"two-parent":1,dictionaries:4,Azerbaijan:2,Echelon:2,Cologne:2,nonfunctional:1,GAF:2,"M&Ms":4,drizzly:1,"Herald-Tribune":2,Oprah:2,Groupement:2,"anti-diabetes":1,phenomena:4,Mason:2,Optique:2,vociferous:1,KAL:2,Christensen:2,Homozygous:1,communes:4,Seventh:40,injects:20,consultative:1,appreciative:1,Bystrzyca:2,Wishes:4,sponsoring:8,"Slash-B":2,Polymerix:2,Seurat:2,Cabrini:2,lecturers:4,carats:4,"Australia-based":1,"buy-out-related":1,unfleshed:17,Canfor:2,interlinked:17,Tigreans:28,Konrad:2,beige:1,puppies:4,Insuring:8,Dialogues:2,PMs:4,townships:4,attains:20,AirCal:2,panoramas:4,Thousands:123,reconstituting:8,PMR:2,synthesized:17,"seat-sale":1,imperial:1,synthesizes:20,Jeannie:2,drownings:4,Shedding:8,neutral:1,"f-As":530,"one-act":1,kegs:4,threaten:42,Spicer:2,bridgeheads:4,presuppositions:4,storied:1,"seven-concert":1,Increasingly:6,Kuriles:2,instructing:8,accommodative:1,turnings:4,stories:4,empty:162,"systematically-simple":1,"mass-media":19,Hispano:2,Blankenship:2,Cargo:2,Schwarzer:2,Headley:2,Banknote:2,MSX:2,MSU:2,Lake:11,MSP:2,crystals:4,"Mediterranean-inspired":1,Bohart:2,Slightam:2,rumors:18,"three-row":1,Superstores:65,tailoring:55,Sunshine:2,Merrimac:2,sidechairs:4,Richstone:2,Mouth:2,stumps:4,Endgame:2,stumpy:1,Hachiyas:28,Hees:2,experimenters:4,"C.C.":2,MOST:51,Heed:39,empowers:20,Heem:2,"nine-state":1,Killion:2,persistent:3,Viscera:28,unopposable:1,PGH:2,uneducated:1,lives:18,"desert-bound":1,Strangely:6,sunburnt:1,Shardlow:2,Davidge:2,Overseeing:8,plenary:1,Thruston:2,encores:4,Rylie:2,"two-dimensional":1,whose:306,Hose:2,Purgatory:2,calculate:42,Exceptional:40,syndciated:17,Rosalind:2,Host:11,"four-square-block":1,"land-owning":1,Beecher:2,Waterloo:47,Sidoti:2,rosiest:51,Turbinen:2,"low-budget":1,embroider:149,Sticking:2,Sukio:2,hath:20,"horse-blanket":6,graced:32,"high-flying":1,Brubaker:2,Nepalese:531,Buenas:2,graces:4,Dozen:2,"seven-word":1,winded:7,plummetted:16,Stifter:2,justices:4,Torrijos:2,"fuel-efficiency":1,"state-approved":1,preferences:4,wreck:25,complexities:4,Hacienda:2,hazy:1,liberated:81,Imboden:2,sidled:16,"missile-launch":1,descendents:4,perquisites:4,abstractly:6,Professionally:6,flailed:16,Krutch:2,Leagues:28,Smaedt:2,rests:72,economics:91,credit:44,sombre:1,exacting:1,Wonderland:2,demagogic:1,Serial:66,gaucheries:4,menial:1,"management-controlled":1,grandkids:4,"ice-cubes":4,Afraid:1,decries:20,"ozone-cancer":1,Rather:150,Fittingly:6,"sports-apparel":1,"double-married":1,Vandringsar:2,specifics:4,decried:16,Wyman:2,overworking:8,criminals:4,Jewry:2,Includes:72,leaks:4,"five-seventeen":1,Stoltenberg:2,negociants:4,Photographer:2,Included:14,Uhr:2,leaky:1,"six-packs":4,Sorting:8,Sanctam:2,"heart-to-heart":1,Bilbao:2,"ring-labeled":1,adult:22,protozoan:3,aligned:14,"chi-chi":145,Pinion:2,"Better-educated":1,verdant:1,Supply:11,Fraser:2,somber:1,Realtors:92,akin:532,divergent:1,reindicting:8,sinusoidal:1,"nicotine-free":1,"litigation-support":1,Charterhouse:2,Baldor:2,magnitudes:4,"beef-feeding":1,Eurocracy:47,"multiple-state":1,Junge:2,masterly:1,gumming:8,Lure:33,predictors:4,Lakewood:2,Neue:2,Kai:2,Massacre:2,Kao:2,Irving:2,boroughs:4,Kas:2,twitching:8,"dual-channel":1,estimable:1,Kay:2,Reintroducing:8,Surcliffes:28,construe:42,commencing:8,minority:448,Fragonard:2,Skeoch:2,Castro:11,"bottom-down":1,president:47,"higher-paid":1,"bark-nibbling":1,Jeanette:2,overtaken:17,Tranquility:47,fungi:4,Kheel:2,Aldrin:2,plied:32,Sporadic:1,"rider-fashion":1,foresaw:16,"larger-than-normal":1,"co-operating":8,"High-definition":1,banged:32,mystics:4,shipbuilders:4,McNair:2,PRA:2,PRC:2,PRO:64,PRI:2,"drug-smuggling":1,encounter:44,decaffeinated:17,Equities:41,reinstituting:8,Hartung:2,Melvyn:2,"well-adjusted":1,Lifeboat:2,pianists:4,Generale:2,Generali:2,Telepictures:111,bony:1,bono:64,"Straight-Arm":2,bona:145,mean:50,"triple-sealed":1,improvise:39,reinsurers:4,Mauritania:2,Widmark:2,Investigation:11,Tunick:2,awry:533,navy:22,rebuts:20,Discovery:11,quantify:39,Winsor:2,Muse:2,"F.B.I.":47,Deepak:2,Romer:2,novelistic:1,Karnak:2,bluntest:534,Muss:2,democratizing:8,Must:190,rehearsed:17,relics:4,"non-residential":1,"anti-recession":1,Miyagi:2,Xiaoqing:2,frenziedly:6,"earned-run":1,backlit:1,Hollister:2,Allso:6,"specialty-chemicals":4,Trichrome:1,"ankle-deep":1,Tygartis:2,"anti-science":1,religionists:4,appreciations:4,"Petipa-Tschaikowsky":2,"C-Span":2,Cafe:11,bioengineer:39,"half-cup":1,wronged:14,features:18,thereon:6,Buddhist:10,"University-EPA":2,comforted:17,Essar:2,Sociological:1,RULE:33,semiempirical:1,Sonambula:2,torpid:1,leaders:4,RMS:2,annotated:17,Conder:2,Introduce:39,Festival:2,twenties:4,Vindication:2,RMI:2,"Wagner-Peyser":2,"Body-building":1,solemnly:6,"Symbol:HRB":2,Malden:2,Schmalensee:2,Humphrey:2,Safely:6,coverages:4,distance:25,Consider:216,Stillerman:2,"college-oriented":1,enabled:32,"Louis-Dreyfus":2,pleadingly:6,Guerin:2,stratified:7,"ex-Communist":3,Sajak:2,anatomically:6,realestate:25,extracting:8,"far-fetched":1,unthinking:1,"low-priced":1,Shelly:2,Designing:116,obviously:6,Buster:2,"J.I.":2,Schneier:2,sharecroppers:4,Overseers:28,Albers:2,Albert:2,divulge:39,Devol:2,Devon:2,Superslims:28,Alberg:2,Directed:231,caricatures:4,"single-firm":1,Knight:31,"psychological-intellectual":1,impurities:4,regular:1,caricatured:17,VecTrol:2,Cutler:2,Stendhal:2,"Coca-Cola":2,"long-planned":1,mitigate:39,Hovnanian:2,Yumiko:2,mushy:1,Wiederaufbau:2,"shade-darkened":1,"save-the-universe":1,consumes:20,Thiot:2,"second-echelon":1,Spiotto:2,chilblains:4,Lafe:2,Rebuilding:8,carbons:4,explain:42,Detention:2,Free:294,Fred:2,Frey:2,ebbing:8,stabbing:8,clobbered:54,mischievous:1,Fret:39,waylaid:17,consumables:4,patted:16,Carlile:2,technicians:4,meteors:4,Philinte:2,Hillis:2,Leaders:57,Washington:2,Searching:8,Prufrock:2,"birth-control":22,cower:149,grilled:7,Schwerdt:2,Completion:47,decides:20,Sprenger:2,Tracys:113,crewmen:4,"pooling-of-interest":1,Schumer:2,decided:112,"well-documented":1,"stress-temperature":1,UPJOHN:2,Boost:319,voyage:80,reprinting:8,Greenwald:2,smacks:20,Controller:2,"day-old":1,pets:4,Overt:1,shoemaking:8,unconstitutional:1,Serrana:2,Dusty:2,Wilms:2,Peyrelongue:2,Counter:2,staves:20,Wickham:2,Toast:2,Hospitality:2,Wilma:2,Ehlers:2,disorderly:1,cutglass:1,regattas:4,pollinated:17,against:127,Abboud:2,"per-game":1,Basile:2,peddling:5,Metier:2,gushed:16,portant:64,"low-paid":1,gushes:20,loaded:81,Cezanne:2,Elkan:2,Ulysses:11,Kingan:2,riled:17,Macfarlane:2,Tineo:2,Beardsley:2,erect:392,Beardslee:2,Bitting:2,riles:20,Mohawk:2,suppress:42,Negas:2,Prolonged:14,decrepit:1,generals:4,regretted:32,censored:17,Rocket:2,picketing:21,Athletic:40,Intl:2,Into:124,Dollar:47,say:535,"all-stock":1,melted:81,exiling:8,Elinsky:2,mousy:1,Ignacio:2,"American-Negro":2,"strait-laced":1,defeated:54,Uniconer:2,Liberals:65,Sejm:2,faked:54,extraditions:4,Georgetown:2,Epson:2,rovings:4,"counter-attacked":16,Epsom:2,entitles:20,belle:147,jotting:8,Lemont:2,"N.D.":2,belly:163,contaminate:39,mixtures:4,Haruyuki:2,showing:55,"Franco-Japanese":2,bells:4,Hisham:2,Residence:2,differing:30,kin:536,supposing:8,guilders:4,kid:25,drowsily:6,unconcerned:1,"ALQ-178":2,virile:1,"high-stepped":1,Wesson:2,"lease-funded":1,Kobayashi:2,Bilzerian:2,Errors:123,"poised...":102,Bureaucrats:4,Overfall:2,RVs:4,personages:4,Branch:11,Heavenly:40,Lagerlof:2,Branca:2,inconclusively:6,quarrelsome:1,ascents:4,"completely-restored":1,"one-kiloton":1,auspicious:1,blanching:55,Scorsese:2,erected:54,Djemaa:2,Aikawa:2,"triple-Crated":1,performing:5,unnecessary:1,ridicules:20,Wattley:2,Agnellis:28,"never-to-be-forgotten":1,"belly-up":97,Marching:2,Kowalski:2,Milpitas:2,Helga:2,Droz:2,Broad:294,Garrett:2,bombarded:32,"eight-month":1,Yeargin:2,intern:25,Jotaro:2,Moslems:41,Arvind:2,eked:32,plaintively:6,contrarieties:4,Mikulich:2,theatrical:3,"HIV\\/AIDS":1,conquering:8,Drinking:8,Marla:2,prairies:4,Whitley:2,humanists:4,unorganized:1,"Georgia-Pacific":2,compleated:17,"information-gathering":1,flourished:32,"sector...":102,ribs:4,"first-home":1,Charlene:2,outboards:4,outrage:25,warrent:1,"Allis-Chalmers":2,marshal:44,"dim-witted":1,"palm-lined":1,tastier:12,birdied:32,"PW4000":2,Coupe:2,carving:8,Frustrated:7,birdies:4,TEK:2,inductions:4,Riepe:2,TEA:2,"maximum-security":1,"flu-like":1,TEP:2,Safavids:28,polyols:91,gentrified:17,idealized:14,"largest-ever":1,CORP:11,bevels:4,McCone:2,mouthed:16,lilies:4,Archimedes:2,punnished:32,milligrams:4,bounds:18,conformists:4,Grateful:2,plaintiffs:4,Interhome:2,breathe:42,frowzy:1,"bachelor-type":1,Oakwood:2,Franciscan:66,"graft-riddled":1,discounters:4,"single-handedly":218,"non-brand":1,cushioned:54,audition:25,aunts:4,authoritative:1,skirted:54,Andrew:2,actuators:4,Andrei:2,Hasbrouk:2,shows:72,Andree:2,optically:6,TREATING:8,"cash-short":1,Armbro:2,"clear-cut":1,sensuous:1,hollered:16,"on-the-spot":1,shatters:18,Koshare:2,Berean:2,Falvey:2,Ottoni:2,"pension-insurance":1,Medicis:111,Okobank:2,"non-competition":1,prepupal:1,Orient:11,Woodcock:2,decelerate:39,"million-franc":1,customary:1,"teary-eyed":1,"go-along":1,downplays:20,Micropolis:2,assailants:4,Erasmus:2,proletarian:1,resourceful:1,Phenolic:1,Shortages:4,fancies:20,breathy:1,Monde:2,skirting:8,suffered:32,simmer:42,DiNardo:2,shoot:182,deltoids:4,Nutting:2,Moskovskaya:2,estranging:1,piggybacking:8,Eichmann:2,"Spanish-born":1,Roybal:2,mashing:8,Liquidation:2,trended:17,futurists:4,Eldest:51,Propylaea:2,excellence:80,Gardini:2,capitalgains:4,"non-answer":3,Pedde:2,Transkei:2,nineties:4,"House.":2,zooms:20,inconsequential:1,Antiques:28,Accademia:2,Burlington:2,Shakespeare:11,semifinals:4,adds:20,negotatiators:4,"micro-organisms":4,Appreciation:2,sweaters:4,McClintock:2,"big-borrowing":1,Economics:113,Tuscany:2,Presidency:11,NetFrame:2,mussels:4,Haddad:2,availed:16,dwelled:17,Neidl:2,airfields:4,tangent:3,kilometers:4,Cementing:8,tuxedoed:1,"nine-digit":1,bruises:4,"torso-defining":1,somatic:1,simultaneous:1,historical:1,conveniently:6,swipes:20,Technology:11,bruised:14,elect:42,undepicted:7,withal:127,patriots:4,"teen-agers":4,Aim:260,surmount:39,Spinney:2,Plaintiffs:4,hotels:4,Komsomol:2,aye:6,pluses:4,joyous:1,complaisant:1,"month-earlier":1,grandmasters:4,Cedric:2,Clemens:2,Clement:2,vous:64,Venetoen:2,Cimflex:2,Struggles:2,Geely:2,diversionary:1,"Microsoft-Apple":2,"facet-planes":4,Adventists:2,Gastineau:2,demolish:39,Garea:2,unimproved:1,reviews:18,"check-kiting":1,"anti-government":3,lobbying:5,confused:81,Whitemarsh:2,Score:63,Prado:2,confuses:20,Issue:269,"Bronzavia-Air":2,Boeotian:2,thumbing:8,ballards:4,"nine-game":1,Grupo:2,Ermanno:2,"textile-related":1,loaves:4,map:24,effortful:1,mar:39,swayed:32,hydrogens:4,strokes:18,Healthier:12,Sagami:2,mad:1,Yale:11,mai:190,mah:404,Platter:2,"mud-caked":1,EuroBelge:2,scrambling:8,"non-investment":1,regurgitated:32,"Yankees-Brooklyn":2,"long-range":1,Cavanagh:2,cascade:25,"financial-report":1,deposit:44,deceive:39,unleash:42,tall:1,talk:95,"orchard...":102,Hymn:47,Mississippi:2,Uncas:2,distributors:4,"government-controlled":1,Mayfair:2,shaky:1,wishing:55,Dicke:2,introductions:4,recoup:39,pitch:139,Dicks:2,Waxman:2,"gold-plated":1,adhesive:3,"F-18s":4,Greiff:2,Comes:20,Pettersson:2,consequential:1,World:11,"Public-works":4,recipes:4,fuels:18,"less-perfectly":68,Tremendae:2,Laboratories:111,"field-sequential":1,bestselling:1,"home-equity":3,attorneys:4,Simple:3,Lovelace:2,settings:4,arrows:4,Teamsters:111,Simply:6,rock:139,scolded:17,Homma:2,Detectives:2,Shorted:1,"air-water":1,sweepings:4,Swears:20,Shorter:195,Startled:17,whirlwinds:4,Frazier:2,fazed:16,hemmed:17,Springing:8,Therese:2,Davids:2,Feigen:2,Theresa:2,Renovo:2,Savoca:2,Tragedy:47,Wemmick:2,Attakapas:2,Tepper:2,Citibank:2,sideways:218,juxtapositions:4,"Corp.s":2,sparkled:16,cough:25,infuriating:13,advance:139,sphynxes:4,Lowndes:2,"one-for-two":1,where:293,Normal:66,"bowling-related":1,Vortex:11,thine:1,"economic-forecasting":1,"hands-off":1,think:90,Adelaide:2,Neusteters:2,Translocations:4,Farney:2,Compumat:11,crib:22,WABC:2,"Carnegie-Mellon":2,Krebs:2,"Martin-type":1,"non-residents":4,sounds:72,cheesy:1,"Sea-Land":2,Levy:2,Weighing:8,murky:1,Hoffman:2,Problems:4,Ecological:2,"sound\\":1,"pastry-lined":1,Comeback:2,eyes:4,Sweazey:2,Fortune:11,subpoenas:4,eyed:16,Tough:1,interred:16,cleanse:39,Comfed:2,Thomases:2,Serenade:2,trenches:4,sailing:21,"self-employed":1,notches:4,midtown:3,Magma:2,reacquire:39,"high-growth":3,notched:54,stubby:1,SWC:2,"destroyers...":102,monochrome:1,Puppy:2,glibly:6,"x-Year-to-date":1,speakers:4,Enjoying:8,hopples:4,"Center-punch":39,Kimbrough:2,Photographers:2,switching:537,chromosomes:4,enter:538,"earthquake-resistant":1,Abolition:2,"semi-gelatinous":1,bowels:4,coveted:14,festooning:8,Ringer:2,Sextuor:2,"swift-striding":1,Ringel:2,Savers:2,Hessische:2,shop:44,rating:21,shot:310,Keng:2,show:44,Clearing:2,Demons:4,elevate:42,Goffstein:2,Kent:2,corner:70,fend:39,Rubenesquely:1,Reproduced:17,"quality-control":22,plumb:218,Dundeen:2,Flores:2,McClatchy:2,fens:4,germs:4,Translation:11,plump:1,"non-invasive":1,Bumpers:2,replaying:8,"opto-electronic":1,pricings:4,"eight-foot-high":1,Gide:2,nearly:6,pharaohs:4,denials:4,Opinions:57,flyways:4,"short-staffed":1,Sturley:2,worrying:30,NOTES:4,cocktails:4,Lucifer:2,teething:8,"Money-saving":1,"federal-corporate":1,Fares:4,Iowa:2,registering:8,limber:1,"sandwich-type":1,malted:17,diamonds:4,straighteners:4,Hopwood:2,FirstSouth:2,atrophic:1,parental:1,Atheist:2,crucified:32,Mahoney:2,enthralling:13,Bailiffs:4,SOARS:20,innoculating:8,"animal-like":1,Northrop:128,amateurs:4,"fat-substitute":1,profs:4,Continues:20,cornered:45,"mobile-telecommunications":4,slain:17,"U.S.-Japanese":1,condemning:8,Here:67,"Heel-Terka":2,specializing:8,sensible:3,intrude:42,umber:3,"Third-party":1,feeders:4,dependable:1,Kenmare:2,"flight-attendants":4,sensibly:6,"hand-holding":22,Originals:4,Broderick:2,"David-Weill":2,Galtier:2,whips:18,refractories:4,Herr:87,memorialized:17,reopening:8,"million-asset":1,JURORS:4,"post-production":22,Somehow:6,"well-cared-for":1,ongoing:1,Sleepily:6,Avenue:11,"major-party":1,orginate:39,planar:1,nonresidential:1,"investor-relations":152,Rahn:2,Supplementing:8,Bester:2,malformed:1,"bargain-hunting":22,Montevideo:2,siphoned:32,recalculated:32,Alstyne:2,censorial:1,semesters:4,arguments:4,Lanka:2,"five-round":1,"Sept.1":2,Hicks:2,cauterize:39,ancestors:4,Nesbitt:2,climbing:55,flexed:16,"one-man":1,Voorhes:2,Hurtado:2,largely:539,amounts:18,"Eagleton-Newark":2,easing:263,bumping:8,parody:25,Surveys:123,gaining:8,crossbars:4,multipled:16,Frelinghuysen:2,Maynor:2,lobules:4,Lions:2,monei:19,baptismal:1,"Archer-Daniels-Midland":2,worryin:8,feedlots:4,Engines:41,TO:540,pups:4,Duchy:2,shingles:4,Weeds:4,Perchdale:2,grip:78,slanted:45,grit:25,Saratoga:2,reddened:385,Denny:2,inglorious:1,unheroic:1,"washed-out":1,grim:1,grin:25,Childs:2,"diamond-shaped":1,Bloomfield:2,Kemble:2,absentia:64,facing:30,Childe:2,Hack:2,Refrigeration:47,"counter-arguments":4,thirsted:17,niceties:4,Threats:4,Gerald:2,ascend:39,eyelets:4,Amazing:66,"Dr.":2,Selectmen:4,Hamiltonians:28,Douglass:2,ADDED:16,jonron:64,colonial:3,"drug-addled":1,extensively:6,Conde:2,pioneer:25,Fidis:2,highbrow:1,windbreaks:4,intravenous:1,grafting:8,Dry:40,Dinsmore:2,Coping:8,Dru:2,dictators:4,Wesker:2,Goodbye:183,arithmetical:1,Litvinchuk:2,Rambo:2,fringe:22,Kyong:2,"water-soluble":1,CREAM:2,Bagging:8,memorials:4,bricklayers:4,Bowl:2,blessed:81,references:4,dreaming:55,Flagler:2,annoys:20,"T-shirts":4,Unwarranted:1,"McLendon-Ebony":2,Politan:2,"co-ordinating":8,totalitarian:1,Visits:4,cardmembers:4,"Av.":2,redlining:8,caterpillars:4,relocations:4,Yahwe:2,indorsed:16,stressors:4,strikes:18,sophisticated:1,nonacid:1,sophisticates:4,Beneath:127,downstairs:163,romantic:3,Integrator:2,"investment-linked":1,Avi:2,jabbing:8,electrifying:1,Cushing:2,Ava:2,Bureaucratic:1,USG:2,Margret:2,USC:2,USA:2,"rail-traffic":1,USN:2,Azerbaijani:2,deer:19,deep:97,resultant:3,USW:2,"IBM-remarketer":1,USS:2,grasped:54,USP:2,carps:20,USX:2,selfish:1,"Harlan-Marcia":2,"sports-functions":4,sufferings:4,drivers:4,ceaselessly:6,narcotics:91,Cisneros:2,Bogdanor:2,Tooling:8,Dahlen:2,fruitless:1,Omaha:11,stilted:1,Urraca:2,"square-foot":1,gon:541,Bachlund:2,decorated:45,"smaller-size":1,prewar:1,resembled:16,"US$":84,"profit-eating":1,sewed:32,HOMEOWNERS:4,Gunther:2,inhibited:32,"well-brushed":1,burdening:8,Processors:28,wormy:1,duplicates:20,rascals:4,Dazed:1,worms:4,Financieros:2,Robeson:2,revellers:4,prolongs:20,duplicated:17,Protogeometric:66,Meditations:65,inexhaustible:1,fairways:4,prodding:55,hideous:1,instigating:8,"petro-dollar":1,Scouting:8,Referrals:4,Sonic:1,"child-oriented":1,Svensk:2,"twice-monthly":1,Abyssinians:28,haggling:55,unsuspected:1,overtakin:8,grubs:4,bankrolled:32,chandelle:39,portable:3,Kochanek:2,eloped:16,"chairman-designate":2,preposterous:1,Planitzer:2,Chargers:28,"hard-to-fault":1,MUNICIPALS:4,Fergusson:2,subscripts:4,Malato:2,Berliners:2,Cultural:40,"paper-pushing":1,everlasting:3,steelmaking:21,Gericault:2,BLS:2,Petrus:2,disinflationary:1,Leeza:2,Czestochwa:2,Quatsch:64,expiating:8,Pundits:4,summate:25,temperately:6,Southam:11,CLEARED:16,Canal:11,Canam:2,Darkness:47,extrapolations:4,Anctil:2,Kruk:2,emptied:54,hunching:8,unseating:8,"solid-gold":1,empties:20,emptier:136,soliticitations:4,readily:6,eyd:17,"general-appeal":1,Frito:2,Niles:2,Pasha:2,comparing:8,Fritz:2,amenities:4,dunks:20,Frits:2,Stage:11,"Bio-Response":2,Tennis:2,"one-story":1,suffused:32,Louise:2,retrogradations:4,forfeitable:1,"Masaki-Schatz":2,"globe-spanning":1,Mouvement:2,"Park-affiliated":1,Babelists:4,Daugherty:2,frustratingly:6,Atone:39,Pyhrric:1,slovenly:1,superstitions:4,pioneered:32,prefaced:32,fryers:4,"University-based":1,bravely:6,Polystyrene:11,Richwhite:2,gravely:6,traduced:17,"drug-trafficking":450,Oder:2,attain:42,Stained:17,Correggio:2,"!":542,Patentees:4,pyrometers:4,Serex:2,Arrington:2,"co-heads":4,"long-arranged":1,Doi:2,Don:2,Doo:2,Dom:2,Doc:2,Compton:2,Thais:28,Dog:2,Doe:2,Sybron:2,Dor:2,Dos:2,Dov:2,Dow:2,Neinas:2,hypnotized:17,interpolated:16,Hunsucker:2,VITRO:2,misplaced:17,doused:32,"T.E.":2,Confucianism:2,Alphonse:2,Rockaways:28,Telephones:113,rifles:4,played:32,winged:112,hifalutin:1,"U.S.-endorsed":1,deploring:8,"producer-consumer":1,rifled:1,predisposed:17,filters:18,noncommissioned:1,suffer:42,Trinity:11,thrilling:1,"self-designated":1,Ifni:2,gaslights:4,Kovacic:2,noticing:8,Youth:443,"home-bred":1,complain:149,"Medicaid-paid":1,sweatshops:4,conic:3,Perestroika:64,"rip-roaring":1,positions:18,Laima:2,Tamara:2,exquisite:1,"suitcase-sized":1,stakebuilding:55,identifying:8,watered:54,Plaskett:2,"muscle-flexing":1,"non-pregnant":1,Ephesians:28,throes:4,crowing:55,Cepheus:2,schemers:4,Deering:2,print:44,ironed:17,"EC-wide":1,Leaving:8,Hardart:2,"Ameri-Cable":2,members:4,beneficient:1,Uno:2,Manned:157,Eurotunnel:2,Gribbin:2,unlacing:8,conducted:54,Patman:2,rogues:4,"anti-slavery":1,dons:72,IOWA:2,BMIRs:28,Revzin:2,"then-52":1,mishandled:85,done:543,rerouted:17,Genesis:11,Nonresident:1,Medco:2,Zachau:2,revive:42,"single-owner":1,thickets:4,militant:1,regulation:22,Gamma:2,amplifiers:4,Raul:2,Matthews:2,conspirators:4,Rauh:2,muggers:4,pare:39,Linguists:4,drapes:4,USFL:2,draped:85,rockin:1,part:479,pars:4,Says:20,Tockman:2,Killelea:2,recording:308,chartaceos:4,Goyette:2,declare:42,Affairs:74,idled:54,Revelation:11,"fact-bound":1,Turbin:2,Custom:40,trifled:17,inholdings:4,Galle:2,"test-marketed":112,Galli:2,"often-heard":1,Dozens:4,Gallo:2,insufferably:6,Shinbun:2,majority:22,nullifiers:4,insufferable:1,Gustafson:2,easygoing:1,sweatshirts:4,serve:42,salmon:19,cosy:1,extremely:6,"fuel-cost":1,branching:55,giggling:8,interceded:16,Waldholz:2,"Accord-fighter":1,Hapoalim:2,Yastrzemski:2,Stringfellow:2,Pimlott:2,nonrefundable:1,Wonjerika:2,defiles:20,fungible:1,Edmiston:2,Bengt:2,Wheatley:2,ruin:24,cataclysms:4,massing:8,affiliations:4,Ravich:2,Yakov:2,devastate:39,"cool-headed":1,Ballantine:2,slithered:16,Fewer:154,Paxton:2,contagious:1,Fujis:28,testifying:8,Anyway:6,dissociating:8,Fujii:2,Permut:2,common:3,allocations:4,"Heel-Holiday":2,severing:55,"builder-dealer":1,Kuwaiti:1,"import-incentive":1,summed:32,"bank-fraud":22,irregularly:6,amorphously:6,gravest:51,Boulle:2,changeable:1,Hildy:2,Customarily:6,resolute:1,electoral:1,Selectol:2,fans:18,Toobin:2,"anti-lock":1,distraught:1,Blackfeet:111,"instrument-jammed":1,"center-punch":39,DDR:2,DDT:2,DDI:2,scuttle:39,Populaire:2,Dang:2,DDB:2,Dane:2,Refugees:123,Dana:2,"half-hour":22,Arafat:2,"bank-sponsored":1,Antisubmarine:1,Morino:2,"large-screen":1,dreamlike:1,kitchens:4,"big-selling":1,Cuyler:2,geniuses:4,"Parke-Davis":2,cakes:4,Voltaire:2,FEWER:12,dances:18,caked:54,Onni:113,Munsell:2,Onno:2,"FK-506":2,Advises:20,Adviser:2,ensures:20,snaring:8,Mobilfunk:2,"old-growth":1,vertebrate:1,kidnapped:54,"stock-specialist":1,dropping:55,ensured:16,intrusive:1,"first-year":1,Stake:39,Inpex:2,gay:1,"performance-based":1,chatted:16,gas:25,gal:22,millionaires:4,gai:64,chatter:44,replaces:20,Ordered:32,outperforms:20,PILING:8,College:11,consular:1,Angie:2,clubrooms:4,mystic:3,"down-to-earth":1,Goodfellow:2,Heiser:2,Watrous:2,Receiving:8,shunning:8,aches:18,Dialogue:2,Londoner:47,engrossed:7,airbags:4,wherein:544,benign:1,discourse:25,ached:16,Pecorone:2,Monocite:2,Staley:2,husbands:4,absolved:16,Parisians:28,obeisant:1,Pardo:2,ADRs:56,motionless:1,Biomedicals:2,craved:54,redesigned:45,craven:1,Magnums:57,craves:20,toil:256,hardwoods:4,Colorocs:2,EITC:2,"new-money":1,vindictive:1,Sendler:2,"All-Star":40,Armin:2,circling:8,Bekkai:2,Wigs:4,"tear-soaked":1,discipline:44,"R.P.":2,Strumwasser:2,Nipsco:2,"Euro-enthusiasts":4,vague:1,Raboy:2,wags:4,administrative:1,unloading:55,Airfone:11,valueless:1,chalking:8,squashing:8,displace:39,Harley:2,"Matsushita-made":1,subparts:4,Campaneris:2,droped:16,Harlem:40,competitively:6,Coupled:17,Fond:40,Erbamont:11,Couples:123,surging:30,propitious:1,Embryogen:2,"your...":102,channelled:17,"fourth-class":1,Danis:2,gardening:21,Gulf:2,Eskenazi:2,obliged:48,predisposing:8,pricing:21,mirror:24,scuttled:112,obliges:20,Holden:2,Roessler:2,collapses:72,fivefold:97,metamorphosed:17,"pill-factory":1,burgeoned:32,connecting:30,verbally:6,"automobile-tire":1,Alarm:11,visionary:1,rapping:21,wayward:1,anemics:4,windowpanes:4,offenders:4,unenthusiastic:1,"Heng-Shan":2,Policies:4,"scandal-ridden":1,optimize:39,shrilling:8,Chieti:2,"mid-market":1,"anti-competitive":1,Alfa:11,Glenn:2,Choctaws:28,"nature-conquering":1,gratings:4,peccadilloes:4,extensions:4,"double-A\\":40,bluster:25,wilted:7,Chrisanthopoulos:2,harassed:32,"higher-yielding":1,"hard-boiled":1,framed:45,CWA:2,moderating:30,"Advertising\\/San":2,"custom-designed":1,"gains-tax":3,"top-yielding":1,kaffeeklatsch:64,"Non-Dissonant":2,Nichido:2,"rape-and-incest":1,butlers:4,subjectively:6,"another...":102,discomfit:39,particulates:4,"sheep-like":1,Riedel:2,de:545,"parts-suppliers":4,Fools:4,"rear-looking":1,Bigelow:2,"research-heavy":1,cubbyholes:4,Siebern:2,"corn-producing":1,Perhaps:6,notarized:17,Westinghouse:2,Zeidner:2,Occident:2,Fiberall:2,Siebert:2,brethren:4,Murder:47,adjudicate:39,Danehy:2,pennants:4,Kass:2,pails:4,priori:64,"semi-private":1,cesspools:4,Nicholas:113,yodeling:8,conventionally:6,spurns:20,patsies:4,itemizing:8,luxurious:1,depicting:8,"work-weary":1,"pro-Trujillo":1,"power-tool":3,Roussel:2,romantics:4,ascertained:54,"arm-twisting":2,Alferon:2,Strangfeld:2,"quick-to-prepare":1,Cinematografica:2,Balcolm:2,Nedlloyd:2,classic:3,beckons:20,Whosever:79,"sometimes-necessary":1,integral:22,corroding:8,factoring:21,Mellal:2,Payne:2,"record-breaking":1,Saatchis:28,Crippled:2,diagnosticians:4,countenances:4,stupefying:1,Prudential:40,automotive:1,"non-subscription":1,"postage-prepaid":1,"past-oriented":1,Takeovers:57,Woolard:2,Overtones:4,sulked:16,molal:1,McCraw:2,DKNY:2,bandoleers:4,"luxury-goods":4,Shortening:8,Lottie:2,"government-certified":1,cassocked:1,"quick-handling":1,Norway:2,Guthman:2,earmarking:8,pipes:4,inconveniences:4,revisionist:1,"Iran-Contra":40,piped:32,Milos:2,Boheme:87,"narrow-bodied":1,spacing:22,demoniac:1,FTC:2,Marriage:11,Paracchini:2,Equestrian:2,"lower-income":200,Cried:16,Intelligence:11,"franks-in-buns":4,neater:68,Crier:2,Wieden:2,"three-minute":1,opticians:4,"race...":102,"Tack-solder":39,decrease:44,Nachman:2,Brazilian:66,HOME:11,Yoran:2,"male-only":1,asteroid:3,Katherine:2,Kobrand:2,venal:1,"Porta-Potti":2,silted:17,trail:24,train:44,normalized:17,swooping:8,"beetle-browed":1,Estonia:2,embarked:32,Encourage:42,Breene:2,pedaled:17,obvious:1,unwitting:1,inviolate:1,"hormone-treated":1,Savath:2,snacks:4,"Protestant-dominated":1,sought:32,"four-point":1,HOLDING:2,"food-fish":4,Rosenfield:2,lame:1,solitudes:4,psyches:4,hedgers:4,nips:4,flanking:8,Stirling:2,factored:14,Yoshiharu:2,bushwhackin:1,billings:4,nary:546,Georgeson:2,deliriously:6,defective:1,"Fixed-rate":1,picturesque:3,Brenmor:2,sidelong:1,Weather:2,Champ:2,Kwan:2,lingua:64,Ateliers:2,Transportek:2,charting:21,Oistrakh:2,burning:5,Raccoons:4,koan:64,Neubauer:2,Quartet:11,Fortier:2,Forties:74,"well-respected":1,waggling:8,Stronghold:1,tickled:32,spell:182,Wacker:2,Loves:109,Mother:11,Exchnage:2,Woodworth:2,Tamiris:2,Jinshajiang:2,stormier:12,meterological:1,Cheveralls:2,Gunny:2,"computer-activated":1,virulent:1,Lichtblau:2,Fed:98,Richterian:1,Avelar:2,Korobytsins:4,"half-well":1,Klatsky:2,winked:32,McRae:2,burdened:54,Monets:28,"Exxon-Valdez":1,Bruch:2,Increasing:547,mats:4,Wyche:2,plods:20,"common-stock":3,repress:39,stub:25,mate:548,SICK:2,peeling:55,Tasmania:2,heretics:4,"P.-T.A.":2,affilates:4,meaningfully:6,Appalachians:28,Tanker:2,"Manitoba-based":1,"pocket-size":1,Sparling:2,Morinaga:2,"university-wide":1,"still-outstanding":1,Burgesses:4,Pantheon:2,Floey:2,fouled:85,"pre-May":1,grieving:8,Endowment:2,unspent:1,Oxfordshire:2,Japs:28,NAIRO:2,Dickinson:2,Toshiba:2,Weinberg:2,swept:85,Adverbial:1,"fiber-related":1,"gas-station":1,Bauser:2,sixteenth:1,"veto-proof":1,eavesdrop:39,smolder:33,completed:81,picnicked:16,dreary:1,perforce:6,Ryutaro:2,"Land-Rover":2,"capital-raising":3,discretionary:1,"non-intellectual":1,"anti-socialist":1,jocks:4,"O.K":106,Caleb:2,"Born-again":1,circumspect:1,Flush:1,visited:32,morticians:4,"plutonium-based":1,transitory:1,Fought:17,Pirelli:2,unlikely:97,Peg:2,Dilenschneider:2,Couple:3,Pushing:8,prays:20,parks:4,Xinhua:2,Sante:2,Santa:2,"rubber-stamp":39,savages:4,closeups:4,Trac:2,"early-morning":3,Gillers:2,Eagleton:2,Trap:2,savaged:16,trendier:12,"communications-network":1,"Inter-American":2,Tray:2,gurus:4,afresh:6,"U.S.-Philippine":1,wherewith:39,stranded:54,reconcilable:1,"silver-gray":1,"anti-American":1,normally:6,Saturday:2,Fei:2,galvanizing:55,appliques:4,"big-hearted":1,"off-hours":176,"medical-products":4,festooned:17,underappreciated:1,BEST:51,inspiring:13,"debt-payment":3,Neibart:2,couponing:308,neighbhorhoods:4,INTERVOICE:2,"Va.-based":1,Amitai:2,Accacia:2,Imrene:2,Belzberg:2,Tadahiko:2,littlest:51,Cemal:2,Selden:2,cycled:17,dripped:16,shelling:55,Seldes:2,including:8,cycles:18,filched:32,Interlochen:2,Baiba:2,adventuresome:1,"Special-interest":1,Spokesmen:123,"co-payment":1,Passion:2,"seventy-five-foot":1,injunctive:1,vicars:4,imaginatively:6,"fine-feathered":1,Noriega:11,"microcomputer-systems":1,"deep-discount":1,Ophthalmic:2,Charnock:2,smilingly:6,BARKER:2,emitted:54,deliver:42,handpicked:54,"three-axis":1,Anchor:2,festering:8,nightmares:4,asunder:6,thence:6,"hundred-and-eighty-degree":1,Design:11,Knecht:2,swallow:182,Mafia:2,"neon-lighted":1,cornices:4,relevant:1,Luxembourg:2,ushering:8,"Journal-American":2,"North-Rhine":2,Hoe:39,"Christian-Moslem":1,unearthed:54,flourishing:30,"securities-investment":1,salable:1,"quasi-public":1,Pietro:2,attends:20,certain:97,sticklike:1,"Asia\\/Pacific":1,phosphorescent:1,DeMar:2,overwhelmingly:6,protect:42,Dent:2,bulk:22,"business-as-usual":1,tenderly:6,Honestly:6,Kuala:2,bull:25,Professional:40,Deng:2,divisions:4,Virsaladze:2,"wrap-up":1,entrepreneurial:1,Production:47,extracts:18,inherits:20,penalizing:8,chaotic:1,PONT:2,Trimedyne:2,walks:72,shanties:4,LIBERTY:2,commending:8,"nine-month":1,unretouched:1,SUPERIOR:2,"pro-market":1,oink:106,"cypress-like":1,GAS:11,GAR:2,GAP:2,GAO:2,"agency-dealing":1,slammed:32,Dorado:2,frontal:1,GAG:2,Earthlings:4,eugenic:1,Handsome:66,disseminating:8,neolithic:1,JCP:2,Benesi:2,AUTO:2,Ride:216,corkers:4,binoculars:4,ghazal:64,Unruly:1,Tait:2,Cadillacs:65,PERIPATETIC:1,Cammack:2,"president-engineering":549,pampered:1,promulgating:8,Finkelstein:2,Sichuan:2,Langsdorf:2,knotty:1,confidences:4,deltas:4,necessitate:149,Excels:57,Pilgrimage:2,"P*/NNP&G":25,Resourcesrose:2,spectrophotometric:1,"Davis\\/Zweig":2,"well-worn":1,Excell:2,nastiest:51,Grandparents:113,squandering:8,Deeply:6,Amax:2,Perham:2,Flanked:17,Olney:2,"sympathy...":102,Woods:74,reconverting:8,oratorical:1,"green-scaled":1,"half-speed":1,crazily:6,Aunts:4,Wide:40,Bordeau:2,ideals:4,Offers:20,Zitin:2,Jerebohm:2,Terrorism:2,Banbury:2,shrug:182,"port-side":1,unfunny:1,Danssesse:2,BMEWS:2,panzers:4,Herrera:2,"Czechoslovak-made":1,"elementary-grade":1,Cote:2,"Boehringer-Ingleheim":2,Shostakovich:2,Afterward:6,thinly:6,Tail:2,accosted:54,oiled:1,meminisse:64,Cirillo:2,although:127,Zaffius:2,"half-horse":1,Cawthorn:2,raiding:55,"copper-rich":1,actual:1,Rubbermaid:2,ribbed:1,Mesirov:2,Comprised:17,cockroaches:4,socked:16,prevailing:30,"rule``":133,Wogan:2,faltering:55,"Montreal-Toronto":1,Wiligis:2,obliterated:17,ankles:4,imbibed:54,Laserscope:2,Woodstream:2,Ideally:6,Terranomics:4,Mountains:111,Raymondville:2,Hostetter:2,Reckon:42,"self-explanatory":1,"Ex-Wells":2,"fourth-century":1,reigned:16,Porcaro:2,biggest:380,"life-and-death":1,glib:1,Minnett:2,preparations:4,Tschoegl:2,contemptuously:6,Adopting:8,"Vietnamese-backed":1,Multiplying:8,snagged:54,Proposed:17,"image-processing":22,heatedly:6,Uninhibited:40,levis:4,Discussions:4,Serological:1,Ivy:40,"palm-studded":1,acids:4,doomsayers:4,"Would-be":1,recounts:20,Drobnick:2,separating:8,"inflation-fighting":3,"developing-nation":1,undiluted:1,antiviral:1,propects:4,bloodletting:55,"standing-room-only":1,Noriegan:1,"high-ceilinged":1,"Ardito-Barletta":2,Know:319,Noriegas:4,EQUITY:2,Knox:2,Ostlandske:2,Schrunk:2,dictatorships:4,"pilot-union":1,"dack-rihs":4,DiLeo:2,uncommon:97,previous:1,"double-helix":1,Orchesis:2,Janson:2,musclemen:4,Benita:2,Benito:2,"co-develop":39,microelectronics:91,Sleep:550,limited:103,neige:64,"many-times":6,Stardent:2,Scasi:2,wigmakers:4,Hammers:20,Carters:28,CMOS:2,poorly:6,AMONG:127,replacements:4,"anti-army":1,snipe:39,Naive:1,Sudol:2,Corder:2,hampered:54,Tashjian:2,CHASE:2,Henri:74,"co-lead":1,maximized:17,Doulgas:2,"sanitation-control":1,Henry:2,Fudo:2,"Syrian-backed":66,Biotech:2,pooled:14,greenbacks:4,Reference:11,Premier:2,"management-labor":1,phase:25,Melody:2,Leschly:2,parted:112,"reflectance-measuring":1,fabulous:1,Soya:2,parapets:4,undated:1,friendships:4,tweezers:4,chests:4,Motoren:2,fattening:55,redistributed:17,mutational:1,organisms:4,worsen:39,insinuate:39,redistributes:20,Diest:2,endorse:42,"speeded-up":1,Abandoning:8,"paper-making":1,Balking:8,Lymington:2,"American-made":1,Vilas:2,Critics:123,shills:4,feisty:1,delegates:4,Urged:17,Follow:39,represented:54,finders:4,"potato-like":1,"wait-and-see":1,Tabs:4,stipulates:20,Surprisingly:6,Owned:2,disclaims:20,Pinel:2,Owner:47,Tabb:2,stipulated:32,MBAs:4,politic:3,swearing:21,Thomasini:2,Jossy:2,Collectibles:123,Studying:8,Siemaszko:2,Sick:40,LAWMAKERS:4,Gostomski:2,Express:129,Rivkin:2,Northwood:2,mediate:39,noting:8,incautious:1,juiciest:51,"Ark.":2,barbarous:1,interpenetrate:33,"A.J.":2,correspondingly:6,Cece:2,Sugarman:2,Dilthey:2,"film-making":1,Cech:2,Ceco:2,Write:39,Ear:11,wintering:8,Poppins:2,Eat:59,prearranged:14,Rousell:2,Mister:2,Movats:2,Popping:8,unilateral:1,IIs:28,"cooling-off":3,Clyfford:2,Unpleasant:1,"non-NMS":1,Hillman:2,pluralistic:1,Wheel:11,IIT:2,sneers:72,scolding:8,infecting:8,Admissions:74,lesions:4,Jordan:2,aching:30,Michelangelos:28,Carmon:2,confrontations:4,moisten:39,Cogeneration:2,"price-jolting":1,Marlin:2,bylines:4,Kawasaki:2,"best-pitcher":1,heavers:4,snarling:8,"eye-to-eye":97,Salinas:2,"turn-ons":4,decreasing:8,aloud:6,"civil-service":3,oysters:4,nouvelle:1,Nostalgic:1,outshine:39,"Cup-Tote":2,SeaEscape:2,clapped:16,automating:8,glances:18,"Third-Period":1,entrances:4,utilitarian:1,polluters:4,supervoting:1,"first-level":1,McCall:2,entranced:17,compelling:13,glanced:16,Aspencades:28,Observatory:2,"out-of-favor":1,"pseudo-lobbyists":4,churchgoers:4,waffling:5,potentates:4,Kidd:2,Bonfire:47,Kajima:2,Fawn:2,several:97,enmities:4,potatoes:4,PACS:4,Bolshoi:2,"RICO-forfeiture":1,frantically:6,affiliate:25,Wilber:2,each:246,Chapel:11,correctional:1,imponderable:3,Neon:2,stockbrokers:4,onleh:6,"first-refusal":1,Dynamite:2,ghosts:4,"double-decker":1,footfalls:4,Paladin:2,fraught:1,Chancellor:2,counselors:4,adjust:42,splashed:32,LaserTripter:2,chisels:4,eternal:1,"Novo\\":2,Soldiers:57,"non-fat":1,Shank:2,Kotobuki:2,Insects:4,grasses:4,AmBase:2,Sancho:2,Kilhour:2,encephalographic:1,aspire:42,onto:127,tinkering:21,grassed:17,rand:19,rang:16,appeals:18,"fighter-bombers":4,bandages:4,rank:205,hearing:21,bombard:39,"now-dominant":1,Volare:2,caloric:1,triable:1,"four-cylinder":1,lulled:17,Kulturbund:2,"London-bred":1,geered:17,rewritten:17,reappraised:32,indeterminate:1,Hacksaw:2,antiques:4,Volkswagen:11,"putty-like":1,"pre-selling":55,wedge:25,Tuohy:2,"bomb-plant":1,insightful:1,"long-term-oriented":1,urban:1,overdraw:39,airwaves:4,"vertical-takeoff-and-landing":1,Carolyne:2,"non-job-connected":1,negotiating:5,wrapped:54,Benefit:59,Joannie:2,Yitzhak:2,divisible:1,bloated:7,"O.T.":2,ABA:2,interrelated:14,flame:24,Gang:11,Spirrison:2,Renshaw:2,"swift-footed":1,Pershare:1,arbs:4,commercializing:8,Menilmontant:2,advising:55,"public-address":1,slithering:8,Czechoslovakia:2,Conceived:17,predominantly:6,Picop:2,clunky:1,"wide-awake":1,"easier-to-read":1,Vowel:2,Jelly:2,complexes:4,Pikaia:2,Leland:2,Relentless:1,Attermann:2,Wang:2,Whitelock:2,gravitas:4,Shield:2,Want:42,"stock-related":1,Tetley:2,yank:63,kerchiefs:4,sage:22,"two-season":1,solutions:4,polemics:4,Pickin:8,sags:4,chewed:32,Salespeople:4,Mercantile:2,delays:18,boies:4,"takeover-stock":3,"pearl-gray":1,"eleventh-hour":1,"non-figurative":1,excitedly:6,Surrender:216,Whittier:2,Pacheco:2,imperceptibly:6,criticizes:20,fluid:22,criticized:54,congruent:1,Eurasian:2,report:24,Magdalene:2,"older-skewing":12,Magdalena:2,Sucrerie:2,translating:55,Telecharge:2,Jupiter:11,Conradically:6,"health-services":1,fragrant:1,thrashing:21,electrodes:4,wrest:39,Eckenfelder:2,proclaims:20,"price-competitive":1,"red-necked":1,corrupt:82,noodles:4,Klatman:2,overborrowing:8,Dodgers:209,Desegregation:47,Ditlow:2,"hundred-thousand-share":1,modulate:149,Kingfisher:2,brushbacks:4,Costantine:2,unconscionable:1,Dak:2,Budgeting:47,leaping:547,Lumber:11,Bangs:2,wear:551,"low-back-pain":1,"franc-denominated":1,Karet:2,beeps:4,politically:6,amortized:17,WNBC:2,Karel:2,Kowa:2,Zink:2,"infection-fighting":1,Lidex:2,"Maj.":2,GIVE:33,"beer-runners":4,"anti-discrimination":3,Runways:4,Pharmaceuticals:130,Brittan:2,Intimations:4,majestic:1,Plaster:11,"less-educated":1,banisters:4,hysterically:6,"wide-open":1,Marlboro:2,becalmed:1,subverts:20,"Pittsburgh-based":1,Kibbutzniks:4,"single-barrel":1,Mogan:2,Pennsylvania:2,Medicines:2,glided:16,"well-run":1,gasolines:4,Skoal:2,patronizing:30,Arlauskas:2,"foster-care":1,"non-Western":1,Helmerich:2,"Plug-in":1,delle:2,Spreading:2,hangars:4,confreres:552,Compaore:2,Ellis:2,provocative:1,"Boise-Cascade":2,Ellie:2,experts:4,subspecies:4,PATH:2,interacts:20,Nathaniel:2,circumventing:8,"B.U.":2,"low-income":3,"colour-prints":4,Copersucar:2,bands:4,Franchise:2,harming:8,uncharged:1,lusty:1,satellite:22,settle:42,Maguire:2,lusts:4,deflect:39,Coatedboard:2,Monsanto:2,Ashland:31,insisted:32,Bernadine:2,Ottaway:2,FUNDS:56,poked:32,savings:91,incapable:3,Trendy:1,appease:39,Lots:4,"luxury-car":22,diesels:4,mending:55,unimpeachably:6,Lott:2,DeMoulin:2,bugged:54,breaching:8,Churches:130,strenuously:6,"ever-higher":1,Georgians:28,Ought:190,dearer:12,meanly:6,"co-defendants":4,vie:149,Loyola:2,roughish:1,"image-provoking":1,overemphasize:39,"entropy-increasing":1,Giroux:2,trashed:17,Piero:2,groundbreakers:4,spanned:54,Piers:2,appearing:8,"employer-sponsored":1,hunt:44,zoom:39,offices:4,overrated:17,hung:85,superlative:1,proudly:6,Dalldorf:2,Wildenstein:2,Muck:2,Much:197,smarmy:1,"recently-passed":1,wrenching:13,Sisley:2,"self-effacing":1,companions:4,totals:72,Shoney:2,"small-appearing":1,MNB:2,MNC:2,hastens:20,PBS:2,PBX:2,disappeared:32,"two-colored":1,idolized:1,Summcorp:2,interjected:16,"By-the-Book":1,Disarmament:2,Gomel:2,Melanto:2,plus:553,improvidently:6,glowering:8,conformations:4,Hone:2,Hong:40,MANAGERS:4,"over-stress":39,credited:54,Schaffner:2,Valente:2,trafficked:16,fruitful:1,deferents:4,existed:32,sidings:4,attainments:4,sneezing:8,MiniSport:2,Illustration:2,Mammograms:4,Fellini:2,crews:4,astrophysics:4,Bonjour:64,questionable:1,Rangoon:2,calving:55,"Hon.":2,"Tax-free":1,heinous:1,satisfactorily:6,questionably:6,Maddie:2,"helicopter-borne":1,Bainbridge:2,sickliest:51,"plant-sciences":1,PERMANENTE:2,Vista:2,Granada:2,Pensacola:2,advancements:4,Abigail:2,Tuborg:2,indirect:1,buzzwords:4,propagandists:4,Lehne:2,overbid:385,emeriti:64,unbalanced:7,Effective:1,Relishes:4,"Dain-sponsored":1,miscellaneous:1,Harman:2,blokes:4,ridges:4,"catastrophic-healthcare":1,discharge:25,Kodak:11,Emile:2,Chateaubriand:2,Kohi:64,Kohl:2,Dumas:2,"well-designed":1,reappraising:8,Emily:2,pistils:4,regulars:4,"below-market":1,focus:24,leads:72,Hardings:28,ice:22,Frum:2,"crack-using":1,empathize:39,McElyee:2,reinsuring:8,pompously:6,icy:1,Jeroboams:28,charge:24,quash:39,discovering:8,Robots:113,Ferre:2,Quattlebaum:2,Ferro:2,sours:20,"hard-disk":22,cook:44,Ferry:11,little:97,stonewalled:16,"federal-systems":1,Laswick:2,"three-inning":1,"cold-weather":1,invidious:1,encroach:39,"phosphorus-bridged":1,rehashed:16,Naftalis:2,"better-than-expected":3,dries:18,drier:554,obsolete:1,Damages:57,ZDF:2,"pre-Communist":1,Abbenhaus:2,deluded:249,Sheffield:2,"Cullen\\/Frost":2,transcontinental:1,Haggard:2,Accor:2,prescriptions:4,Barrister:2,skyjackers:4,"still-limited":1,Mustang:11,"city\\/regional":1,Matrimonial:2,male:252,shove:63,healthy:1,ravaging:8,busybodies:4,Sibly:2,Maximilian:2,Hornung:2,Floating:30,"Ruanda-Urundi":2,SIDES:4,emerge:42,Kayabashi:2,inducing:8,Member:47,"trousers-pockets":4,preconceptions:4,Communion:2,"Ind.":2,Siegfried:2,hoppled:17,inflections:4,podiatric:1,brighter:12,"off-base":1,Strenger:2,"doctor-oriented":1,binational:1,Carbones:28,Wendells:28,negroes:28,Barneys:2,reorder:39,lawns:4,ayes:4,Gerardo:2,sheds:72,Fredrikshall:2,Lebanon:2,"part-timers":4,"Swallow-Barn":2,Homeless:40,placements:4,Mij:2,Beaming:8,Mio:2,Mia:2,"seven-month-old":1,geeks:4,Eighteenth:40,"five-pfennig":1,Mix:2,Gasse:2,"terrain-marring":1,IMSAI:2,intelligible:3,painkillers:4,"price-fixing":22,Jeri:2,undulated:16,cardinal:3,lucked:16,Strategists:4,begs:20,Boehm:2,etched:32,leavin:8,crashes:18,fascist:1,scoff:174,Ramirez:2,depriving:8,Rawls:2,celluloids:4,muggy:1,Ellesmere:2,liquid:3,drumsticks:4,Damas:2,Jeans:28,noncriminal:1,Breakers:74,Elks:2,Muscatine:2,Janesville:2,invests:20,Jeane:2,Trenchard:2,Monorail:2,Kwango:2,Otero:2,subsections:4,furnished:45,understandingly:6,paternalist:1,"creativity-oriented":1,"local-service":1,SOUVENIRS:4,furnishes:20,Maturities:4,White:129,"Christ-like":1,foldable:1,supplemented:54,skinfolds:4,Stung:17,abhorred:16,tangos:4,Using:8,Jordonelle:2,"investment-oriented":1,Cable:11,unhurriedly:6,underneath:325,cowering:8,Gottesfeld:2,lustful:1,Loyalties:4,Pontchartrain:2,Klauser:2,name:555,coaxes:20,sensibilities:4,laborers:4,substitutes:18,synchronize:149,"trussed-up":1,recognitions:4,"loss-recovery":1,populated:81,hiccups:4,expansions:4,uninhibited:1,Semiramis:2,Distributing:8,inopportune:1,tuned:81,plans:219,"once-downtrodden":1,Woodman:2,"low-pitched":1,issuances:4,Engineered:2,Woodmac:2,"Pennsylvania-based":1,"de-iodinated":17,antiphonal:1,"variable-speed":1,Record:128,"broker-sold":1,Security:11,"liberal-arts":4,Lamalie:2,overmedicated:17,calories:4,Accelerated:17,unpaid:1,butterflies:4,swine:4,Stark:2,Start:556,"Hartford\\/Springfield":2,Stars:239,Starr:2,hairdressers:4,"less-dramatic":1,peddles:20,Bundesnachrichtendienst:2,"intra-governmental":1,Wharton:2,terrifying:13,peddled:17,seduced:17,"Geneva-based":1,greenly:6,cope:63,Pasternak:2,"Turnpike-widening":1,Seng:2,Naked:1,cops:4,Send:216,seduces:20,immigrant:22,Mobutu:2,specify:42,Katanga:2,possiblities:4,unfortunately:6,oats:91,"capital-gain":1,"fourth-flight":1,"Time-Warner":2,mindful:1,schooled:17,Alpers:2,Alpert:2,rend:39,Topkapi:2,"Did-":2,rent:505,Unglazed:17,"hunter-killer":22,Glavin:2,sashayed:16,marathon:22,"right-to-privacy":1,"narrow-minded":1,Fazio:2,ideas:4,"great-grandchildren":4,ideal:3,Sent:17,blunt:83,DISNEY:2,luckiest:51,hooves:4,Basics:74,inks:4,barflies:4,Erodes:20,stormed:32,Waldbaum:2,Yegor:2,WHITMAN:2,CITY:2,Wagoneer:11,Taoism:2,"Type-O":1,coproductions:4,RIAA:2,Erensel:2,"Gold\\/Minerals":2,sculpted:17,"terror-stricken":1,Dassault:11,permeable:1,"F.N.":2,hustled:32,Whittaker:2,Fellowship:11,Authentication:2,Gilbertie:2,"tailpipe-emissions":152,adhere:42,hustles:20,unshaven:1,principled:1,"one-million-plus":1,"B-2":129,"B-3":66,"open-skies":1,"B-1":40,"unheard-of":1,"B-4":2,transfusions:4,"MSD-200":2,Progressive:40,H:403,Twigs:4,Arthritis:2,"non-viral":1,multimillion:3,strafing:8,Shops:557,reveal:42,Radcliffe:2,driers:4,kickbacks:4,Suburban:40,RATIOS:4,bids:18,abler:12,Wildly:6,apologies:4,determinative:1,cadets:4,kitschy:1,Edelman:2,reproducibly:6,federal:1,"Mont.":2,definite:1,Alarcon:2,"fun-in-the-sun":1,nooks:4,reproducible:1,Trevino:2,cantered:16,corridors:4,communicators:4,"pine-knot":1,jurisprudentially:6,"now-shaky":1,FUND:2,disinfectants:4,diners:4,volubly:6,interfere:42,Leitz:2,Monte:87,wanders:20,subskills:4,recumbent:1,Millay:2,Month:2,leftists:4,"Dream-Lusty":2,Monty:2,Halcion:11,Geraldo:2,Shortstop:2,armchair:22,pot:25,pontificates:20,hunched:45,Denali:2,pop:139,swum:17,hunches:4,MAKES:20,Electric:40,rhinestones:4,bequeathed:54,"cash-squeezed":1,Bisson:2,"Y.M.H.A.":2,billionaires:4,dairymen:4,Leominster:2,blessing:21,Spokeswomen:4,ADVANCEMENT:2,Stavropoulos:2,Geissinger:2,minister:47,Barmore:2,eaters:4,careful:1,irrelevant:1,sniff:39,mount:182,Vary:33,premature:1,"pre-date":39,Sega:2,Yachtsman:2,enriches:20,vest:25,Silvers:2,coupled:54,Edwin:74,Oak:11,couples:4,Oat:2,Shoppers:4,decisively:6,Cashman:2,erroneously:6,Schwarzkopf:2,dithering:8,chuckling:8,"no-profit":1,persona:80,Commodity:11,Soul:2,decently:6,Sour:2,unqualified:1,illicitly:6,Buckhead:2,Drunken:1,Appelbaum:2,synthesised:17,shroud:33,Physical:129,"LBO-related":1,Herod:2,Vikings:111,Heron:2,risking:8,Nikolais:2,halfway:218,"lower-cut":1,Propane:2,rose:558,Getty:2,Laboratorium:2,disrupt:42,Tsur:2,Marmara:2,Ricco:2,Adair:2,confines:4,"saber-rattling":22,confined:81,Beiderbecke:2,Wynn:2,Producer:47,exquisitely:6,reduces:20,snort:63,"four-in-hand":1,Israelites:28,substandard:1,"stony-meteorite":1,reduced:45,Antoinette:2,Bookwalter:2,Vevay:2,"inflation-hedge":1,West:559,"better-capitalized":1,Cracklin:2,"semi-local":1,Employee:11,Cahners:2,Bartleby:2,Berens:2,boatsmen:4,Basler:2,resonate:39,DeMoss:2,preceding:30,"loose-knit":1,Rutherford:2,Kolstad:2,"launch-pad":1,Olin:2,Neuberger:2,TRT:2,TRW:2,TRV:2,"roly-poly":1,Extensor:2,Cabernets:28,Jackie:2,informing:8,creepers:4,Coleco:2,"relative-performance":1,equalize:39,tariffs:57,Bexar:2,ladies:4,Fritze:2,Commisioner:2,"pick-up":3,Fabbri:2,Tumbling:1,Otto:2,Otte:2,theoretically:6,"Wolters-Kluwer":2,ESL:2,boatloads:4,Nabisco:2,Hurwitz:2,Vikulov:2,"expiration-related":1,liberals:4,Infiniti:2,Ashamed:1,unfertile:1,Infinite:3,Mansfield:2,"Lesley-Anne":2,"multi-millionaire":3,Errol:2,Stoneridge:2,"over-50s":4,amongst:127,Wurm:2,Sloves:2,Melies:2,Inscribed:17,pygmies:4,Kisha:64,demilitarize:39,"Arbitrage-related":1,"hard-sell":1,Saito:2,cloisters:4,"dimly-outlined":1,"muscle-bound":1,Gienow:2,Space:11,Nucor:2,shoulders:4,McKenzie:2,encompass:39,"pre-season":1,discerned:17,Hirey:2,puttable:1,narrowing:55,Hired:7,"radio-TV":3,heathen:3,SGC:2,analystics:4,Johnstown:2,Farnum:2,McCormick:2,collaborative:1,Wellington:2,concoctions:4,Zoete:2,Deafening:8,Perier:2,accruals:4,unanswerable:1,Marilee:2,conceptualizing:8,Brewer:2,Runner:2,quavering:8,internalized:17,lamentations:4,hitless:1,tanned:7,AMUSEMENT:1,Breen:2,all:560,quizzical:1,ZZZZ:2,Delphi:2,Frederick:2,swerving:8,Ayatollah:2,systemic:1,Messrs:28,deportees:4,hmmm:106,wanton:1,"kick-offs":4,"all-natural":1,"now-historic":1,Strut:39,"High-ranking":1,Strum:2,Strub:2,"problem-the":1,"al.":4,Beachfront:2,Dior:2,CHICAGO:2,sundials:4,facetious:1,chicly:6,oxides:4,Fowler:2,awful:97,quadriceps:4,sentimental:1,Nursing:116,proscribed:17,Vail:2,proscribes:20,walkouts:4,Ushuaia:2,Wellesley:2,underperformers:4,immanent:1,Durant:2,"collar-to-collar":1,Pharma:2,gleened:17,monodisperse:1,reins:4,Ewen:2,BDDP:2,Interest:47,"pound-of-flesh":1,Circle:11,Oppen:2,"Trans-Pecos":2,displaying:8,Frustrate:33,crush:25,faltered:32,"Absent-minded":1,"more-than-terrible":1,Iranians:28,Brauchli:2,condensed:7,tags:18,Exaggerated:17,unwaveringly:6,unprofessional:1,raked:32,CoAdvil:2,"Two-Year":1,"nerd-and-geek":1,"under-35":1,piquant:1,outposts:4,gamesmen:4,Toy:11,Top:117,"Italian-cut":1,bathers:4,Tok:2,Toi:2,Too:150,Lahan:2,Toa:2,senders:4,Toe:2,obscurely:6,Lived:16,jurors:4,Shiftan:2,denominated:17,Overall:510,Lives:283,toughs:4,markets:18,minor:3,"front-running":1,"Late-night":1,"which...":102,spacers:4,lopsidedly:6,pinheaded:1,Wyatt:2,basically:6,lapels:4,nitpicking:1,Silbermann:2,confessionals:4,Holewinski:2,Particularly:6,Figurines:4,wizards:4,Vasilenko:2,Kiran:2,McNerney:2,"souped-up":1,Phantom:2,spenders:4,"box-sized":1,Grahamstown:2,Nora:2,Savona:2,Nord:2,Nori:2,"mother-of-pearl":3,meandered:16,influenced:54,court:24,"half-year":3,Rockhall:2,"gin-and-tonics":4,Detachment:2,Amira:2,influences:18,"non-Korean":1,bawdy:1,Structural:40,superpremiums:4,unsurprising:30,mountings:4,Debonnie:2,profited:32,rationalize:42,prefers:20,interpolations:4,stash:63,surfeit:78,"Nasdaq\\/National":2,shade:25,"coals-to-Newcastle":1,Nikka:2,outrages:4,Vescos:28,"then-moribund":1,outraged:81,"market-makers":4,reconnect:39,"operations...":102,inquiries:4,disagreed:32,Hash:11,"yet-another":1,pray:42,Stefan:2,SAAMI:2,"Code-Alarm":2,disagrees:20,prai:33,Estimate:59,flexural:1,"W.O.":2,thoroughbred:3,mimetic:1,sucking:55,Enfield:2,Goodwill:11,imitators:4,Asean:1,"but-bulls":127,"pint-sized":1,wafting:8,stroked:32,sedimentary:1,Lambeth:2,Mory:2,electrogalvanizing:8,inflates:20,buffetted:17,Untch:2,Mori:2,expect:561,Mischa:2,inflated:103,More:562,reverent:1,wondered:32,poachers:4,convicting:8,clandestine:1,impeccably:6,induces:20,diaphragms:4,induced:54,remodeling:55,Gurus:4,Cosmo:2,Schraffts:2,"Kingdom-based":1,loused:16,bushes:4,Olechowski:2,"e.g":80,Igbo:2,progressives:4,feed:563,Huge:1,hydrides:4,feel:95,Hugo:11,Hugh:2,aseptic:1,feet:91,Buzzell:2,Autobiographies:4,soaps:4,impeccable:1,Eating:268,"majority-owned":1,Models:4,brisker:12,hangs:20,Cytel:2,Iard:2,grimy:3,Gulch:2,kilobytes:4,recovered:32,pipelines:4,Vineland:2,"property\\":1,Volokh:2,optical:1,"Suisse-First":2,Nevsky:2,"second-biggest":1,KOREAN:1,lavishing:8,"rate-sensitive":1,Korff:2,aims:72,ATMs:4,outrageous:1,Kromy:2,chousin:8,journalistic:1,risks:18,insulted:54,risky:1,Gilded:2,dropoffs:4,suspicious:1,"hour-long":1,Jane:11,cognizant:1,Gilder:2,Becton:2,rife:1,"down-and-outers":4,nights:4,Bellarosa:2,imitations:4,DRUG:47,Chimerine:2,"still-new":1,UCC:2,Seeks:20,Chodorow:2,"semi-abstractions":4,contractual:1,"free-wheeling":1,Perimeter:2,intervened:32,"Miami-Madrid":2,Orbis:2,seances:4,Waldorf:2,"steady-state":1,choral:1,boycotting:8,prestige:22,transcending:8,Finds:20,intervenes:20,Mehl:2,Augustine:2,Yaobang:2,Yoshihisa:2,"Houston-Dallas":1,Boga:2,Quebequois:2,Kimmell:2,"left-of-center":1,notch:25,Euripides:2,journeys:4,Cerebral:2,Rothko:2,"share-holders":4,Skinny:2,Entrekin:2,relive:149,stubble:3,Amateur:129,unrealistic:1,grotesque:1,GENERAL:2,rubles:4,Wilfred:172,unsuited:17,QFC:2,Pyne:2,Liberia:111,"land-rich":1,spurious:1,TIP:47,Funded:17,fastest:380,"steam-baths":4,"non-voting":3,Aldus:2,compiles:20,Protests:18,Sleight:2,timeless:1,Restudy:39,"all-federal":1,submariners:4,wheeling:21,retaliated:16,repulsed:17,Machiguengas:57,Sorge:2,declines:18,Summaryof:2,Nomi:2,Nomo:2,Eisenstat:2,declined:32,Pamplin:2,Jurgen:2,COASTAL:2,FundTrust:2,numerous:1,hairs:4,"ethanol-based":1,Cavarretta:2,leavings:4,desegregated:17,Dabbling:8,outfit:44,"counter-productive":1,"small-denomination":22,Highfield:2,radiopharmaceutical:1,Touchstone:2,Kazuhiko:2,Werter:2,hesitant:1,hermetic:1,Amando:2,Collectively:6,Sununu:2,Farmboy:2,Cannavino:2,cynic:22,Moloch:2,gussied:17,"knee-deep":1,"S-Cargo":2,Conservancy:2,marveling:8,"Vietnam-veteran":1,crispy:1,scented:7,Hebraic:1,"re-explore":39,"fifteen-minute":1,heterogamous:1,HOTELS:28,Takeover:47,Travancore:2,skyward:6,"horticultural-products":4,"Paul-Minneapolis":2,tangents:4,Ratajczak:2,kilograms:4,firefighters:4,transferring:8,"R.I.-based":1,Academic:2,Tactical:2,"well-mannered":1,"budget-making":1,plants:18,"feather-like":1,"Estonian-language":1,stagewhispers:20,Ganado:2,Winston:2,Sales:56,Rudner:2,mythologies:4,Salem:2,barricade:25,Saleh:2,evaluates:20,Hokkaido:2,"non-forthcoming":1,Italy:2,canvassed:17,Madaripur:2,Equity:11,weirs:4,Italo:2,pavilions:4,distrusts:20,Ruggiero:2,electriques:64,examiners:4,Thrombinar:2,Dederick:2,"us...":102,"more-level":1,stimulates:20,Hemel:2,Penney:11,assuaged:17,CURBING:8,stimulated:54,Rahman:2,tellers:4,"drought-seared":1,Vermont:2,"mid-century":1,"bureau-sponsored":1,"aflatoxin-free":1,"fitness-promoting":1,holidays:18,doers:4,anhydrous:1,"Ferranti-led":1,resuscitated:17,cheer:44,vulnerabilities:4,stating:8,throwaway:1,lowers:72,Anzilotti:2,scrupulous:1,canted:1,"Long-haul":1,"all-star":1,"Ai-":2,exonerating:8,Orioles:74,Territory:2,profitable:1,Overture:2,Knapek:2,observant:1,"development...":102,"topsy-turvy":97,governmental:1,Acadia:2,"price\\/earnings":4,Palfrey:2,reinstate:39,barbarisms:4,complains:20,stews:4,Youths:2,deflators:4,Anxious:1,Clemensen:2,Mityukh:2,entangled:103,Aid:128,rotate:39,"Life-preservers":4,polymers:4,"mini-vans":4,Upgrades:4,READY:40,Centralizing:8,sprinklers:4,"Gentile-Jewish":2,"many-sided":1,stagnating:8,Northview:2,Cambodians:28,Jannequin:2,HAPPY:1,Ainsley:2,braweling:8,"double-wall":1,"ill-mannered":1,adoptive:1,Coopersmith:2,Fooled:17,Bahcall:2,Frenchman:11,"under-reported":1,baited:17,Command:11,upraised:17,Tridex:2,telegraphed:16,Russia:11,Antori:2,ICAO:2,substances:4,wherefores:4,forbears:4,surfers:4,Barbakow:2,Fishkill:2,zorrillas:4,"asset-based":1,wanna:42,gamma:22,conserving:8,blouses:4,"eight-year-old":3,Elmer:2,Ponce:2,Stranahan:2,"mergers-advisory":1,"figs.":91,drifted:32,gouge:42,Zubkovskaya:2,featureless:1,"slimmer-than-expected":1,ache:44,"B-2s":65,Anthony:74,analyze:42,contrite:1,tutored:17,clots:4,LoSpam:2,enhancing:8,"near-panic":3,"smaller-than-average":1,Belk:2,Belo:2,Aparicio:2,consist:42,Bell:2,characteristic:3,Bela:2,barring:8,"full-blown":3,Belz:2,shooed:17,highlight:95,Aggressive:2,chapels:4,Belt:11,editorially:6,airdrops:4,sublet:196,Luisa:2,Luise:2,"thin-walled":1,Coolers:4,"Commander-in-Chief":2,unjustifiably:6,evils:4,Babcock:2,Hangman:2,defrauding:8,shallower:12,unjustifiable:1,artistic:1,mustard:70,Metro:11,proration:22,problems:4,"three-dice":1,helping:55,insect:22,telexes:4,garbed:17,"tear-jerking":1,rightful:1,Bankhead:2,Delius:2,sapping:8,forming:55,Hiroshi:2,"near-record":3,Furze:2,Migrant:2,"non-hydrogen-bonded":1,attaining:55,narrative:22,"six-point":1,intentional:1,Scowcroft:2,McAlester:2,wrestle:39,uninspected:1,hooks:18,"anti-Castro":1,Veterinary:40,"U.B.U.":2,grinding:55,Symington:2,fancifully:6,unstapled:1,Rohrer:2,Geneticist:2,Agree:33,Norio:2,Belvedere:2,interpenetrates:20,dramatically:6,polyethers:4,midocean:1,Esber:2,bibles:4,Calvin:2,"Soviet-German":2,posture:78,bistros:4,"still-secret":1,"super-imposed":17,Halas:2,Baltensweiler:2,"black-and-orange":1,Strand:2,"nine-day":1,"half-industrial":1,stratify:39,Subcontractors:4,DTH:2,Brien:2,flashlights:4,Maggart:2,datelined:54,Brief:129,Ellmann:2,abominable:1,Panic:47,superceded:32,"ex-bandits":4,reaching:55,Cujo:2,concisely:6,gubernatorial:1,Maryanne:2,toenails:4,Koreans:41,Highlands:46,categorically:6,"New-York":2,Obviously:6,"Mussolini-like":1,"less-than-half-time":1,"controversy-prone":1,"post-graduate":3,"one-issue":1,Piloting:8,Cuddleback:2,Immoderate:2,communicational:1,unenviable:1,"January-to-August":2,brachii:4,Danchin:2,Tanny:2,unconditional:1,definitively:6,disowned:32,"once-bustling":1,Binary:1,"strategic-weapons":1,Operational:1,"dark-blue":1,columnists:4,Input:47,"Lebanese-controlled":1,galloped:17,lamming:8,"long-delayed":1,devotional:1,garbled:17,uniramous:1,Oyajima:2,Career:11,rarest:51,"Chinese-British":1,steadfastly:6,recount:63,detects:20,"F.S.C.":2,ALL:564,Igaras:2,strategically:6,dusted:54,napkins:4,Onondaga:2,"Rhone-Poulenc":2,Amboy:2,ALT:2,ALU:2,"picture-images":4,bittersweet:1,STAGED:16,Parts:56,Suspension:2,"soil-nutrients":4,Party:11,Shipments:4,sir:235,Flames:28,sit:565,Ruxpin:2,embarrassingly:6,outclass:149,"Baby-dear":2,Edgerton:2,privatize:39,ruffians:4,Engraving:2,maternal:1,immersed:54,"beer-tax":1,impulsive:1,Ghose:2,"pseudo-scientific":1,polarities:4,reassurances:4,Nashua:2,Rifkinesque:1,sanest:51,CreditWatch:2,reauthorized:17,Wockenfuss:2,pulsed:17,demobilized:17,statutory:1,beguile:33,pistols:4,pulses:4,"cross-market":1,hankered:17,Boucherie:2,Vermeersch:2,frightening:13,McInnes:2,Liberian:1,clusters:18,edging:55,"fewer-than-expected":1,Cay:2,pecans:4,gasses:4,Cap:59,Cav:2,invitations:4,Can:487,Cam:2,Cal:2,Cab:2,Caa:40,Murders:4,PRINCE:2,gassed:17,Devonshire:2,Puget:2,railbikes:4,Autry:2,Restrict:39,BankWatch:2,beveled:17,"E.":2,disregarding:8,beavered:16,McClintick:2,lilac:1,tepid:1,indulges:20,unbelievable:1,misperceptions:4,"lesser-known":1,Wendy:11,stewardesses:4,preying:8,indulged:16,Pressburger:2,tabulate:39,Claremont:2,unencumbered:1,"dock-siders":4,"party-line":3,exporting:8,Brewery:11,supports:72,Sacrifices:4,Alva:2,LaGrange:2,molecularly:6,MacAndrews:2,weaves:18,"computer-system-design":1,"cranberry-and-gray":1,latitudes:4,Charlton:2,Landscape:2,plainly:6,"anti-seizure":1,flocked:32,echo:24,engenders:20,Accordingly:6,lovering:8,Heyford:2,Saab:2,laughingly:6,North:566,Norte:2,"Rent-A-Lease":2,Bonaventure:2,Miriam:2,"wood-paneled":1,Segur:2,fermions:4,canvassers:4,misinformed:17,Leumi:2,"high-sudsing":1,Success:47,Meredith:11,Alderson:2,musings:4,docketed:17,Directions:130,reflecting:30,overreaches:20,BLUE:1,Sniffle:2,SELLING:116,Deutsch:2,Galan:2,Leery:1,nonsurgical:1,blip:24,faux:145,Basho:2,academically:6,Michelangelo:2,angle:25,rearranged:16,Winnebago:2,rearranges:20,madstones:4,"woven-root":1,HEALTH:47,Severna:2,"re-opening":8,Barrette:1,"tough-minded":1,alarmed:14,insidiously:6,neighboring:30,Song:11,exhorting:8,IMEDE:2,Chabrol:2,"two-line":1,Millers:111,Pryce:2,Venti:2,Vento:2,bulging:30,ANNUITY:2,"wide-sweeping":1,Jyoti:2,Genevieve:2,TOPAZ:2,Lassila:2,Riiiing:106,Blueger:2,neurotoxic:1,darkest:51,"U.S.S.R":383,subtracting:8,bottling:21,squirms:20,Promptly:6,verbs:4,bogged:32,Strongin:2,"warm-ups":4,"stock-holding":1,Transco:2,broncs:4,Octobers:28,urethanes:4,Tarrant:2,deceives:20,"Know-nothings":4,allocate:42,clubbers:4,"competitive-analysis":1,liquidators:4,deceived:54,Burnham:2,FDC:2,horticulturally:6,oligarchs:4,FDR:2,geometrically:6,FRANKENBERRY:2,Ballad:2,televised:14,coveting:8,Rittlemann:2,frustrates:20,Lawless:2,Newells:28,Rudoff:2,frustrated:81,"data-service":1,publishers:4,Aviion:2,Gazettes:2,"Dallas-headquartered":1,rescuers:4,Doxiadis:2,succesful:1,Maggie:2,"anti-generic":1,"non-junk":1,Indies:111,underscores:20,auctions:18,Rolls:11,"up...":102,Axis:2,sequenced:17,carbonates:4,Ellerman:2,"R.E.":2,walk:95,Gamper:2,interface:25,phonologic:1,fledging:8,coordinates:18,sequences:4,"desk-top":1,trays:4,"i.e.":567,subsurface:1,Grzesiak:2,Brahmaputra:2,Discount:40,"pullet-roofed":1,Sandra:2,Sandro:2,counterculture:1,nickel:22,inbound:1,interrupts:20,nicked:17,injustices:4,walloping:3,"help-me-make-it-through-the-fiscal-nigh":1,CDs:92,cavorting:55,overturn:39,Innopac:2,CDA:2,CDC:2,CDK:2,CDT:2,CDU:2,Fatalities:4,Fitch:2,loosest:51,mutant:1,"ten-month":1,"mid-afternoon":34,"eight-hour":1,outspend:33,"water-reactor":1,Loving:2,kissed:32,unveiling:55,"market-moving":1,"clear-headed":1,"H.N.":2,improves:20,refinancings:4,conversations:4,Waveland:2,fantasized:17,gets:20,UST:2,tomatoes:4,sops:18,raisers:4,Alma:2,"Hanover-Bertie":2,Manuel:2,"D.L.":2,"semi-finalists":4,extramural:1,"re-paid":16,gutted:54,dismounts:20,riveted:54,Fawell:2,obtain:42,Hasidic:1,batteries:4,propositioned:16,Crews:2,Taikisha:2,toilets:4,Neveh:2,Teddy:2,Publication:47,Diagnostic:2,Downing:2,attractive:1,"c-Yields":568,stowed:54,rescind:39,Institution:2,Bloopers:4,Jaffe:2,masquerade:78,Lazar:2,Camels:4,Saledo:2,Felsenthal:2,Garonzik:2,"T\\/A":2,Guam:2,DeScenza:2,Iverson:2,incendiary:1,Ueberroth:2,Foods:41,"machine-gun-toting":1,Boylan:2,Fulson:2,"razor-sharp":1,Bouygues:113,"auto-loaders":4,sultry:1,Shiflett:2,Informed:17,Bahar:2,"pre-legislative":1,platforms:4,Kahn:2,export:205,proprietorships:4,Sherren:2,NORAD:2,Warmly:6,severance:22,Shamir:2,Sihanouk:2,Alzheimer:2,debuts:20,"soft-currency":1,"blood-flecked":1,Range:47,Sutz:2,hypoactive:1,fluorescent:1,motive:22,"half-empty":1,"death-like":1,linger:42,"shrub-covered":1,Kaifu:2,SPCA:2,"track-signal":1,monthly:34,Moehn:2,Oct:2,"blot-like":1,inaugurating:8,cocked:32,dulcet:1,travelers:4,scarecrowish:1,Chadha:2,Adjusters:4,Clashes:4,whiplashes:4,Widely:163,"well-regulated":1,Pedigrees:4,Enforcement:11,Ivory:11,van:11,Corneilus:2,incipient:1,kidding:8,divisional:1,quadratic:1,desolations:4,Commands:4,Shipman:2,Poole:2,"black-clad":1,asocial:1,"good-bye":569,"well-positioned":1,squeeze:24,untraditional:1,made:45,tactics:4,whether:570,Barabolak:2,Appleyard:2,atheist:3,Uerkesh:2,interchanges:4,Bovard:2,"wedge-nosed":1,Hamrick:2,"nine-story":1,inadequate:1,Writes:511,Writer:2,plaques:4,SEPARATED:17,APPEARS:20,mutual:1,diplomas:4,"Uto-Aztecan":2,Freinkel:2,Decathlon:2,reinvigorating:8,cutthroat:1,overtones:4,"L.E.":2,Banner:11,Strident:1,"laundry-type":1,Lehder:2,Ottermole:2,Nonbuilding:1,"Jean-Paul":2,"household-products":4,metabolized:17,"income-tax":22,Creditbank:2,twangy:1,extort:39,Garbage:2,Competitive:66,coincidentally:6,Keizai:2,"ex-employees":4,Bacteria:4,"medium-distance":1,Mortimer:2,Procardia:2,"Germany-based":1,treading:8,granting:55,"four-month-old":1,aggregations:4,Ronald:2,Visitors:56,Nagamo:2,portentous:1,shaving:21,Frankly:150,Electrosurgery:2,reconstructions:4,"second-stage":1,Ducking:8,elevations:4,Ole:66,Sande:2,internally:6,slyly:6,Chippendale:2,Dalgety:2,Rojas:2,Coupon:47,SoftLetter:2,Sands:74,"citizen-plaintiffs":4,Sandy:2,cloves:4,"small-game":3,tired:81,pulse:25,tires:18,consists:20,rusty:1,inheritors:4,"foreign-owned":1,"ten-foot":1,Weart:2,Colo:2,Supports:20,Unemployed:66,contributed:32,fingers:4,Weary:66,pathogenic:1,Wrong:66,"set-asides":4,redelivered:17,contributes:20,exclamations:4,Kassan:2,specialist:22,misjudged:32,brocaded:1,splinter:449,here:6,herd:25,reported:571,"[":528,Cold:129,"whipping-boys":4,conversational:1,"road-shy":1,Fernberger:2,Catastrophic:2,Settlements:113,HLR:2,tremors:4,symmetrical:1,Cola:2,"no-more-nonsense":1,Basir:2,MEXICO:2,fireworks:4,MERGING:8,Pomerantz:2,Scottsdale:2,"computer-security":1,Basil:2,Syrians:28,"SKr20":4,Messina:2,Merle:2,"rise-perhaps":6,Plugging:8,bays:4,Chahar:2,Humility:2,sweltering:1,Quek:2,Charity:47,expiring:8,Holds:2,holy:1,detracts:20,gashes:4,ruminations:4,Emerson:11,menaced:17,hole:24,hold:572,Pardon:25,irksome:1,porcupines:4,EDA:2,Wilderness:47,Geeks:65,"budget-altering":1,EDS:2,cristata:64,EDT:2,Hobday:2,postponable:1,Frosts:28,Positive:66,"FCB\\":2,"Ex-smokers":4,malign:1,Antonovich:2,Travelling:8,hog:19,fuzzed:32,hoc:64,drying:55,Gardner:2,"then-dress":1,hot:1,Wedgwood:2,"casualty-loss":1,classify:42,A:573,renounced:16,McKinnon:2,minimums:4,Michelman:2,infrastructural:1,Yields:4,Schober:2,overexploited:1,Manafort:2,headquarters:19,presiding:8,Lalauries:28,TASTY:1,"debt-laden":1,Grigoriy:2,democratic:1,Maruwa:2,Edita:2,schoolmates:4,Pavese:2,"home-delivered":1,dreamed:32,Mindanao:2,Jules:2,"Micro-Economics":28,murals:4,Charlottesville:2,Broadbent:2,"term-end":1,admirably:6,Howdy:106,Munching:8,Smarter:381,McKinsey:2,intelligentsia:19,"goal-oriented":1,distinguishing:30,nobler:12,nobles:4,admirable:1,grievous:1,Eubie:2,"aftershock-damping":1,SpellRight:2,Gossiping:2,awfully:6,SWITCHING:8,Gottlieb:2,pleasantries:4,"across-the-board-cuts":4,spotless:1,Dutchman:2,McCluskey:2,"Three-quarters":4,Undersecretary:2,Superior:40,Falklands:2,"chest-high":1,"jet-setters":4,"near-limit":1,contracting:21,whiz:235,"c-Translated":231,Trunkline:2,whip:25,borne:17,shutdowns:4,"balanced-budget":3,Gustav:2,trending:8,whoosh:174,Gustaf:2,"Sin\\/Your":2,Curiosity:47,Purepac:2,"pre-Anglo-Saxon":1,"intervention-speeded":1,managerial:1,"hero-worshippers":4,Hiatt:2,SES:2,Scrivener:2,"post-sale":1,piecemeal:43,reprimanded:17,Bramante:2,"greenhouse-produced":1,Votes:4,Voter:47,clinical:1,McCaughan:2,"exit-visa":1,eyeglasses:4,spinning:30,Waterford:2,Steelers:2,bitten:17,"even-tempered":1,Sonia:2,Puche:2,Mitzel:2,beguiled:17,numerological:1,Recordings:2,Simmons:113,chugging:8,bitter:1,rummaged:16,Anku:2,"electronic-data":574,cushions:4,gothic:1,Victory:11,"pulse-timing":1,Kaina:2,"Chrysler-brand":1,"ever-tightening":1,Carroll:2,Maxim:2,nations:4,Eades:2,Cody:2,Bucchino:2,fevered:1,Tatsunori:2,broody:1,corny:1,"easy-to-film":1,"on-again":1,Holly:2,corns:4,diversifications:4,Schrier:2,herdin:21,"three-foot":1,Kansallis:2,circulated:32,object:24,Pavane:2,backpedal:39,Paychex:2,known:14,"large-diameter":1,Nunzio:2,Bulloch:2,FALTERS:2,Bullock:2,pirogues:4,consummate:1,place:486,Mayumi:2,incomplete:1,marvel:63,Klansmen:28,chirpy:1,Basra:2,McGuane:2,Situation:2,heckled:17,reinvented:32,Congressional:40,touches:18,busy:1,Premium:2,skirmishes:4,typewriters:4,Whitbread:2,bust:575,skirmished:32,druggies:4,Hirschey:2,"Romanee-Conti":2,"tire-kickers":4,"non-regulated":1,Californian:213,cubic:1,Francaise:2,Vases:4,Chapters:4,Delors:2,Quicker:12,cushion:25,Stadtmauer:2,"by-wheelchair":1,Colorado:2,Ringing:268,Schwemer:2,decoys:4,Ripplemeyer:2,"three-year":1,Transporting:8,release:24,particulate:1,Sharpest:51,"stand-still":1,"sheet-metal":3,Biedermeier:280,Gruppe:2,"Famous-Barr":2,Stikeman:2,Olympian:1,result:24,internationalize:39,hammer:24,Dogs:92,peptizing:8,Cocteau:2,"Waist-High":1,Risk:47,Szold:2,overbillings:4,Rise:576,"just-revised":1,Credietbank:2,occupational:1,Terrier:2,Devans:2,parallels:18,disposable:3,"international-operations":4,inextricable:1,SUGAR:47,inextricably:6,Tomonggong:2,downgrade:25,pity:78,patented:45,Trammell:2,"Simonds-Gooding":2,Poehl:2,pits:18,mew:39,demanded:32,recoilless:1,Dreyfus:2,"colo-rectal":1,asked:577,Tallahoosa:2,lockers:4,"media-buying":10,"near-manic":1,Petfoods:28,agglomerate:25,"self-professed":1,"caffeine-free":1,Unquestionably:6,blending:55,"stock-swap":1,Columns:578,postmasters:4,Marron:2,"stop-limit":1,Clarence:2,"quake-displaced":1,Confucius:2,Worksheets:4,Tomato:2,Guralnick:2,"tax-reducing":8,skiis:4,Zoladex:2,estuaries:4,Almaden:2,Holmes:2,Hapsburg:2,Devils:28,Superdome:2,"two-fold":1,mates:4,Anselm:2,starstruck:1,levies:4,LOC:2,Mitsuo:2,Mitsui:113,"Double-Jointed":2,Responsible:1,Vacation:47,"ill-equipped":1,LOW:6,LOT:2,levied:54,crusaders:4,Marlys:2,"Co-Chief":2,marshlands:4,"computer-room":1,things:4,any:579,Newman:2,Plaines:2,Sippl:2,toasted:32,outsell:39,"bacteria-free":1,DeVos:2,DeVon:2,Rune:2,preachy:1,DeVoe:2,Naturalization:2,tune:44,"Dalzell-Cousin":2,"desert-battle":1,"before-tax":1,Nutritional:2,echoed:32,cannibalize:39,burgers:4,dewatering:8,echoes:18,rancorous:1,spurred:54,"Over-the-counter":1,Elkind:2,allgedly:6,sovereigns:4,"sub-tests":4,Whitaker:2,Elkins:2,"short-covering":22,"bond-insurance":1,Metroplex:2,enters:20,dialogues:4,Russians:41,ENVIRONMENTAL:1,ease:182,slices:18,"slick-talking":1,topical:1,terrestrially:6,"Samengo-Turner":2,easy:97,falter:42,east:34,Wilbur:2,posed:54,Kelton:2,"well-wedged":1,"MX-6s":28,poses:20,bushy:1,occurring:8,harmoniously:6,Oncology:2,Nederlander:2,bobby:22,Lowry:2,Ezekiel:2,"eight-by-ten":1,"Mts.":2,Shrove:2,"Follow-up":1,"without,``":133,Aquidneck:2,"finely-spun":1,Desrosiers:2,"N.M":2,"N.J":2,"N.H":2,midyear:22,"N.D":2,"N.C":2,"N.A":47,Suspect:1,"N.Y":2,"N.V":11,"lend-lease":1,Palms:28,"W\\/O":2,Motley:2,rehearse:39,Hasseltine:2,"speed-up":1,creative:1,imposes:20,Palma:2,"Cholet-Dupont":2,"attorney-client":1,Gandalf:2,Hippie:2,nubbins:4,Wertheim:2,terraces:4,Barcalounger:2,terraced:17,manufacturing:21,Gorby:2,"ham-like":1,intellectus:64,"Factor-VIII":2,coexistent:1,Dyson:2,"pseudo-glamorous":1,Lullwater:2,Gitanes:2,cohesively:6,leverage:25,disqualified:54,slightly:6,meddle:39,Fiero:2,consulting:122,Fenway:2,"well-cared":1,Starpointe:2,"cell-free":1,Marketed:17,Fiery:1,"consumer-products":152,journeying:8,Fuss:39,precludes:20,"chalk-white":1,Tchaikovsky:2,knowing:5,GOP:2,uncluttered:1,alphabetized:32,"Civilian-groups":28,underestimated:54,insurrection:22,"non-contract":1,offer:44,understandably:6,notifications:4,talents:4,Dalloway:2,"heavy-tracked":1,squalid:1,unchlorinated:17,"anti-dilutive":1,Seeing:229,Tong:2,Toni:2,myopic:1,Hatteras:2,"highest-grossing":51,histochemical:1,Tony:2,Andy:2,Szeto:2,fiefdoms:4,Differ:33,nectareous:1,Ruffel:2,Scurlock:2,Crush:2,Virgin:40,Virgil:2,Coburg:2,LOGIC:2,pretrial:1,Coburn:2,OLYMPIA:2,"Sunday-Tuesday":2,uttered:32,grammatical:1,ambitious:1,lenses:4,Ibos:2,smell:44,Tirpak:2,rehearsing:8,"Western-style":1,"semi-professionally":6,Luthuli:2,"non-cumulative":1,grinders:4,rolling:5,annointed:17,congested:7,denationalized:17,Kemchenjunga:2,mateless:1,serialized:17,lowdown:1,"IMF-World":2,packets:4,Quaker:2,Samara:2,unquenched:17,banners:4,Lamle:2,restaurateurs:4,perch:25,Riney:2,reviewers:4,Nicklaus:2,Desktop:2,"throw-away":1,doted:17,fawned:17,FIRMS:4,Sluggish:1,Stinson:2,Siemienas:2,Tupperware:2,Songau:2,Santayana:2,plainclothes:152,Sizable:1,KETV:2,debtholders:4,"leaving...":102,WEEI:2,Prize:11,Debussy:2,"two-door":3,Cosmic:2,Conquering:2,VAX:2,Smilin:2,fullest:51,Hannibal:2,VAT:2,thermoformed:17,"Off-Broadway":2,kneading:8,vans:4,muscat:1,Aldrich:2,reclusive:1,Dubin:2,"Stock-index":22,"post-Watergate":1,rents:18,"Coche-Dury":2,phosphates:4,leering:30,"Lt.":2,ordo:64,psychosocial:1,"retirement-system":1,axes:4,"A.E.":2,Timmy:2,proprieties:4,ACCOUNTANTS:4,Jannsen:2,creepiest:51,"steel-toothed":1,grandparents:4,funeral:22,"tight-lipped":1,Undismayed:1,alone:218,along:475,anchoring:8,"Power-generation":1,"anti-reformers":4,Packer:2,saws:4,vectors:4,Ziegler:2,Casals:2,Joshi:2,pinkly:6,Paradoxically:6,melodious:1,Delahanty:2,prefer:149,coinciding:30,unabsorbed:1,"typically...":102,Tilghman:2,Nikko:2,Donizetti:2,traders:4,unmarked:1,Crouch:2,huskily:6,homesick:1,shortfalls:4,filmy:1,films:4,unwounded:1,sonnets:4,climax:25,"carved-out-of-solid":1,marbles:4,Barely:6,tailing:8,Retail:66,"Ambassador-designate":2,logos:91,Analytrol:2,"celebrity-driven":1,foods:4,coexist:42,"dual-purpose":1,disking:8,Tylenol:2,"Greenwich-Potowomut":2,Monkey:2,evidently:6,silos:4,poking:8,Guzzi:2,CLUBBING:8,"self-critical":1,"electronicmedical-equipment":1,explores:20,transients:4,Hamer:2,explored:54,Flottl:2,"Brokerage-firm":1,such:580,suck:182,Flotte:2,Dipylon:2,titular:1,NCR:2,Borgeson:2,NCI:2,darkened:112,furiouser:68,"black-tipped":1,NCB:2,"post-trial":1,colonic:1,Protitch:2,unsolicited:1,Grimm:11,Maurier:2,noteworthy:1,"sell-off":19,heraldic:1,reaffirms:20,blustered:16,dyspeptic:1,"legal-ethics":4,Onidi:2,Widget:2,yawning:30,thumb:25,"court-reporting":1,Singin:8,"public-works":152,Kissing:8,thump:25,deviant:1,downsizing:55,conveying:8,executors:4,Returns:4,thyroids:4,chromatic:1,retrain:39,Tullock:2,Viggo:2,Tittabawassee:2,Torresi:2,Birgfeld:2,maintaining:8,firming:55,"look-alike":3,McAllen:2,wallpapers:4,"Lucky-Goldstar":2,olivefaced:1,Lotte:2,Forfeiture:2,Tristars:28,repaid:54,Governali:2,Loudermilk:2,sexually:6,regionally:6,Knife:11,"small-scale":1,Shepherd:2,Undeterred:1,"ever-optimistic":1,Minoso:2,Remembering:8,Welcome:581,Leopard:2,"non-inflationary":1,protections:4,"D.J.":2,inconspicuously:6,Saturn:2,chemically:6,Tropworld:2,superiors:4,willya:190,mapped:54,seventh:1,vicious:1,plea:25,quarterbacks:4,Fenton:2,longrange:1,monogrammed:1,silhouetted:14,undisguised:1,programming:21,routed:54,"trial-book":1,"X-marked":1,silhouettes:4,Philippians:4,LXI:2,routes:18,jumbled:17,"number-one":1,Hayeses:28,recapitalizing:8,"plea-bargain":1,bluish:1,teaches:20,speculatively:6,Horwath:2,forfeiting:8,"well-tailored":1,"ink-jetting":1,"MacNeil\\":40,rodders:4,judgements:4,dissipate:39,separatists:4,"out-moded":1,Sharpshooters:28,silvas:64,Attilio:2,Patrice:2,Josephthal:2,Patrick:2,Kurd:2,proving:55,betray:42,ridiculous:1,Install:39,"jury-tampering":1,Laff:2,Kurt:2,"nine-year":1,vocabularies:4,"Poynting-Robertson":2,"anti-authoritarian":1,scrumptious:1,Seerey:2,unprecedented:1,Athenians:28,"once-bloated":1,"WTPI-FM":2,Dissenting:1,cowed:17,obliging:1,Elemer:2,descends:20,Couturier:2,"dusty-slippered":1,foiled:81,preservative:1,nott:6,AUTOMOBILES:28,unsuitable:1,cent:80,note:582,unsuitably:6,Monoclonal:1,hedonistic:1,indebted:1,handing:8,Drop:583,"mid-twentieth-century":1,invoked:32,"East-West":40,remarks:18,prodigies:4,metaphysicals:4,"weather-royal":1,hugely:6,"market...":102,salt:22,"mega-resorts":4,twinned:17,Broncos:113,Merola:2,Mobs:4,weapons:4,slow:274,slop:25,tears:18,slog:39,"four-letter":1,wilfully:6,"suggestions...":102,"long-settled":1,godlike:1,Meadowland:2,"oil-and-gas":1,touch:584,Presto:64,"tree-clumps":4,Roling:2,"over-stored":1,"Cowessett-East":2,Starkov:2,"iron-poor":1,infringes:20,Conneaut:2,borrow:42,absurdly:6,"non-sales":1,Tripartite:2,Manchester:2,wheare:293,Frankenberry:2,marred:81,Granath:2,Edmondson:2,Juniors:585,subatomic:1,"Communist-type":1,Armory:2,"no-one":1,purest:51,Hempstead:2,diddle:106,temporized:16,mops:4,Baja:11,Allergan:2,scooting:8,jobs:4,ANNUITIES:4,Jervis:2,suppresses:20,gratefully:6,spare:586,spark:182,suppressed:81,quack:235,deliciously:6,Czechoslovak:1,jokers:4,Phipps:2,inclusions:4,"now-defunct":66,"work-rule":3,Mortgage:11,Delaware:2,Comparing:8,amphobiles:4,boar:4,aerial:1,extinct:1,"fungus-produced":1,fitful:1,sprays:4,submerging:8,stretch:205,mounting:5,locally:6,mutinous:1,Sardinia:2,"twin-line":1,Replied:16,"Pacific-listed":1,Hebert:2,Varnell:2,Whenever:293,"non-exclusive":1,Play:128,chatty:1,unclouded:1,eschews:20,pacers:4,dressy:1,"re-energized":1,moorings:4,Londonderry:2,"less-creditworthy":1,"NT&SA":2,Prettier:12,Airy:1,"minimum-fee":1,undiversifiable:1,compatriots:4,DuVol:2,Towards:587,threatens:20,scientifically:6,Freddie:2,Borglum:2,underestimate:39,ARISE:33,"pre-introduction":1,glutting:8,reverts:20,snarls:4,births:4,domineering:30,Bathyrans:28,"near-unmatched":1,culled:17,"tumor-necrosis":1,Jiaqi:2,"blind-pool":1,hubba:106,Colorful:1,Holies:28,Holien:2,"Sonet-based":1,"color-field":1,PWA:2,"wraith-like":1,Lucerne:2,exacerbations:4,distills:20,sprayed:54,"white-shoe":1,Sokolev:2,amalgamate:39,slimy:1,propfan:70,pols:4,omissions:4,inaudible:1,TEXAS:2,Louchheim:2,briefings:4,unprovocative:1,color:139,Morfey:2,antagonisms:4,Takamori:2,Artemisia:2,Nicastro:2,TBWA:2,Secondly:6,Tripe:2,Nile:11,Richert:2,transcended:16,boycotted:17,Sherwood:2,"cash-draw":1,partaking:8,"Beirut-on-Hudson":2,expunge:39,nutrients:4,Dubois:2,Augustus:2,discarded:54,tsunami:19,Beall:2,Fourtou:2,pundits:4,HOMESTEAD:2,Beale:2,Soukhouma:2,bankruptcies:4,"most-used":1,Stockgrowers:28,Delaney:2,Rubinfien:2,"sweetest-tasting":1,conscionable:1,JACKPOT:2,Ruidoso:2,searing:30,abusable:1,Orthopedic:2,exit:25,forecasted:17,dissociates:20,"hand-written":1,DeTomaso:2,Daimler:2,scientific:1,power:24,intimate:104,Carrot:2,Meisenheimer:2,Glenda:2,travelin:8,treatable:1,favorite:3,Kysor:2,slender:200,Riunite:2,"J.N.":2,stipulations:4,"lower-status":3,"independent-minded":1,Losers:4,lofty:1,irreversibly:6,Beaten:17,"T-bond":3,accumulates:20,Branman:2,Acting:258,certifying:8,"bargain-basement":3,accumulated:81,Guadeloupe:2,simulcasting:8,Wilcock:2,Queenan:2,Benched:59,stylishly:6,"bulk-buying":1,"semi-ambiguous":1,Feinstein:2,percussive:1,mollify:39,viscous:1,innovated:16,BUILDING:2,complete:586,"fifth-century":1,Bum:2,Steuben:2,"made-for-television":1,mice:4,cords:4,darken:33,"pajama-clad":1,microphoning:8,couching:8,Bug:47,stonily:6,"self-perceived":1,darker:12,Anglia:2,brotherly:1,exhausted:54,"savers\\/investors":4,accents:18,washings:4,Criterion:11,McRaney:2,clauses:4,Barbary:66,subjugating:8,"nuclear-tipped":1,Acorns:4,abolish:39,Stensrud:2,Preussag:2,predestined:17,grammarians:4,pollutants:4,Bullshit:106,standardize:39,forgettable:1,"non-Japanese":1,bombed:54,Visscher:2,Practical:66,Cardiff:2,Glove:2,Nonspecific:1,Pease:2,Greentree:2,principally:6,disdained:17,Fordham:2,"Sparrow-size":2,mocking:30,Ascent:2,wag:78,fraudulent:1,Rychard:2,Artur:2,oppressors:4,splicing:8,consider:42,Knowledgeware:2,Physiological:40,"worker-years":4,"Usinor-Sacilor":2,Boutflower:2,tours:18,"aflatoxin-producing":1,GROWS:20,"Y-cell":47,"Earthquake-related":1,Rooker:2,fjords:4,Barbara:2,Evil:129,"state-plan":1,Kingsley:2,smile:44,wad:25,Colby:2,Ollie:2,BREAKERS:2,encroaching:8,blebs:4,Fassbinder:2,laying:588,Lycra:2,swirling:8,"wind-and-water":1,"blue-blooded":1,Gasich:2,tricolor:1,Nolen:2,destitute:1,"cabin-crew":4,"near-blind":1,"antibody-producing":1,"million-square-foot":1,Bourn:2,dispassionately:6,disruptions:4,resume:182,Capo:2,succinct:1,"consumer-driven":1,Cape:11,"high-purity":3,Jiang:2,trampling:55,"N.A.":11,Newhouse:2,concluding:30,outdone:17,reshaped:54,showrooms:4,Korbin:2,roadways:4,reshapes:20,infrequently:6,healthier:136,social:3,underrate:39,Circuit:11,Marne:2,"mortgaged-backed":1,apprised:17,regiment:25,whimsically:6,compensations:4,"old-model":1,Nutritionists:4,"Md.":2,fetuses:4,"catch-all":1,"twister-coners":4,objectives:4,Romano:2,maltreat:33,Romans:41,Stehlin:2,"Newport-based":1,waterways:4,Janssen:2,Quebeckers:28,Leason:2,Yeung:2,normative:1,"Then-Navy":2,Tiffany:2,classificatory:1,Perelman:2,abundant:1,Manly:2,toughened:32,punched:32,Bayreuth:2,"safe-deposit":1,libertines:4,CARIPLO:2,salty:1,"profit-maximizing":1,Saville:2,dress:24,"Castro-led":1,salts:4,condemn:42,Pagurian:2,Mountaineer:2,trebled:54,emancipated:14,ungoverned:1,functioning:55,metalworkers:4,BanPonce:2,Instantaneously:6,appealed:32,snotty:1,Taoist:2,"Market-If-Touched":2,childbearing:8,manipulated:54,"earnings-growth":22,impermissible:1,Hathcock:2,"re-enforces":20,Lyman:2,"pear-shaped":1,incessantly:6,"yellow-green":1,Bluebonnet:2,"guaranteed-neutral":1,"Serv-Air":2,bulldozers:4,Thorndike:2,Zweig:2,"ruble\\/gold":1,Copperweld:11,behahn:6,Fixed:45,rapidly:6,laddered:1,"face-amount":3,ruining:8,Sischy:2,snobs:4,tyrants:4,secondarily:6,"O.B.":2,Nozze:64,snowball:25,renegotiations:4,outlawing:8,Dwellers:4,reticent:1,reassured:54,"defense-appropriations":1,shifty:1,Loman:2,war:269,"double-A-1":3,coping:55,"Universal-Morning":2,labeling:55,Ricca:2,Connections:123,Bolshevistic:1,Lomax:2,floors:4,cratered:17,Seltzer:2,Lomas:2,Quinlan:2,marry:42,execs:4,airconditioner:12,incinerators:4,prophesying:8,Oldham:2,grandmothers:4,Inmate:2,blues:152,"office-systems":4,terrify:39,really:6,midcontinent:1,Dion:2,"once-high-flying":1,norske:2,Flaming:2,NewsEdge:2,Ostro:2,Toyota:2,"blue-draped":1,"shop-till-you-drop":1,Peacekeeper:2,"P.J.":2,"figures-order":589,reared:32,retained:81,TBS:2,misusing:8,afflictions:4,Lausanne:2,unmanned:1,"company-sponsored":1,exhibited:54,"two-letter":1,Alwin:2,"A\\/S":2,Combs:2,Garrick:2,"sit-down":1,adduce:39,Combo:2,Topper:2,ironing:55,Combe:2,Iglehart:2,Ghettos:28,franked:7,exertions:4,Transportation:11,lengthiest:51,Cosma:2,Enterprises:41,flings:4,franker:12,Nonfat:2,degassed:17,Tracor:2,Underwriter:2,depressingly:6,philantropists:4,"two-bedroom":1,Catherwood:2,Mesa:2,Reinforced:2,"B&B":2,Clausen:2,Kramer:2,"B&H":2,"less-indomitable":1,defends:20,"Vivaldi-at-brunch":1,"B&W":2,Freind:2,Nowadays:6,"Rican-American":2,Connell:2,Yigal:2,hams:4,precipitating:8,pranksters:4,Sesit:2,Rockwell:11,pajamas:4,"carbon-impregnated":1,"craft-industrial":1,directives:4,Leopold:2,Erection:2,flatnesses:4,firsthand:277,swiftly:6,Wards:113,"anti-takeover":3,offensively:6,Zaishuo:2,Lumped:17,Munroe:2,donkeys:4,"Securities-trading":1,Amerace:2,"have-not":1,clog:39,frocks:4,"Post-tragedy":6,friable:1,Ahmanson:2,"alcohol-powered":1,Noonday:2,Kingdom:11,spineless:1,Muslim:2,misplacements:4,ELECTED:16,younguh:12,Revivals:4,"financial-services":93,occuring:8,beams:18,"ever-worsening":1,adheres:20,"anti-Somoza":1,devising:8,adhered:54,"steel-casting":1,untreated:1,Shietz:2,"Richmond-Petersburg":2,riven:17,tabby:3,Athlone:2,proclaim:42,IBEW:2,mineralogical:1,Grattan:2,nibble:63,picketers:4,Correspondents:28,"snow-white":1,avowedly:6,sacred:1,puncturing:8,"shorter-tenure":1,Saskatchewan:2,currently:218,"triple-B-minus":40,Sons:130,futile:1,Sony:2,"all-too-sincere":1,buoys:18,Bridgeport:2,"self-centered":1,OUTLOOK:2,"Prime-1":3,"Prime-3":1,"Prime-2":1,mitigating:30,Lipner:2,Honor:11,Sikorski:2,rehashing:8,prospects:4,dauntless:1,influential:1,Worldscope:2,offending:8,Donaghy:2,unMcGuanean:1,Calaveras:4,approve:42,Legislative:2,soundings:4,except:397,Greatness:2,churns:20,"joint-production":1,backsides:4,"trade-distorting":1,publishing:122,Nestled:17,MARCOS:2,lizards:4,Tickell:2,convicted:54,calculi:4,Scout:2,"incentive-backed":1,Queensland:2,Infotechnology:2,sweetheart:22,silenced:54,Seaga:2,bitchy:1,silences:4,sleeves:4,Saudi:40,"long-depressed":1,handling:21,reinstalled:17,nonmaterial:1,micrographics:4,Kassar:2,"single-sponsor":1,CAREER:2,Yair:2,Turnkey:2,Kassal:2,kissing:8,"heart-pounding":1,hoping:8,folksy:1,Detractors:4,Galapagos:2,"bank-baiting":1,ducks:18,"all-automatic":1,centennial:22,triple:590,beautifully:6,"carry-forwards":4,Doerig:2,shorted:54,fibers:4,shorten:42,tells:20,shorter:12,Ichiro:2,"x-Includes":20,virtually:591,Fiats:28,Quint:2,foments:20,Gehl:2,commune:315,servitors:4,gringos:4,Skeletal:1,unsatisfied:1,"ill-defined":1,nondeductible:1,jealously:6,"marine-products":4,Rainier:2,imcomplete:1,"long-suspected":1,stack:25,crosscurrents:4,"institution-wide":1,rosters:4,"immediate-response":1,Lanston:2,"Ill-considered":1,Lottery:2,Landon:2,"commercial-satellite-launching":1,schedules:4,Survivors:4,arrests:4,Aeronauticas:2,LaWarre:2,Landor:2,wits:4,assaying:8,overbroad:1,surprises:18,"night-time":1,signals:18,Sulcer:2,grapefruit:19,Talk:269,Rodeph:2,submissions:4,surprised:45,"add-on":3,Daniels:2,BRACED:2,Ohara:2,"Dow-Jones":2,depreciable:1,"hurricane-hit":1,aerospace:22,indelibly:6,Maytag:2,projects:18,Epplers:2,worsening:5,forcibly:6,Bedridden:1,communications:91,Leben:2,confinements:4,Professor:2,stylish:1,cronies:4,Mondonville:2,buddies:4,Andi:2,Alterman:2,sponsorships:4,"federal-question":1,FEAR:174,Insam:2,"full-dress":1,Daniele:2,linkages:4,Meech:2,Foreigners:4,"prior-day":1,Bohmerwald:64,waiving:8,Transwestern:2,major:466,Pollution:2,"Michigan-based":1,exaggerated:81,captious:1,coureurs:64,Radioing:8,Katie:2,"Kans.":2,repair:44,Carthage:64,recreate:42,Carthago:64,collapsible:1,Gian:2,careerists:4,Findlay:2,sneaky:1,spending:592,"poison-pill":3,sneaks:20,submit:42,custom:168,Foamy:2,bridesmaids:4,"fund-raisers":4,":":102,torquers:4,Regarding:8,Strongheart:2,atop:127,Kanegafuchi:2,Yank:47,Moby:2,SJO:2,coldest:51,McLelland:2,FreudToy:2,inducements:4,bumpers:4,Africa:2,slander:25,behavioral:1,continuously:6,cachexia:64,Excerpts:4,"operating-cost":1,"single-country":1,discolored:14,"corporate-owned":1,cowboys:4,"eye-catching":1,Outside:464,Babe:2,subtypes:4,"billion-dollar":1,"re-established":16,Pawcatuck:2,sunken:1,invalid:593,occasional:1,"wildlife-related":1,"defense-products":4,tenterhooks:4,tart:3,elements:4,scrub:520,beginnings:4,provided:54,"fixed-dollar":1,Derby:2,unpunctured:1,bedeviled:17,articulations:4,ago:400,furthest:380,Nineties:28,reasoned:85,scotch:25,age:78,mailgrams:4,carrying:5,Huwa:2,teachings:4,"military-style":1,Mercury:2,partial:3,"Ever-confident":1,Betsy:2,"non-propagandistic":1,dainty:1,churned:16,detoured:32,"what-will-T":594,Alden:2,curds:4,Yaniv:2,oceanfront:3,primly:6,postings:4,probe:24,"end-of-the-year":1,torture:24,Dain:2,continues:20,Femina:2,Classics:57,continued:85,timely:97,Ambassador:11,Grabowiec:2,Patriots:28,Hieber:2,Lentjes:2,visuals:4,"Petipa-Minkus":2,"venerable-but-much-derided":1,Nurse:2,odd:1,Labovitz:2,Stonehenge:2,Bodleian:2,toughens:20,"life-size":1,Mondale:2,slabs:4,counterbalancing:8,lappets:4,respectively:6,gathered:32,delivering:8,octave:1,medallions:4,"price-driven":1,gazes:20,Giorgio:2,great:97,coops:4,Kantorei:2,receive:42,titanic:1,Maalox:2,overcommitted:17,Lips:4,defeat:44,bookkeeping:21,"quarter-century-old":1,"double-B":1,Helfman:2,slogging:8,Excludes:72,disobey:39,terrified:81,Triptych:2,extricate:39,"anti-tax-shelter":1,Danieli:2,"foreign-exchange":3,"quick-drying":1,Counters:20,unphysical:1,"drawing-rooms":4,figurative:1,"open-minded":1,duplicate:83,Chetta:2,Chok:2,purposes:4,subdued:81,Chou:2,Chow:2,gladly:6,delegating:8,Lanny:2,Mergers:41,"ill-trained":1,animals:4,this:595,"two-part":1,"run-scoring":1,thin:121,feistier:12,overcooled:1,Inmac:2,reeds:4,Hemus:2,"off-color":1,reedy:1,Copies:4,Inman:2,"disease-resistant":1,intramural:1,hereinafter:6,interdenominational:1,weaken:42,"W.B.":2,mutually:6,wares:4,courtiers:4,Shcherbitsky:2,"Rim-Fire":1,scammed:16,singular:3,"successors-in-spirit":4,Disease:11,nailing:8,"Frost-Debby":2,preferring:8,"little-town":1,bellboys:4,Clarita:2,Apple:11,CRAY:2,or:596,Denis:2,RACIST:1,Buffeted:17,MLPI:2,Leahy:2,Catholic:129,"point-spread":1,produces:20,Microbiology:2,produced:54,Pfau:2,"year-earlier":3,Serene:2,Caters:2,Friedman:2,Cracking:8,silken:1,elites:4,bolting:8,Qizhen:2,popularized:54,"gun-slinging":1,detergents:4,bothering:8,Costner:2,Cowley:2,orphaned:14,"left-right":1,Arlen:2,hallmarks:4,San:597,Sam:2,Sal:2,undertaking:21,traced:54,Sag:2,accompanies:20,Sad:1,Kooning:2,Yetnikoff:2,vibrations:4,Conan:2,accompanied:54,Inspections:2,Saw:598,Sat:16,Platinum:47,overextended:45,exacerbated:54,Dentsu:2,yellowish:1,doing:442,Underage:1,upholders:4,static:3,snippy:1,"half-jokingly":6,hitches:18,Evergreen:2,Lourie:2,susceptors:4,traversed:54,Nerio:2,"O&Y":11,Alpine:40,Solitudinem:64,Spikes:2,"NT&SA-run":1,Meek:2,"J.X.":2,temps:4,Miguel:2,tied:81,tempt:42,shun:42,Meet:188,steering:122,assiduously:6,defining:8,scary:1,Rullo:2,scars:4,vineyards:4,Naderites:4,Jump:25,pigs:18,Fredric:2,CHEVRON:2,Fredrik:2,scare:182,equates:20,Nary:2,Popish:2,touring:5,autographed:14,"three-way":1,Nara:2,"mid-Victorian":2,Suites:111,Placentia:2,PROCEEDINGS:4,imitate:42,detectable:1,AMERICANS:4,"hand-crafted":7,belligerently:6,travelled:103,Reproach:39,Nylev:2,Bowes:2,Trophy:11,UNR:2,suburbanite:3,"red-tipped":1,rearmed:1,fizzes:20,Gwyn:2,beatings:4,UNA:2,UNC:2,"tacked-down":1,Assad:2,Beermann:2,Lawton:2,Bolton:2,inscriptions:4,"dead-end":1,Pohs:2,Handsomest:51,Corne:2,Willson:2,Disciplined:17,disband:39,Pohl:2,"terror-filled":1,Teter:2,"belly-flopped":16,Aging:116,Fosback:2,poisons:18,Westminster:2,Bachtold:2,Correctly:6,Elianti:2,viewed:54,Pacholik:2,Petermann:2,"health-related":1,Midlantic:2,BIG:40,BID:2,jurisdictions:4,"five-coordinate":1,Hodges:2,"Yugoslav-born":1,Colinas:2,injunctions:4,BIP:2,toughest:51,embroiled:17,Hendry:2,"conservative-liberal":1,noblesse:1,Polycast:2,"better-known":1,Advertising:258,vultures:4,Asked:54,Descartes:2,manuevering:21,"checking-account":1,Acquired:231,Gyllensten:2,"U.S.-Czech":1,Relative:1,"double-A-rated":1,Brieff:2,wounded:14,CONGRESS:2,monasteries:4,hawing:8,terminate:42,centralized:103,Took:16,Shrine:2,mismanaging:8,unconnected:1,"medication-dispensing":1,Bissell:2,"Soviet-Western":2,"H-2":2,Jill:2,Gatsby:2,printers:4,Younger:195,Unwinding:8,Kaufmann:2,"H-P":2,Malknecht:2,doubtful:1,moneymakers:4,"B-I-G":2,"once-scandalous":1,Vigier:2,"T-Max":2,"Supt.":2,"anti-programmers":4,"four-megabit":1,"six-person":1,furs:4,withstand:42,Amneris:2,Rubel:2,Donner:2,primarly:6,exerted:54,Chalidale:2,"state-administered":1,Joanne:2,"dust-settling":1,Arimathea:2,Restoration:11,unravel:42,Lockerbie:2,legitimize:39,sevices:4,harsher:136,Republican:129,browbeat:39,retentive:1,Kalentiev:2,Andrzej:2,Developing:229,"single-A-3":10,"single-A-2":10,"single-A-1":3,"second-order":1,Vedrine:2,weary:1,Stalling:8,"stake-building":8,"more-volatile":12,drillers:4,recorders:4,Mossoviet:2,etc:147,puff:25,Buskirk:2,Sunman:2,strongly:6,epigrams:4,apportionments:4,Would:190,Godkin:2,"editing\\/electronic":1,unsanctioned:1,Turin:2,Marantz:2,Crouched:17,powered:14,Outputs:4,mathematics:91,poured:32,Westborough:2,"pro-Castro":1,totaling:8,Expand:2,"high-toned":1,Financiers:4,crisscross:33,pixies:4,"emigration-related":1,Financiere:2,Naxos:2,Shaking:8,freewheeling:1,"consumer-led":1,"median-nerve":1,apparitions:4,Farragut:2,memorizing:21,AIChE:2,"cameo-like":1,aesthetics:4,"silver-haired":1,Vesuvio:2,"odd-year":1,orchards:4,optimistic:1,raison:147,Mathematics:11,Toxic:1,conserve:39,terrorist:3,"market-inspired":1,dilate:39,earthmoving:3,tempestuous:1,digging:55,repercussions:4,Rafale:2,"Three-day":1,restating:8,Benedek:2,assuaging:8,Medical:40,wisest:51,siphoning:8,Garrard:2,"six-week-old":1,Superfund:2,Cowles:2,Soignee:64,"well-illustrated":1,Violin:11,"turned-up":1,strategicarms:4,Influenced:2,inconsistently:6,Polian:2,"corporate-pension":1,dachshounds:4,Hayden:2,PROSECUTOR:11,Tyre:2,"day-to-day":1,"hand-operated":1,Proxmire:2,nonsegregated:1,Theodosius:2,"developing-country":1,Nilsson:2,pompous:1,Brigadier:2,Reason:11,Divesting:8,noblemen:4,harshened:16,Norall:2,increased:599,Launch:25,Heartland:2,fairies:4,Shipping:11,WayMar:2,increases:18,Cellular:2,Sao:2,incessant:1,Casablanca:2,"tablet-shattering":1,Raydiola:2,CITIZENS:4,purling:8,pries:20,garage:78,"post-June":1,JUDGE:47,THOSE:246,sinewy:1,Brougham:2,Vladivostok:2,sinews:4,almonds:4,downside:22,"seed-bearing":1,oneself:53,LeBoutillier:2,Vladimir:2,jalapeno:1,Luerssen:2,literally:6,Karamazov:2,Say:188,"non-option":1,does:20,blurry:1,Desarrollo:2,cadaverous:1,Inside:600,"no-loads":4,"behind-schedule":1,yuh:53,residences:4,Egil:2,beneath:206,slackjawed:17,asks:20,traces:18,Rapp:2,Tammen:2,laboring:8,courtly:1,"on-stage":1,encamp:39,"Spice-Nice":2,Rape:2,executives:4,enigmatic:1,ACCOUNT:47,contractions:4,"title-insurance":3,Desai:2,iodinating:8,"combat-ready":1,roads:4,negotiable:1,Network:11,peccavi:64,"Jeep-Eagle":2,Micronyx:2,Hulbert:2,trigger:182,troubling:13,"inter-tribal":1,bd:4,Cogefar:2,Ambler:2,Verrone:2,Finnair:2,Isosceles:2,teleological:1,DIET:2,Portillo:2,"water-treatment":22,"Chatter-Proofed":1,dextrous:1,be:538,headrests:4,DIED:16,arsenals:4,"six-inch-square":1,Gettysburg:2,Gourlay:2,"non-casino":1,nominations:4,"custom-tailored":1,fold:182,menstruation:1,kowtow:39,Portage:2,gasconade:39,cosponsored:17,"sixth-largest":186,Yamaichi:2,endeared:32,DAF:2,Kohler:2,Brain:47,"gold-backed":1,DAT:2,nosedive:22,Naktong:2,"state-dominated":1,Hayward:2,DAX:2,DAY:2,"Bathar-on-Walli":2,woodlots:4,colonized:32,bailing:55,Aslacton:2,Karatz:2,Karate:47,Beringer:2,Testament:2,Mainstream:47,tidelands:4,Findings:4,Pyrex:2,hoots:4,"Thirty-one":1,rule:24,soporific:1,"computer-magazine":1,"delicate-beyond-description":1,abhor:39,Epstein:2,InterMedia:2,AGI:2,Missail:2,crunchier:12,AGF:2,AGE:2,Stuart:2,AGA:2,Messenger:11,AGS:2,relationships:4,votes:18,"anti-cartel":1,"J-2":2,endings:4,voted:32,Vere:2,Rocking:2,Toth:2,Iranian:66,gobbles:20,Volio:2,Centerior:2,egrets:4,exporters:4,Automatic:40,gobbled:32,tickets:4,Daim:2,furrowed:7,Helton:2,Longinotti:28,scalar:1,casinos:18,delegate:25,"war-dirty":1,quaking:8,nondescript:1,Harbridge:2,"Cowboys-owned":1,Wah:2,phoney:1,pragmatic:1,Matuschka:2,"two-note":1,phones:18,shut:601,skillfully:6,resubmitted:16,Strange:66,follow:42,MacGregors:28,spontaneously:6,sorriest:51,phoned:32,perish:39,Minnetonka:2,Trivia:2,"seven-thirty":6,Deluged:17,incompatible:1,Ones:2,toll:25,Onex:2,tole:602,told:32,unmotivated:1,simultaneously:6,Padre:2,WASHINGTON:2,"week-ends":4,kindled:17,Simulated:1,Addicted:2,"Ft.":2,kudos:4,Merrill:11,walkin:8,struck:32,Santucci:2,CTS:2,Stratus:11,angrily:6,charred:7,Health:11,ESystems:2,CTB:2,embarrass:39,Ouija:2,Akros:2,Bernhardt:2,substitutions:4,"prices...":102,Foil:2,whinnied:16,Akron:2,Unwanted:1,PaineWebber:128,Squadrons:2,Masterson:2,tumultuous:1,Introduces:20,Feeds:4,Introduced:17,"self-involved":1,handkerchiefs:4,Challenging:8,"full-throated":1,work:44,worn:14,resents:20,mammalian:1,macroscopically:6,criticizing:8,exhorts:20,Swan:11,Hurricane:11,Pennock:2,hyphenated:7,Frontiers:4,"dry-eyed":1,Parkos:2,Journal:11,hosannas:4,disappear:42,"completed-contract":1,disappoint:39,Arguing:8,Rilly:2,FORCES:4,subbing:8,Will:603,Wilm:2,interlibrary:1,Wilk:2,Wild:40,Wile:2,"blonde-haired":1,meaningful:1,nipped:16,shimmering:30,foolhardy:1,thickens:20,Afanasyeva:2,Sexual:2,order:604,Moultons:28,Eye:11,Longman:2,"five-blade":1,Indeterminate:2,proportionate:1,Absorbed:17,debuted:16,upholding:8,bugless:1,extraterritorial:1,Monetary:129,clanged:16,pricier:12,stippled:1,"securities-price":1,Burns:2,Burnt:2,Raising:229,willling:8,"three-cornered":1,Pros:4,Mitropoulos:2,Reama:2,"friction-free":1,Travels:113,Suggests:4,Foote:2,shameful:1,Gumport:2,Rathbones:28,Rubicam:2,bolted:54,weasling:8,doles:20,NPD:2,GFSA:2,doled:32,Gallant:2,Groton:2,Rhine:2,Choking:8,Feminist:2,SOME:246,Galland:2,Montbrial:2,disappointing:1,recognizable:1,Tournier:2,reformists:4,Novak:2,Presbyterian:2,cameras:4,"baby-products":1,unproblematic:1,Napoleon:11,Bugatti:2,"deep-sounding":1,arpeggios:4,Assemblies:2,"atom-like":1,admits:72,"anti-Soviet":1,"Griffith-Jones":2,condicions:4,theoriticians:4,"entry-limiting":1,Norell:2,"Zend-Avesta":2,undaunted:1,Australasian:1,louse:63,"myth-making":55,lousy:1,cannisters:4,"Baker-Shevardnadze":40,SWAO:2,Palestinian:117,"split-level":1,overaggressive:1,Going:229,"Aegis-class":1,comin:55,comic:3,Symbion:2,Hustle:39,Garish:1,Tests:56,hedging:605,Repository:11,Testy:1,Kolber:2,Fawzy:2,Testa:2,compromise:70,"horn-rimmed":1,Psychotherapy:2,Fawzi:2,Disneyland:2,"S*/NN&L":40,decorations:4,fanatical:1,provisioned:17,radars:4,"Care-Unit":2,rejected:32,Preparation:47,Ahmet:2,weakly:6,southernisms:4,"Y&R":2,Berman:2,dissociated:17,Selkirk:2,"face-saving":3,disproportionally:6,Mitofksy:2,hike:25,"non-freezing":1,programs:4,Wrecks:20,songwriters:4,"high-cost":1,Prose:2,Madonna:2,hacking:3,haves:4,"much-abused":1,Ticor:2,rewrite:63,Cordier:2,maniclike:1,"Rig-Veda":2,"Msec.":4,"super-regionals":4,lull:25,"Reagan-era":326,accompany:42,Knupp:2,Quasimodo:2,"beef-fat":1,ponder:42,genuine:1,"small-lot":1,"retail-sized":1,Amory:2,Fleetwood:2,Stroud:2,gnomelike:1,overtook:16,"virus-free":1,Stroup:2,circles:18,Aristide:2,Metropolian:2,SYSCO:2,Quayle:2,solidified:32,HEXX:2,Demanded:16,circled:16,tally:24,corded:17,solidifies:20,Vieth:2,Aidan:2,Ardmore:2,Telegraaf:2,newcomers:4,"Self-contained":1,Election:11,deeply:6,Institutes:41,Native:40,decidedly:6,teetering:30,knightly:1,Dimitriadis:2,Powell:2,Monteith:2,sharks:4,sewn:17,Fasken:2,Facetious:2,elucidated:17,thermodynamically:6,"fast-opening":3,pursuing:55,"so-far":1,Orkney:2,sews:20,"higher-capacity":1,Leven:2,Level:11,transfixing:8,unsteady:82,preferred:606,Vieira:2,Oranjemund:2,MTCR:2,Lever:2,Francona:2,savory:1,Menagerie:2,speared:16,"R.J.":2,Peres:2,nuper:64,Brownlow:2,humanist:3,radiators:4,Dobbs:2,analytical:1,Perez:2,steal:42,Christendom:11,observes:20,"H.C.":2,Semmel:2,observed:81,"building-materials":4,Cetus:2,scrutinizing:8,gesticulated:16,chiding:8,Pricey:1,chortling:8,seeping:8,"yen-support":1,mincing:8,Nasser:2,detracting:8,Issuers:4,negatively:6,"straight-talking":1,received:112,combating:8,ill:607,paralyzing:30,DaiIchi:2,receives:20,Mickelberry:2,groans:20,Honors:113,"department-store":22,"Feb.":11,ETR:2,Klemperer:2,spear:25,Cheeses:28,ETA:2,urgencies:4,wider:136,speak:42,engines:4,Modrall:2,exhume:39,Vague:1,leech:25,Quotation:2,hiders:4,Takushoku:2,Electoral:2,concerning:8,catering:21,Guenter:2,quailing:8,Pieter:2,Klees:2,rasps:4,Perlman:2,"clean-shaven":1,Workshop:11,"half-breed":22,lahk:127,Bales:2,Agins:2,stink:78,Ithacan:2,undemocratic:1,Matsuura:2,sting:25,"money-minded":1,brake:25,Lenny:2,Insecures:28,Shields:2,Missions:2,wooing:55,"MiG-29":2,Dolce:2,Shlaes:2,veining:21,Parrino:2,"sometimes-exhausting":1,Placid:2,Burmans:28,avoids:20,"summer-long":1,pastels:4,"foot-high":1,outperformed:32,"fastest-growing":608,Skokie:2,insulating:5,alkylbenzenesulfonates:4,counterbidders:4,Distillers:41,operands:4,immaterial:1,Physically:6,Monitors:2,Tribuna:2,haircuts:4,discreet:1,Tribune:2,impertinent:1,"buy-out":22,messieurs:64,querulously:6,sticking:267,unities:4,Mubarak:2,Conclusions:4,Zeron:2,dignify:39,supervisory:1,goggles:4,Zeros:4,physiochemical:1,"still-continuing":1,Pittman:2,"Ballantine\\/Del":2,Wesco:2,Gay:40,Trident:2,Gas:11,fared:32,"six-game":1,Gal:2,surtaxes:4,CASTLE:2,photographed:54,maye:190,maya:64,"required.":17,"lead-zinc":1,injuring:8,commandments:4,draftsmen:4,seductive:1,flavoring:21,texts:4,bucolic:1,"Ga.":2,"pains-taking":1,invaluable:1,"one-step":1,nude:3,"force-fear":1,"profit-seeking":1,Skinnerish:1,lineages:4,Unwholesome:1,Distilled:2,"shipboard-weapons":4,overdriving:8,"rhubarb-like":1,"global-warming":1,"WCRS-Eurocom":40,Stoll:2,antirealistic:1,Lankford:2,outlays:4,"U.N.F.P./NNP.":1,Farrells:28,Property:11,"hydra-headed":1,banked:85,lightheaded:1,"Nazi-occupied":1,Mennonite:66,hostilities:4,"multi-valve":1,constituting:8,speedier:335,croak:78,"SP1-plus":1,Siciliana:2,Hoijer:2,squander:39,Faulding:2,deal:44,"Kellogg-Briand":2,slowdowns:4,editions:4,Mechanized:14,"anti-convulsive":1,"recession-plagued":1,Sanyo:2,"super-majority":3,"shopping-mall":439,Holcomb:2,dead:609,Psychiatry:2,Bfree:2,Fenster:2,Bellamy:2,wellrun:1,shuttled:32,Czech:66,"Studio-City":2,Beadle:2,"pension-minded":1,foreknown:39,dovetails:20,"Xomen-E5":2,"back-up":22,cancers:4,fingering:55,"foreign-country":1,vacationers:4,fulfills:20,stronger:136,"public-audit":1,Broome:2,"stock-investing":1,"university-based":1,Bagcraft:2,revetments:4,spongy:1,dying:5,"historical-claims":4,Supermarket:47,Lurcat:2,orate:39,disbursesments:4,Eurodynamics:28,Windows:130,Bruwer:2,Nakayasu:2,WWRL:2,Estate:11,reasoning:21,Osis:2,Crescent:2,Encyclopedia:2,"statistics-keepers":4,EOG:2,Nadir:2,dance:44,Bushnell:2,desegregate:39,Aliksanian:2,fabricated:45,"No-Name":2,sponge:24,"automated-teller":3,Serve:39,Academics:4,infinitesimally:6,underworked:1,Present:610,volunteers:4,Acquisitions:57,brown:104,Lynnwood:2,Deerstalker:47,upriver:1,cochannel:3,emergencies:4,trouble:611,brows:4,Georgette:2,toxins:4,Cubans:111,Superlative:2,Hallbauer:2,Sincere:2,"wire-haired":1,WILL:190,Georgi:2,introjected:17,George:2,governing:5,"cease-and-desist":3,imprecisely:6,legalized:17,regret:256,"Equity-Income":2,"stop-work":1,regained:32,Entergy:2,DD:2,Akerfeldt:2,"Laverne\\":1,Slowly:6,Rick:2,Rich:40,Rice:11,Cahill:2,"spleen-crushing":1,Cushman:2,ComputerLand:2,Moravian:2,commensurate:1,unescorted:1,Spinoffs:4,peeled:54,Youngstown:2,Kozinski:2,"medico-military":22,Deak:2,Dean:2,Deal:11,cantonal:1,Deaf:66,Dead:303,Maynard:2,Sobey:2,"computer-related":1,SOCIAL:1,Dear:612,shootouts:4,"R/NNP.H.S.":2,"E-Systems":74,Lawmaking:1,idlings:4,"dewy-eyed":1,"C-5B":47,Evenings:6,embarrassing:13,GLS:2,"credit-rating":613,Adley:2,sighted:54,Fierce:1,"fourth-ranked":1,Adler:2,wept:32,Hahnemann:2,Latowski:2,Zebek:2,BOZELL:2,Westboro:2,slinky:1,Unflattering:1,"catastrophic-care":22,instructional:1,bemoaning:8,Wyvern:2,Compulsory:1,Down:614,bowled:17,Cherokees:28,Poems:28,Vietnamese:198,playbacks:4,sidemen:4,paused:32,refine:39,Brockville:2,Lipper:2,Walter:2,Sheindlin:2,fortunately:6,"non-business":1,Munich:2,Industrywide:97,gaping:30,superintend:39,cranky:1,ponies:4,southern:1,unobtrusive:1,jousting:8,nondurables:4,prowlers:4,castling:8,ponied:16,lifting:5,Parti:2,vomited:16,Stoics:4,surreys:4,wiggle:139,"Danish-American":2,Sithe:2,automatically:6,"individual-type":1,McKinney:2,typical:1,novelized:1,albicans:4,Unlisted:2,"nice-looking":1,MOTORS:74,genteel:1,"SKr1.5":4,tranche:80,subs:4,fumed:16,appearin:8,Delhi:2,wracking:8,titers:4,Dictaphone:11,according:8,dreadfully:6,showered:54,hackles:4,overreacted:17,Wasson:2,"first-families":4,scaling:55,"pain-bringing":1,Specially:6,"first-rate":1,contemptible:1,residentially:6,"hard-to-spot":1,Thursdays:28,Santo:2,lawmen:4,Bulseco:2,"Italian-American":1,Eliot:2,sugary:1,WFC:2,sugars:4,Peregrine:2,snapshots:4,ELWOOD:2,"one-quarter-cent":1,prosecutorial:1,Reflects:20,Freed:615,Rolfes:2,digressions:4,"non-thermal":1,Vulcan:2,Jartran:2,"airline-crash":1,happenings:4,Phyfe:2,communists:4,"high-performing":1,"photon-counting":1,virtuosi:4,"film-makers":4,virtuoso:3,lugging:8,RoadRailer:2,Vihon:2,Reprints:4,marine:22,McGroarty:2,Videos:28,Sherlund:2,fonder:12,Compensation:11,Ninth:40,stillbirths:4,disable:39,Freeport:2,Rumors:123,mayst:190,There:616,survivalists:4,angular:1,Hollings:2,impetuous:1,corinthian:1,Traynor:2,tusks:4,"free-lance":1,Hourly:1,Scholar:2,thieving:5,"least-cost":1,eliminates:20,acquirers:4,disabuse:39,unstinting:30,skimmers:4,Beverly:2,Flats:46,eliminated:54,handicaps:4,semantics:4,Nutley:2,hurl:42,accesses:4,Glassworks:2,"high-income":3,retracing:8,transcendant:1,accessed:17,starve:39,Gunter:2,premier:617,Kittredge:2,invalidated:54,"investment-grade":3,Pappy:2,"well-read":1,wallowed:32,recover:42,"intellectual-property":1,"infection-screening":1,online:1,motivated:45,accustoms:20,Borja:2,underserved:1,oppressive:1,"SS-25s":28,"T-bill":47,"anti-rightist":1,algebraic:1,Threlkeld:2,peaceful:1,unnavigable:1,"circuit-breaker":22,Fuck:39,"Dividend-related":1,"five-hour":1,intrusions:4,"Peterson-Kroll":2,slaves:4,Triborough:2,Telsmith:2,professional:3,restaging:8,Sidley:2,"Lawson-Walters":2,"state-sponsored":1,Advest:2,Political:66,"right-handed":1,Intercontinental:2,Reuters:113,Rolf:2,gratified:14,Drunkard:2,Roll:128,crashing:8,busily:6,handlebars:4,Ludcke:2,Kansas:2,overbilled:16,skits:4,"semi-controlled":1,"buy-sell":1,threefold:97,Kansan:2,"week-old":1,Wirthlin:2,"growth-minded":1,reauthorize:39,"mini-component":1,"building-society":1,"oil-covered":1,Sturbridge:2,differentiating:8,Ville:2,Villa:2,Champs:113,recharged:17,"true-false":1,Fiorina:2,Fiorini:2,pituitary:3,Santiveri:2,administratively:6,whisked:17,protestations:4,tranquil:1,namely:6,Janissaries:4,Millstein:2,OncoScint:2,explosive:3,reputed:14,LDC:2,hypocrisies:4,Breaks:2,Attempts:4,"preferred-share":3,LDS:2,LDP:2,"free-trade":3,"road-construction":3,"squeaky-clean":1,fascinates:20,notice:44,Johnson:2,prettiest:51,ACRES:2,"school-improvement":3,Kreuter:2,Arne:2,"African-safari":1,impromptu:3,"institutional-type":1,onetime:1,cleave:39,discernible:1,Metals:130,Stepson:2,Metall:2,Lehigh:2,customarily:6,"long-distance":3,"tax-anticipation":3,Death:47,"half-mincing":1,binuclear:1,UniFirst:2,wreaths:4,renewals:4,pimples:4,Alcott:2,resurging:8,Healthsource:2,skew:39,"government-run":1,Reddington:2,"dust-swirling":1,abating:8,upshots:4,subjecting:8,"drop-in":1,Bicyclists:28,external:1,Osborn:2,"single-cell":1,Kenneth:2,slogans:4,humans:4,Weevil:2,Ganes:2,handicapped:618,Coiffet:2,Kennett:2,"well-made":1,coolest:51,mandating:8,Spiro:2,ramp:25,Cleave:2,interviewers:4,laggard:3,habitants:4,absorbedthe:39,donating:8,Hismanal:2,stickers:4,northward:6,Aeronautical:2,NSM:2,NSA:2,NSC:2,"ex-House":1,"personally-owned":1,"dangerous...":102,gentlemen:4,officered:17,angered:81,Supposing:8,gorging:8,Pachelbel:2,investigated:54,prefuh:39,Homeroom:2,imprecations:4,"non-publishers":4,bumpin:8,Marsico:2,Defectors:4,investigates:20,Candle:2,Proprietorship:2,"hundred-leaf":1,Klawitter:2,Telecom:2,Tibet:2,Lerach:2,Philosophical:2,laboratories:4,Knickerbocker:2,"hit-making":1,"laboratory-services":176,heaps:4,knowledgeable:1,belittle:149,EXPRESSED:16,Indigenes:2,Reduction:11,madrigals:4,ribosomal:1,Spruill:2,terrains:4,Christ:395,answerable:1,staging:55,"newly-weds":4,"anti-LDP":1,senseless:1,refurbish:39,smugglers:4,supercomputers:4,"non-artistic":1,Palmdale:2,Nuremberg:2,"epoch-making":1,discontinue:39,early:619,Tour:11,communiques:4,throwed:16,endorses:20,"one-month":1,External:66,nubile:1,Contant:2,endorsed:54,ceremonial:1,"cause...":102,Valenti:2,"Houston-Galveston":2,abetted:54,Government:11,"capital-goods":4,Zehnder:2,Dewhurst:2,"asbestos-abatement":3,premonitory:1,Wake:216,"non-profit":1,Vaughn:2,Wako:2,Thiele:2,business:47,Duren:2,strained:85,"fast-cut":1,inherent:1,emasculate:39,MANUALS:4,gums:4,boldly:6,"parrot-like":1,Arhats:28,"bright-green":1,Stennett:2,"four-thirty":6,rediscovering:8,Ostrowsky:2,Pils:2,Maffei:2,platoons:4,resuscitate:39,your:620,"Mon-Khmer":2,Rotha:2,Rego:2,assumed:45,unmodified:1,Priam:2,drank:16,"low-cholesterol":1,Denials:4,"melon-like":1,assumes:20,Manufacturer:2,reassume:39,Experience:47,Kondo:2,McGregor:2,Johnston:2,Sports:41,happening:55,autobiographical:1,unrecognized:1,Stifel:2,Robinsonville:2,stapling:21,porcelains:4,Jefferson:11,"high-volume":1,Dietetic:2,Crisis:11,"design...":102,Condoms:4,bamboozled:17,scratching:55,scanned:32,Strike:260,"human-leukocyte-derived":1,Banjo:2,Karns:2,Lal:2,innings:19,unwelcome:1,Lao:40,hurtled:16,chandeliers:4,"on-time":1,Bertussi:2,Lab:11,Lac:2,valid:1,Lay:621,yow:300,Patten:2,Law:11,Lap:2,Las:2,Maack:2,Great:40,"two-digit":1,Foresman:2,Pickle:2,building:21,"La.":2,loutish:1,"Moscow-allied":1,marionettes:4,Shirwen:2,vines:4,"Croom-Helm":2,linens:4,signalling:8,Melvin:2,tractors:4,"seven-million-ton":1,jockeying:55,exhibitions:4,lopped:32,Thortec:2,"benefits-consulting":1,Movieline:2,"Inter-City":2,Bonhoeffer:2,disbelieves:20,blueberries:4,hable:1,Braud:2,Braun:2,expounded:32,stomping:55,Genson:2,spruced:17,cinematic:1,reneging:8,relieve:39,reusing:8,"futures-investment":1,PCST:2,Malott:2,balancing:21,firebreaks:4,Seasonal:66,Gwen:2,Geoffrion:2,Lully:2,"last-mentioned":1,GREAT:40,riverbanks:4,"saga-like":1,"Low-Income":2,Helliesen:2,"race-drivers":4,Intair:2,casual:97,snippets:4,Martinez:2,Jonesborough:2,consumers:4,Boorse:2,Motorists:4,emotions:4,Zamora:2,"cost-cutters":4,litters:4,unsharpened:17,"gift-products":4,Homerists:4,"Gov.":2,SAID:16,nonmembers:4,partaker:39,partakes:20,Mall:11,Spinrad:2,drawers:4,outsells:20,Glorioso:2,"B.J.":2,uniquely:6,biodegradable:1,Cartesian:1,Chargeurs:2,Iodinated:17,"four-month":1,cosmetic:3,malapropisms:4,globes:4,"Papua-New":2,Specimens:4,teach:42,Ehrhardt:2,"metal-forming":1,flaws:4,Maser:2,"country-life":1,ShowBiz:2,TOOLWORKS:2,Yarchoan:2,"home-bound":1,countercultural:1,Birdie:2,Bless:59,stabilizing:8,"car-parking":1,Hedrick:2,Kozuo:2,Atkinson:2,People:622,CHIMPS:4,Doubtful:1,Guttman:2,"Pre-inaugural":1,Donnybrook:2,transcend:33,Amharas:28,Claeys:2,boycott:44,Vizcaya:2,climates:4,"less-expensive":200,"boat-building":1,unjacketed:1,Interstate:129,processors:4,"cafeteria-style":1,PGM:2,stayed:85,incisions:4,"non-convertible":1,Habomai:2,Reinsurance:11,wigs:4,deja:623,Impatiently:6,derived:54,triumphs:18,tries:72,Wollaeger:2,derives:20,Sensing:8,a:624,enzymes:4,Sweet:40,minicars:4,Kamens:2,bashing:450,Sween:2,grizzled:1,committes:4,Accomplishing:8,preponderating:1,chalked:54,"show-piece":1,"ex-chief":3,gainful:1,committed:625,crossborder:1,MIT:2,Wacklin:2,cardiovascular:1,discloses:20,tempering:8,Corroon:2,"IMF-guided":1,gosaimasu:64,brigands:4,overexcited:17,Strikes:4,actually:6,unheated:1,Weitz:2,Putting:8,disclosed:81,lira:19,Tamil:2,tenfold:218,"trail-worn":1,stiffen:39,Evolution:11,"seventy-foot":1,"pre-empted":54,"second-to-die":1,Worried:14,Victorian:66,abberations:4,forefingers:4,Worries:4,nothin:21,Cavour:2,BILLS:57,lightens:20,RANSOM:2,"Pro-Am":2,decimal:22,Episodes:4,Whitcomb:2,messed:32,"C.E.":2,Commentaries:28,Earnings:4,"international-capital":1,Hitachi:2,beyond:206,basements:4,Everett:2,meditating:8,Chatset:2,fielded:32,sustain:42,Diaper:11,sympathized:16,"R&M":2,Arnhem:2,upon:245,ponderous:1,nationally:6,Ignore:39,litigate:39,diffused:17,"retrial...":102,Takagi:2,terrible:1,terribly:6,expecting:8,businessmen:4,Darwinian:1,undergo:42,"skin-care":3,sacrifice:25,Frost:2,COURT:11,"welfare-state":1,"ever-growing":1,"re-moralizing":8,Billmeyer:2,Kakumaru:2,miss:95,"D*":2,"SO-CALLED":1,"inter-industry":1,inure:42,Sakellariadises:4,"tax-and-spend":1,interwoven:54,"monetary-stroke-military":1,pinned:54,Altman:2,Bumblebees:57,dealing:55,"realign...":102,Montmartre:2,bowed:112,Improved:14,"Check-List":2,"Times-Mirror":2,outgrown:17,Improves:20,monosyllables:4,inventing:8,Nellie:11,Croydon:2,Treadwell:2,Rosenfeld:2,Spaced:2,grocers:4,Jukes:2,Sextet:2,Spaces:28,intensities:4,"long-sought":1,leafing:8,Peach:2,Baar:2,alongside:206,SMYRNA:2,Elemental:1,emperors:4,Sykes:2,Bilbrey:2,"more-informed":1,Enholme:2,lie:95,Dingle:2,jour:64,Users:57,Ilkka:2,speculative:1,empowered:54,sordid:1,lit:626,Covas:2,lip:22,"glass-container":22,aggravating:30,Datacomputer:2,Kenan:2,"eight-partner":1,"Baa1":1,"Baa2":1,"Baa3":1,Sharpshooter:2,"supply-driven":1,sponsored:54,diametrically:6,Massimo:2,Roomberg:2,Massimi:2,Rhys:2,"anti-switching":1,clear:627,broadened:54,Baskets:4,CHANGES:4,clean:274,pickiest:51,Braden:2,nondoctrinaire:1,lest:127,hyper:1,Junid:2,hyped:250,"Ten-thousand-dollar":1,backdated:16,Savaiko:2,"basic-cable":1,"Loan-loss":1,"mid-1948":1,Chelmsford:2,surveyed:54,circle:25,Grow:59,Nederlandsche:2,"far-lower":12,"take-away":1,reinvesting:8,Medicare:2,interminable:1,exhibiting:8,querying:8,Tramp:2,Randol:2,ohmic:1,Warmongering:8,"suspender-clad":1,"end-of-the-quarter":1,"new-business":22,"mega-mergers":4,filled:81,DOCTORS:4,Winiarski:2,redefine:39,Wealth:2,Pluses:4,bakes:20,Cotillion:2,Isfahan:2,"ready-to-wear":1,photo:22,Morrison:2,"triple-A-rated":7,Norddeutsche:2,circumscriptions:4,Adoptions:4,timeworn:1,Costco:2,Southampton:2,Lyttleton:2,Leopoldville:11,"plutonium-recovery":1,invisibles:4,timidly:6,propulsive:1,craters:4,"WINSTON-SALEM":2,McGillicuddy:2,"next-generation":22,Biodegradable:1,rasped:16,mega:1,Curran:2,gaunt:1,"campaign-finance":1,sensitive:3,phonies:4,Provincie:2,headed:54,him:53,Panama:2,manners:4,Anhwei:2,Broker:11,Vicksburg:2,"Mt.":2,REMIC:2,Dotzler:2,Cabin:2,Deemed:17,Solel:2,arrest:24,Trigg:2,"off-budget":3,Dunlaevy:2,uncritically:6,reciprocate:39,coarse:1,"fiber-optic":1,Soler:2,Pilgrims:28,delights:72,compromises:18,Especially:6,Diocesan:1,compromised:54,wrings:20,"save-the-wildlife":1,hobnob:39,honest:1,yards:4,smolderingly:6,cannibalizing:8,Konitz:2,"once-sporadic":1,"pseudo-profundities":4,while:628,Valvoline:2,Anschluss:280,Allie:2,Hotels:41,uncompromising:1,nightingales:4,"well-played":1,deworm:39,tendered:81,"rubber-like":1,"first-place":1,streaking:8,"cedar-roofed":1,RCA:11,"marble-columned":1,baseline:22,Kellaway:2,"brutal-and":629,overdoses:4,Unum:2,reselling:8,Beazer:2,Declining:30,"Mr.":11,boo:39,stashed:54,"stereo-sound":1,"J.C.":2,revitalization:22,Shane:2,"pre-1950s":1,"asset-liability":3,Matos:2,Agin:2,haul:25,Agip:2,appalled:14,scouring:55,coup:80,lobsters:4,Hemmed:17,ignoble:1,Hemmer:2,"cent-a-bushel":1,restlessly:6,planetoids:4,OAS:2,Secretariate:2,Fulwood:2,"cross-currents":4,Shansi:2,conjured:54,Predictably:150,Otsego:2,indigestible:1,Refsnes:2,Dever:2,"stock-market":22,Prevention:11,fractionated:54,harmonize:39,Devey:2,"single-issue":3,Zaffarano:2,"pre-empting":1,determinedly:6,Deparment:2,"short-changing":3,populous:1,Bittania:2,"four-stroke":1,CFTC:2,translates:20,Recoup:39,translated:54,Skadden:2,perked:32,Lumsden:2,mauve:1,Fears:18,Chubu:2,urgent:1,Breckenridge:2,Choose:39,Attendants:65,Sibra:2,Foreclosed:17,Cottle:2,eating:5,Kerstin:2,Bruises:4,jazzy:1,Pennzoil:2,Raccoon:2,Schang:2,subtract:42,paperwads:4,bureaus:19,Legalizing:8,blocs:4,samplers:4,hinge:63,sake:80,Yemeni:66,"I.E.P.":2,Redstone:11,block:205,"long-neck":1,SLHD:2,decertify:39,Cauffman:2,parables:4,"nine-page":1,wonderingly:6,Republics:111,douse:39,rivalries:4,hemming:8,Lerner:2,governs:20,"self-starters":4,Adrian:2,"AC&R\\/CCL":2,amateurish:1,Pallavicini:2,skulk:39,"Bar-Shavit":2,bewilders:20,Ahern:2,Perspective:2,buglike:1,Guerbet:2,corrective:1,elitist:1,iodotyrosines:4,gushy:1,Oakmont:2,spousal:1,Polar:2,Harding:2,nap:78,Designers:41,electrical:1,Werke:2,kills:72,Teach:33,nay:6,"out-smart":39,Alienated:2,reportedly:6,fewest:51,luminaries:4,resign:42,lunging:8,averting:8,rested:32,Scaring:8,"orange-flavored":1,Documentary:2,Yalies:4,cryptographic:1,Empresa:2,sputniks:4,Rilwanu:2,fragmentarily:6,bleached:7,Stubbs:2,tactile:1,hallways:4,Yes:630,ribbies:4,Sell:216,"left-leaning":1,"cabinet-level":1,Self:11,Rails:28,salaries:4,Selz:2,"sales-moving":1,Reenact:39,"cement-and-glass":1,Painful:1,outperforming:8,Gaynor:2,Sabine:2,Sabina:2,Quadra:2,"JVC\\/Victor":2,blobby:1,expelling:8,Perignon:2,wracked:54,pinnacles:4,Borromini:2,Manya:2,Titus:2,"Mrs.":2,Irimajiri:2,salaried:1,fictionalized:17,retold:16,Weisfield:2,exits:18,Veneto:2,Tombrello:2,defocusing:8,prosodic:1,Sentences:4,"Karcher-Everly":2,configurations:4,Conger:2,Orson:2,arbitragers:4,Reclamation:2,stoned:17,Erroll:2,Equipment:11,graying:55,Schleiermacher:2,ardent:1,ferreting:8,cheapening:8,evokes:20,Abner:2,dactyls:4,exacerbate:42,evoked:54,Dannehower:2,tournaments:4,Barlow:2,"apple-flavored":1,Created:17,"D.C.-based":1,Wheelock:2,prescribe:42,Creates:20,acoustics:4,likening:8,"super-string":1,Remingtons:28,"G.L.":2,Strother:2,"Long-lived":1,Hanch:2,morsels:4,veered:32,preferentially:6,Arabia:2,Arabic:40,Suncor:2,Rolexes:28,Legends:28,shake:182,OGDEN:2,Miyazaki:2,apprehensive:1,Construct:39,danged:17,"wrong-way":1,Lucian:2,Hare:2,comers:4,singing:5,Photographing:2,subsidizes:20,snoop:39,"current-coupon":1,"child-care":22,Bookin:2,hightailing:8,Dreyer:2,"debt-financing":1,subsidized:7,Varying:13,exhaustive:1,"placard-carrying":1,Memphis:113,pleated:1,biblical:1,becomes:20,lacerate:39,temblors:4,"spare-parts":176,blindsided:14,disrobe:39,becomed:17,sample:139,LIKE:127,corporates:4,sanctions:18,ride:182,Kuser:2,Video:11,Vote:25,Tift:2,painless:1,TOP:2,Balletto:2,Figlewski:2,Dunham:2,"Pro-rated":1,Kentfield:2,"college-completion":1,Compassion:2,vesicular:1,Thoreau:2,"one-party":1,Bowater:11,"prime-time":3,Sikkim:2,cottages:4,Alexis:2,insufficient:1,Alexia:2,"X-ray-proof":1,Planar:2,crazes:4,Brocklin:2,Cayne:2,crazee:1,crazed:249,revise:39,rove:39,craggy:1,"round-the-clock":1,unlawful:1,superimposing:8,Iturup:2,"big-bucks":1,"October-March":2,facilitated:17,advertorial:1,"Dallas-based":1,Buksbaum:2,Seger:2,mentioned:54,converting:8,facilitates:20,helicopters:4,"Air-to-ground":1,stuggles:20,Toynbee:2,Croasdale:2,"two-wheel":1,Beginners:4,Jennie:2,excoriating:8,Arbel:2,Hammerton:2,sweets:4,fallible:1,Zeiss:2,Jenning:2,masters:4,swamping:8,consensual:1,Puny:1,registrations:4,Shipbuilding:11,Nordson:2,"turn-of-the-century":1,"blue-sky":1,junkets:4,unsurprised:1,Fifties:28,measure:24,"twenty-first":1,Smyth:2,gallant:1,"entry-price":1,Blakey:2,Xoma:2,"sub-segments":4,ASME:2,thriving:30,Zuratas:2,consigns:20,statist:1,dissented:32,"A.J.C.":2,intruded:54,"high-performance":3,wines:4,Spinco:2,Draw:216,interplanetary:1,caregivers:4,Afghanistan:2,attending:8,intrudes:20,Eisenberg:2,Khaju:2,PHP:2,Bestimmung:64,pilfering:8,pedimented:17,Comin:8,Seiki:2,Comic:2,Seiko:2,indisposed:1,"self-judging":1,rectifying:8,"four-hour":1,Hart:2,signify:39,"Neo-Jazz":2,"Perot-EDS":1,Animated:1,"jump-start":39,bears:72,squinting:8,durable:1,adopted:45,Gaafer:2,final:1,Valu:2,exactly:6,Alumni:28,Boogaard:2,Rivlin:2,frowningly:6,swindled:54,Norodom:2,photogenic:1,Meese:2,Formby:2,"rough-and-ready-sounding":1,cravings:4,"go-it-alone":1,Anta:2,berths:4,"re-entered":16,Span:47,thwarted:54,Spam:2,tabs:4,"three-sentence":1,Sock:39,"market-making":22,Writers:130,Spar:2,dromozootic:1,"Dream-Next":2,"doubleA-2":1,sings:20,Starzl:2,"union-owned":1,able:1,ably:6,pronouncing:13,unsmiling:1,Graphics:130,seasonings:4,Appleton:2,medals:4,Delmore:2,dubs:20,Coopers:74,overlapping:5,"lay-up":1,Ultimately:6,prickly:97,forlorn:1,Kwaishinsha:2,emerging:8,indoor:1,"thirteen-year-old":1,Leesona:2,Pedroli:2,molest:39,allaying:8,ostinatos:4,Tegucigalpa:2,Ilford:2,untimely:1,earned:85,Floodlights:2,grata:64,employes:18,employed:54,dodge:256,Yard:2,"up-pp":484,overall:34,NAIR:2,Schell:2,"once-sacred":1,leases:18,Italian:66,Levert:2,footlights:4,prossed:64,Vigdor:2,contain:42,proponents:4,"brand-loyal":1,NEA:2,orphan:3,Reub:2,"under-50s":4,Salvagni:2,anastomoses:18,Gaining:229,statu:64,stats:4,unilateralists:4,"hit-and-run":1,state:139,surmises:4,Gaillard:2,ciliated:17,"anti-inflationary":1,insomma:64,setbacks:4,boatels:4,sorely:6,Assemblywoman:2,Colonna:2,"C.C.B":2,Nekoosa:11,"semi-annual":1,reallocated:17,gynecological:1,Aegean:2,retrievable:1,pileups:4,Pestered:17,"once-stodgy":1,roil:39,manifestations:4,Tsou:2,"semi-abstract":1,flocking:8,"Over-achievers":4,"passers-by":4,harmonic:1,amounted:32,waved:32,"rat-a-tat-tatty":1,tread:63,Relax:39,"revenue-generating":1,Zuni:2,Tonawanda:2,Elvekrog:2,senses:18,adjourns:20,"nine-bedroom":1,Chandra:2,Regie:2,pharmacuetical:1,piqued:17,kava:64,"doctor-patient":1,Olszewskiof:2,Early:510,reapportioned:17,CELEBRATIONS:2,"Ter-Stepanova":2,"free-market-oriented":1,"W.R.":2,Saveth:2,blasphemous:1,balloon:24,begat:16,sideboards:4,rattled:81,eclectic:3,tapped:32,Apolo:2,Mirante:2,Coastal:40,reactionary:3,effect:139,trembles:20,Kurds:28,discouraged:45,supernatant:1,intercede:39,"cent-per-barrel":1,universalize:33,"no-nonsense":1,steoreotyped:1,Have:631,draconian:1,BE:39,BG:11,"working-day":1,BA:2,Tecumseh:2,"ocean-going":1,Nickerson:2,BK:2,BT:2,BV:2,marauding:8,Collections:4,Germanized:17,Reinker:2,purified:17,sputtering:1,Be:216,Bo:2,logged:54,Kandu:2,luncheons:4,By:632,Bershad:2,ample:1,Lackey:2,devised:54,burden:44,"side-looking":1,Mottus:2,devises:20,PhacoFlex:2,"strategic-arms":135,glazing:8,England:2,"B.":633,"al-Faisal":2,"B2":22,setups:4,"less-rigorous":12,"ill-understood":1,glycosides:4,shed:373,Bombieri:2,repositories:4,belonged:32,grizzlies:4,sleighs:4,"non-newtonian":1,redress:63,midwestern:1,MacFarlanes:2,Draper:2,Landonne:2,"Detroit-to-Tokyo":1,Overfunding:8,Voell:2,"heir-apparent":3,Gaylor:2,commawnded:16,"co-produced":112,Crosse:2,prohibited:54,chancy:1,torsos:4,Ukropina:2,crystallizing:8,Jugend:2,Secord:2,"co-authors":20,staked:54,Tadeusz:2,delicacies:4,toppings:4,Novosibirsk:2,"semi-inflated":1,arrogantly:6,Flesher:2,Bonomo:2,stakes:18,primal:1,Seydoux:2,Jacquette:2,bridging:30,due:634,"infer...":102,"Netherlands-based":1,endeavours:4,utility:22,sopranos:4,Generic:2,Vegas:2,"new-job":1,divulging:8,Arrange:39,Successive:1,evacuate:39,uncurled:16,Teschner:2,Cinnamon:2,Highland:2,Sicilian:66,Kamloops:2,cells:4,hosting:8,Michaelson:2,cruel:1,Sponsor:2,steepest:51,"good-driver":1,Probes:28,"broader-based":200,slugfest:318,Centocor:2,devise:42,"Pfc.":2,"Left-stream":1,magnates:4,resented:32,Proleukin:2,ideational:1,Willens:2,Mining:11,scowls:20,hazelnuts:4,foreseeing:8,palletized:17,paratroopers:4,"policy-making":261,misconceptions:4,Depicting:8,Like:206,ecstatic:3,Ken:2,"charge-offs":4,refreshments:4,Mathews:2,"owner-bred":1,Neglect:174,"So-Ho":2,using:8,Discover:2,Melcher:2,"ill-gotten":1,"theory-teaching":8,secondly:6,Appear:33,Improvement:11,Bolet:2,nigh:6,scheming:13,colloquies:4,captain:78,minuscule:1,"clearing-firm":1,offenses:4,Eizenstat:2,presente:1,sweetest:51,bimbos:4,presents:72,nominal:3,trousers:4,"slow-moving":1,saves:20,cruising:55,Cabletron:2,connects:20,compacts:4,Django:2,"vice-regent":1,Becht:2,ADOPTED:16,Farge:2,"EG&G":11,courageous:1,Physiologically:6,Littleton:2,laurels:4,"coin-operated":1,Golar:2,"nerve-cell":1,Somoza:2,Frisch:2,warns:20,pyramid:25,shoveled:32,helluva:1,qualitatively:6,even:635,betraying:8,saved:54,malleable:1,Traub:2,untenanted:1,maverick:22,Fardulli:2,plunked:16,anteaters:4,Sometimes:6,Pesqueira:2,Flip:2,Systran:2,Wonda:11,"cross-blending":1,Labaton:2,"by-roads":4,Smokies:28,Haig:2,jams:4,Carmelite:1,Hail:2,expedited:45,ornamental:1,superstitious:1,permit:95,aikido:64,fathered:16,"high-wire":1,"shrubbery-lined":1,"pray-for-growth-later":1,Fargo:2,"business-interruption":1,"Senate-backed":1,schooling:21,"cost-control":1,Giffen:2,Eggers:2,circumvent:39,overhear:39,overheat:39,"Computer-generated":1,Mankowski:2,barks:20,Overvalued:1,overhead:34,calm:104,"name-drops":20,"prior-year":1,"self-regulatory":1,twirled:1,Prentiss:2,Miniver:2,Cliburn:2,Existentialists:4,composite:3,Ravenspurn:2,"week-long":1,spiraled:16,plaintive:1,"reality-based":1,Lauchli:2,gossiping:8,Advertisers:56,audiophiles:4,"Drexel-managed":1,laughs:72,honed:14,involve:42,Relatives:4,"French-Canadian":2,Waldensian:1,savers:4,Biofeedback:2,funky:1,Veblen:2,salivate:39,bathrobes:4,quok:64,cavernous:1,Nineveh:2,Starbird:2,"high-loss":1,"two-syllable":1,Budweisers:4,Dyncorp:2,purchase:44,All:636,parading:8,Civic:40,Civil:40,"stand-alone":1,Telerate:11,assuredly:6,"bout-de-souffle":64,"square-mile":1,waited:32,uninsured:1,Alt:2,operations:4,unfolds:20,deck:25,"steel-making":1,idiotypes:4,Humphreys:2,Opportunities:56,eyewear:3,unmalicious:1,fortify:39,"down.":484,responsive:1,"high-paid":1,Ventres:2,Virgilio:2,"just-say-no":1,",":637,blackened:14,Beck:2,Cutting:210,carve:42,"Mexican-food":1,imperturbable:1,repairmen:4,donors:4,"sermons\\/From":1,Ruckert:2,downs:4,nightclubs:4,BALANCES:4,Steps:638,WOODSTOCK:2,rhapsodize:33,musically:6,leaner:136,doubtingly:6,mistrust:25,Goebel:2,"Stop-close-only":1,victories:4,sullying:8,inserts:4,"pay-per-view":1,clarets:4,ministering:8,Factor:11,optimistically:6,extract:182,"safe-sounding":1,scoreless:1,airmailed:16,Piddington:2,hushed:1,Weisman:2,Njust:2,advancers:4,Pier:2,assaults:4,voltages:4,pityingly:6,Jalaalwalikraam:2,LeMay:2,Nixon:2,rinds:4,saggy:1,shaggy:1,Gulliver:2,starts:639,cackled:16,Noblesville:2,Panda:11,deems:20,Computation:2,Mirror:2,"junk-holders":4,Cod:2,Swahili:2,Yoneda:2,Besset:2,McGrevin:2,Wootton:2,Grigory:2,Borrowing:8,disappearing:8,Sattig:2,snubbing:55,Halls:2,Grigori:2,MUTUAL:1,Wanna:188,recruiting:55,kolkhozes:4,"union-represented":1,zeros:4,"industrial-services":1,"sometimes-tawdry":1,curtails:20,Petrobras:2,BBN:2,malls:4,BBC:2,BBB:2,"ten-by-ten-mile":1,Telos:113,Troop:2,Waterhouse:2,peculiar:3,congratulatory:1,Canberra:2,"Soviet-finished":1,"full-service":1,purifiers:4,"untrue...":102,"on-the-go":1,Rudder:2,Downey:2,"hitting-pitching":1,Kloeckner:2,churn:42,Grooms:2,Norwest:2,Dismantle:39,"much-criticized":1,Tripod:2,Pianists:4,"light-truck":3,streaked:32,hoods:4,"automotive-parts":1,"waist-length":1,Hixson:2,bye:39,Pennell:2,Cannell:2,Traviata:2,"eight-thirty":1,"three-inch":1,Rosemary:2,unknowingly:6,offersey:4,Hillcrest:2,Skandia:2,Commercants:2,clocked:17,reprinted:54,fungal:1,Alper:2,retire:42,"tradition-bound":1,"top-priority":1,deftly:6,treaties:4,upfield:6,discourteous:1,stepping:30,Dalrymple:2,Beigel:2,marvelously:6,"Bake-off":2,Roadway:2,Gioconda:2,cripple:182,AWE:2,hoard:44,pigeons:4,AWA:2,colorful:1,Days:46,Sifton:2,"bric-a-brac":19,Nodding:8,yachtels:4,"home-improvement":22,"built-from-kit":1,UNIFIED:1,bat:25,bar:44,Segall:2,Remphan:2,"high-yield":3,illegitimate:1,bag:25,Yoshi:2,"seat-for-the-secretary":1,puffers:4,Dargene:2,bam:106,"Old-timers":4,Corinthian:66,"open-top":1,unworthy:3,Heusen:2,emergent:1,Sydney:11,Sleeper:2,spattered:17,mournfully:6,prototypical:1,fastballs:4,inappropriate:1,Choice:47,Mezzogiorno:2,"longed-for":1,disprove:39,Evaluations:4,Argent:2,lethargic:1,"Massey-Ferguson":2,stiffening:22,"G-R-H":2,wrapping:55,Rudyard:2,vacuuming:55,Schall:2,"stout-hearted":1,Yours:53,"House-floor":1,bronzed:1,Gunnar:2,restarting:8,monopolize:39,bronzes:4,Given:17,motioning:8,exemplary:1,Fullerton:2,Investcorp:2,modems:4,inquisitive:1,Withuhn:2,Forest:11,Dating:2,"hoi-polloi":64,Avco:2,"co-workers":4,commonplaces:4,Earle:2,Gladys:2,Utley:2,Earls:2,Spillane:2,Citicorp:640,threw:16,Divisions:4,Morningstar:2,Bertram:2,Farberware:2,Meehan:2,ADIA:2,Utt:2,Aggrieved:1,Edmar:2,Winawer:2,sly:1,remakes:4,originate:42,suppose:149,murders:18,Hovercraft:2,"well-balanced":1,paradises:4,sushi:80,Conceptions:4,Caltech:2,homozygous:1,redecorated:17,expirations:4,vindicate:39,Fiesta:2,LaMothe:2,who:641,Seagate:2,Scholastic:2,potentially:6,miswritten:1,Eisenhower:141,transvestites:4,"beef-import":1,governors:4,Raos:2,pharmacological:1,Miltonic:1,"plastic-pipe":1,bailed:32,RLLY:2,lightheartedly:6,stimuli:4,Shantytowns:4,smokes:20,Rauscher:2,qualities:4,claims:18,smoked:85,unfair:1,stimulations:4,Clorox:2,"Campeau-related":1,Wildman:2,"steel-reinforced":1,wafers:4,Bellinger:2,infinitely:6,agile:1,nonchlorinated:1,Begging:8,youngsters:4,servicemen:4,"co-payments":4,"tax-collecting":1,"cost-of-living":3,"Playboy-Show-Biz":2,"solar-power":1,interior:3,whichever:447,natal:1,Richco:11,"counter-moves":4,Kamin:2,Gersony:2,fined:54,Casualties:4,manual:3,autocracies:4,Giguiere:2,Provost:2,Lingus:2,Weitzen:2,CTA:2,sparred:16,Hajak:2,romantically:6,Hilary:2,Weapons:74,revel:182,readmitted:17,Yankus:2,Infrared:1,Onlookers:4,dense:1,"vaccine-vendor":1,Hiring:8,unnameable:1,outspoken:1,"Soviet-bloc":1,orbited:16,tycoons:4,loudspeakers:4,"grit-impregnated":1,translators:4,novelties:4,blackmail:25,Forand:2,squeamish:1,sift:42,McDonalds:2,super:642,Heatherington:2,impersonates:20,Retired:71,commie:1,alignments:4,Abstract:129,beta:22,Hearing:116,Filofaxes:28,impersonated:17,Cameron:2,commit:347,Lovers:111,sheets:4,parsing:55,canny:1,Vault:2,cascades:20,"Tee-wah":2,Stay:216,"fifty-dollar":1,"non-auto":1,Nutrition:2,Bostian:2,Cultor:2,effaces:20,amazingly:6,Castros:28,Mocking:2,"anti-freeze":3,Sutermeister:2,mortgagebacked:1,"S.D":2,faring:8,DNA:11,"S.C":2,offering:21,forks:4,Dade:2,ulcers:4,Dada:2,"I.C.H.":11,Z:11,atrocities:4,Dads:2,builds:20,emboldened:54,staged:32,"Anti-Ballistic-Missile":1,AFTERSHOCKS:4,Privatize:39,Wister:2,Melrose:2,stages:18,diagnose:42,unenlightened:1,toss:182,dites:64,Gerber:2,megatons:4,floating:30,Mertle:2,Pirie:2,"wonder-working":1,generally:6,handed:32,Bodily:2,oppose:643,Advisor:2,tardy:1,"vitamin-and-iron":1,"ba-a-a":106,"futures-trading":1,"MacArthur-Helen":2,Tietmeyer:2,Arnold:2,insurrections:4,DeBeauvoir:2,stoke:39,pizzas:4,Institutue:2,"plus-one":97,Constant:3,luckier:12,"more-favored":1,TROs:4,parcels:4,"Anglo-French":66,themed:17,themes:4,yapping:8,Louisiane:2,parasympathetic:1,Milbank:2,Louisiana:2,Czar:2,"semiconductor-depreciation":1,hidebound:1,praises:72,Philharmonic:11,polyunsaturated:1,scribble:39,bordered:17,finally:6,praised:85,Kerschner:2,Barry:2,DEPARTMENT:2,"Temple-Inland":2,daintily:6,Nomura:11,Saouma:2,Bruser:2,FIT:2,Ironpants:2,bogeyed:16,sappy:1,FIG:2,uneventful:1,suppressors:4,Playskool:2,Affirmed:2,wore:16,dim:1,Statements:4,did:16,die:644,dig:645,specials:4,moistening:8,dip:24,"drug-pushing":1,Stoeckel:2,eclipse:182,Lawsuits:646,"seven-inch":1,"debt-futures":4,Buffton:2,bacterial:1,Weyerhaeuser:141,"pen-and-ink":1,Donofrio:2,"high-tailed":16,"Liberal-Radical":2,takin:8,vandalized:32,"well-fed":1,incidents:4,dishonestly:6,proclaiming:8,extemporize:39,wail:25,involuntarily:6,Freeberg:2,Rabat:2,monied:1,signalizes:20,Stalin:2,decipher:39,monies:4,Indosuez:2,"leather-men":4,badgered:16,institute:25,Tellier:2,dominantly:6,thrashed:32,convoys:4,CLOROX:2,finer:12,"Luxembourg-based":1,"all-out":1,hither:6,Buren:2,careworn:1,Marcius:2,Purchasing:321,Donato:2,subverted:17,"spring-early":1,Farming:8,Ratto:2,ungainly:1,"five-years":4,sharper:136,"commutator-like":1,Lunch:47,touched:32,Awards:2,flaunting:8,"craftsman-in-residence":1,sharpen:39,unconfirmed:1,cited:32,Freres:2,Parsippany:2,"fast-moving":66,ageless:1,Blackstock:2,downtown:168,downing:8,"fund-selling":1,reinvestigating:8,Duke:2,Nordyke:2,noninterest:1,avoiding:8,Pacific:40,soup:25,sour:647,Cathcart:2,Ailing:8,arrive:42,"small-time":1,predict:149,Digital:129,Backhaus:2,Westmore:2,shorting:55,Biedermann:2,Heylin:2,"hand-me-down":1,yokels:4,harking:8,"self-perpetuating":1,get:42,"kraft-pulp":1,Bleckley:2,Eppel:2,strikingly:6,appraisingly:6,nighters:4,"government-assisted":1,SOFT:1,Muldoon:2,rivaled:16,inputs:4,"sheet-rolling":8,critics:4,Performing:8,"Tri-Star":2,vivacious:1,Benedetti:2,Benedetto:2,pressuring:8,weeding:8,isothermally:6,Ede:2,borrowing:648,avant:64,Leslie:2,Edw:2,"flat-out":97,halos:4,Euclid:2,unconsciously:6,Litta:2,straightening:55,gradual:97,argues:20,"male-dominated":1,Morgart:2,argued:32,uninominal:1,"single-level":1,"trend-following":3,thank:42,mais:64,"prisoner-made":1,Moniuszko:2,Cluett:2,Kamm:2,coaching:21,Kamp:2,Esopus:2,mail:44,main:3,"Nouvelle-Heloise":2,Hodgson:2,truest:51,machikin:64,views:18,impulses:4,"society-measured":17,"Huntley-Brinkley":2,"cooling-heating":1,Closing:21,Marconi:2,possess:149,outweigh:149,battlefields:4,directories:4,proteins:18,"yet-unnamed":1,Anheuser:2,olim:64,pharmacies:4,redraw:39,Energies:74,Dinerstein:2,abnormal:1,inhomogeneous:1,gird:39,sifted:32,giveth:358,living:5,VICTIMS:4,"mid-1940s":4,Pederson:2,lak:127,tidbits:4,"Tokyo-based":66,Theater:11,pumping:8,spies:18,BONUSES:4,miscreants:4,fuller:12,spied:32,"spend-now":1,Sigma:2,Options:41,"weather-resistant":1,boastfully:6,pepperoni:4,desultory:1,Chemische:2,substrates:4,"p.m.-midnight":11,Viyella:2,"trading-account":1,Probable:66,discharges:18,Sayegh:2,"all-America":1,unthreatening:1,Probably:150,Pirate:2,discharged:54,thoughtless:1,lap:78,slept:32,seas:4,CalTech:2,Carlos:2,daunt:39,Janney:2,Bundy:2,Thurman:2,Bhojani:2,"inflation-free":1,Subscribers:4,FRE:2,TUMBLE:1,Servifilm:2,neutralists:4,blacklist:39,Loughlin:2,Miles:2,Eslinger:2,emigrating:8,"bio-analytical":1,lugs:4,"live-hauled":16,dissenters:4,Braeuer:2,Canyon:2,protected:81,fluoresces:20,Walsifer:2,DO:39,Urbanski:2,DJ:2,"anti-prostitution":1,mundane:1,DG:2,DE:2,Chace:2,winding:5,Regulation:47,"north-bound":1,DX:2,voiced:85,DU:2,guidewheels:4,Do:317,"pre-assault":1,"jammed-together":1,Di:2,unheeding:8,insoluble:3,Rhett:2,answering:55,wetly:6,Da:2,Undaunted:1,Kokubu:2,callously:6,"current-generation":3,Du:2,Dr:2,Ds:4,channel:44,Legislature:11,subtilis:4,trace:70,permeates:20,Healthy:1,succumbed:54,Tanabe:2,Gaunt:1,Spirited:1,satisfying:13,Ferranti:113,"PRISON-SHOP":2,Panamanians:57,"D.":11,Frankie:2,surprising:13,"Ms.":2,Palmingiano:2,gracefully:6,Suffolk:2,Certs:2,matryoshka:64,reassessing:8,"non-patent":1,Ingo:2,sectorial:1,Province:2,BioVentures:2,"standard-setting":3,Biologique:2,Rozelle:2,Rozella:2,disconcerting:13,"M.Ed":2,Holliger:2,ranking:450,Kappa:2,muni:649,Menton:2,designated:45,uninvolved:1,Krane:2,relyriced:16,Mentor:2,distinctly:6,designates:20,Filipinos:65,beseech:33,Methods:57,keyboards:4,Helionetics:2,busiest:51,median:3,Shintoism:2,diversities:4,"M.E.":2,threading:8,stupid:1,"employer-offered":1,"home-and-home":1,Subgroups:4,"able-bodied":1,crushes:20,Storage:11,derailments:4,"anti-secrecy":1,Inventory:169,Montrachet:2,"Ky.-based":1,COMMUNISTS:4,gratifying:13,trijets:4,Jindo:2,Fascist:40,"wing-tip":1,forecast:181,Hours:4,Fascism:11,"international-payments":4,Selective:1,geometric:1,dried:45,"run-ups":4,Sans:87,Northrup:2,tacit:1,signaled:32,condensing:8,Unitarianism:2,Grounds:111,ternational:1,TriStar:2,remake:39,Michelson:2,contractually:6,stretches:18,SEATO:2,despaired:16,refocused:32,Poore:2,Calor:2,innovations:4,clambered:16,stretched:85,disliking:8,westwards:4,refocuses:358,laudable:1,anyplace:6,unusual:1,"Calif.":2,Ochsenschlager:2,mark:24,mart:11,Blasphemous:1,mars:20,Modeling:2,shopping:122,Reversing:8,SECOND:1,Jungle:2,Colcord:2,Yugoslavs:4,"bar-code":1,profiles:18,Yardumian:2,"McCann-Erikson":2,bemoaned:16,profiled:17,philosophies:4,Venice:2,"interest-bearing":1,Toshio:2,unpolitical:1,"Sung-Shan":2,rammed:16,Ostriches:4,"H.F.":2,"third-floor":1,"poll-takers":4,movements:4,bags:18,different:1,absences:4,harsh:1,doctor:25,Stieglitz:2,Asman:2,skiddy:1,"spot-market":1,Gethsemane:47,"smoke-stained":1,struggling:30,exhaling:8,transitions:4,exhaust:44,GANNETT:2,"third-party":1,Tallahatchie:2,Expo:11,scorned:54,Moulton:2,Apparel:47,lemon:22,DaPuzzo:2,suffuse:39,emigrated:32,"CCK-related":1,"third-ranking":1,"cardiac-drug":1,"self-consciously":218,"low-volume":1,Metrocorp:2,Columbiana:2,DONORS:4,Niggertown:2,"orchid-strewn":1,adulterated:14,Treasurers:57,Margaret:2,Steinhardt:2,Coin:2,Sperry:2,adverbial:1,Tackles:20,grandstanding:55,SHELTERS:4,disadvantageous:1,implicate:39,Friars:4,Moleculon:2,Troy:2,London:40,retailers:4,Rosabeth:2,Trop:2,amortizing:13,Enid:2,transmittable:1,Savoy:2,climactic:1,spans:72,Croma:2,galvanic:1,"trillion-dollar":1,Wachsman:2,"Cost-effective":1,"eighteenth-century":1,Swansea:2,"error-prone":1,"baseball-card":1,Atherton:2,livres:552,RESEARCH:2,critical:1,Canellos:2,claustrophobic:1,moderate:240,"Pan-American":1,measuring:650,forfeitures:4,"no-men":4,buckling:55,airways:4,nonoperating:5,shellshocked:14,strangles:20,"consumer-paint":1,"hara-kiri":64,Solved:16,despicable:1,recraft:39,Efforts:4,strangled:14,finicky:1,Stacey:2,tuning:55,conducting:55,"anti-business":1,Revenue:47,troupes:4,ARRESTED:16,"asset-sale":1,"non-banking":1,practical:3,Erotic:2,INVESTIGATION:2,Supportive:1,"program-selling":1,imitated:54,Heads:57,"straight-armed":16,Sunken:2,Magi:2,Fendrick:2,Wansley:2,Heady:40,Soothsayer:2,Newmark:2,exploiting:8,Countered:16,imitates:20,ISSUES:4,Harold:2,Rectifier:2,Harkinson:2,gravid:1,slurped:16,sipping:55,recognizably:6,decode:39,"greenhouse-gas":1,braiding:8,"moth-like":1,Whipsnade:2,bettering:8,deepened:32,Freud:242,chambered:17,Phosphate:2,Canterbury:2,shortterm:1,billowed:16,Fuentes:2,geriatric:1,evaporate:42,Delays:4,retrained:17,"fountain-falls":4,discs:4,Oriani:2,doctrinal:1,departs:20,Poeme:2,Grigorss:2,"executive-branch":3,"high-priority":1,overtime:168,"million-a-year":1,Keehn:2,syngeries:4,awkwardly:6,clamored:16,pitifully:6,"beer-guzzling":1,unload:42,Reasons:4,Colnaghi:2,Bochniarz:2,unsee:17,dramatic:1,weighty:1,drugging:8,spectral:1,upperclassmen:4,"drug-sales":4,Ramesh:2,Van:2,Winter:144,Val:2,Perle:2,"plain-clothesmen":4,"ever-narrowing":1,"million-dollar":1,Vax:2,undisrupted:1,children:4,Bechtel:2,Mecklenberg:2,Zapala:2,POPs:4,"Cookie-Crisp":2,wants:72,premium:651,distorting:8,straightforward:1,"Japanese-financed":1,Chartres:2,JIM:2,Microelectronics:111,"blood-chilling":1,aware:1,forwarders:4,subterranean:1,Messinesi:2,"fuel-services":4,veined:1,conjugating:8,dampen:39,unstilted:1,hym:53,Giubbonari:2,"six-foot-four":1,hys:404,Rink:2,nucleated:17,"LS400":11,Needs:4,Needy:113,"F.D.R.":2,"corrosion-resistant":1,"Hanover-Ceyway":2,Salzgitter:2,putting:8,Clearasil:2,dial:25,opted:32,WARNED:16,portions:4,ratchet:39,"White-shirted":1,selfeffacing:8,violently:6,cohorts:4,Amon:2,"morale-enhancing":1,ranged:32,promising:13,Cedergren:2,ranges:18,Arthur:11,disastrous:1,"H.M.S.S":2,Neuhaus:2,Analytical:40,Amor:64,sunning:8,Whole:1,Gachinger:2,publishes:20,"sub-zero":1,unconvinced:1,Kitamura:2,"hard-earned":1,stretching:55,scurry:24,published:81,Neglecting:8,skids:4,cystic:1,authorize:39,buses:4,clapping:55,Everlys:4,bused:17,"Bazy-Sire":2,memos:4,Core:40,phonemic:1,Gimenez:2,Corn:47,Multiflow:2,Cort:2,congratulated:54,Corp:2,Corr:2,Brunner:2,Petitions:4,obstinate:1,LTV:2,pads:4,Kennedy:2,sniffers:4,"thrift-like":1,leavened:112,Pantasote:2,LTD:2,"straight-haired":1,willfully:6,"alcohol-related":1,ladling:8,Aikman:2,sarcasms:4,sudden:1,discotheques:4,Kissick:2,Rezneck:2,lingered:32,Wallenstein:2,Argas:2,barbequed:1,deplores:20,Transcendentalism:2,Borge:2,"church-state":22,Abrahams:2,deplored:16,aphorisms:4,rededicating:8,subminimum:3,enforcers:4,"DRI\\/McGraw":2,Hordern:2,Mavis:2,"pay-down":1,Battat:2,CONTROL:2,lakes:4,Bombers:4,frilly:1,"long-view":1,inflationary:1,Effjohn:2,kegful:1,frills:4,savvier:12,bleak:3,"securities-based":1,Branum:2,Prater:2,eats:20,"Siemens-GEC-Plessey":2,"re-enacted":17,Lett:2,nonagricultural:1,Anouilh:2,sacadolares:64,egregiously:6,infant:22,formulations:4,rounded:81,Haislmaier:2,swamped:54,"half-crazy":1,oblique:1,rounder:12,lewdly:6,"rat-a-tat-tat":1,Extensive:1,Illusion:2,CSFB:2,manhunts:4,Vanous:2,Specialty:11,"Ciba-Geigy":2,Lederle:2,detected:54,Viscount:2,Zoning:2,fireproofing:21,"five-minute":1,scandalizing:1,redistribute:42,neophyte:3,Pavillion:2,grubby:1,sprang:16,FARGO:2,fuer:2,bestirred:17,Globo:2,exiles:4,Telli:2,Globe:2,holiest:51,Pollnow:2,Schoenholtz:2,exiled:45,"Association-College":2,Olenegorsk:2,"order-to-ship":1,Scalia:2,biscuits:4,"Euro-products":4,"once-unthinkable":1,mental:1,interweaving:8,house:24,chomping:8,"foreign-bank":1,countrymen:4,connect:42,ripple:652,backpacks:4,simplify:42,flower:78,Viktor:2,undervaluing:8,DeBat:2,"ex-National":1,acting:5,flowed:32,MacWeek:2,tiresome:1,Ramathan:2,Northwestern:2,squished:17,commits:20,geared:54,Paging:2,cuckoos:4,giveaway:22,"several-year":1,companion:22,superconductors:4,throwers:4,Helper:2,Basques:28,"cheap-wine":1,pilote:64,Helped:17,Kaiparowits:2,"much-heralded":1,"free-drink":1,Subscribing:8,pilots:4,"cash-management":1,INSURANCE:11,CompuChem:2,Montgoris:2,mistakenly:6,Brighetti:2,instances:4,Rancher:2,cups:4,"ivory-tower":3,Lanesville:2,killin:8,indulgent:1,smoother:653,COAST:2,Cheers:2,redistributing:8,reflexly:6,smoothed:32,mutterers:4,bumble:42,"pest-control":1,Language:47,favorably:6,acorns:4,"service-type":1,excels:20,sangiovanni:4,sizable:1,favorable:1,DIFFERENCE:2,"last-round":1,peaked:85,involvements:4,quickwitted:1,"d-Limited":2,Brambles:2,Objects:654,Pinky:2,biracial:1,contrary:3,treated:54,ambitiously:6,"pre-existing":1,"million-member":1,Swire:2,Pageant:11,Outlooks:4,cometary:1,unafraid:1,fading:5,built:81,Connall:2,Arab:40,boardinghouses:4,Walmart:2,Davao:2,Guildford:2,Aran:2,Meals:2,Aral:2,"hub-and-spoke":1,"HDTV-screen":1,Hawaii:113,HAS:20,misstating:8,Savings:46,Whelan:2,Manassas:2,"non-interventionist":1,financiers:4,Buckenham:2,"big-business":3,diphosphopyridine:1,Zemlinsky:2,"crisis-to-crisis":1,bustin:8,ATHLONE:2,"anti-submarine":1,pilferers:4,"anti-market":1,joining:55,weavers:4,Xia:2,particularly:6,disturbances:4,prepackaged:17,fins:4,hugging:55,Bridgers:2,Hilo:2,repels:20,fine:590,find:95,backtracking:21,Tucker:2,Tulsa:11,relent:149,dicate:33,frothier:68,marathons:4,Morgantown:2,Emigrant:2,Desperately:6,Apartheid:2,Stumbling:1,Verdes:2,Sukhoi:2,resolve:63,Cataracts:4,racially:6,Suddenly:6,coughs:4,"self-described":1,"Co.``":133,WNYW:2,instrumentals:4,forensic:1,"already-known":1,"ball-hawking":1,overeat:33,Impressive:1,"unit-labor":1,antihistorical:1,superseded:54,please:336,"fourth-period":1,smallest:51,"blood-sport":1,Egyptians:655,Charta:2,supersedes:20,King:11,Kind:47,vindicated:54,"home-team":1,responses:4,aircraft:19,encapsulate:39,"SELL-OFFS":4,breakups:4,Babatunde:2,"full-time":97,"assisted-living":1,brunches:4,powers:18,"pizzas-with-everything":4,gamblers:4,upgraded:45,complacently:6,ngandlu:64,scairt:17,prosecuting:537,asymptotically:6,Hoffer:2,Koehler:2,Stromeyer:2,"twenty-five-year-old":1,Denied:17,McKenna:2,"feeding-pain":1,raise:95,frets:20,Sprung:2,choruses:4,"un-aided":1,"anti-human":1,Planners:92,chorused:16,Margulies:2,"weapons-modernization":1,Liquid:129,Princeton:2,Months:4,mountaineers:4,Marsicano:2,Presenting:8,Drill:63,Newts:2,"one-reel":1,Conveniently:6,Donnelley:2,"post-secondary":1,"near-unanimous":1,Classic:129,solid:34,puissant:1,missteps:4,Eustis:2,Hulse:2,Toklas:2,Benelux:2,impracticable:1,Speedup:47,"arms-sales":1,Confirming:8,finalists:4,Instead:400,seduce:39,textile:22,"passenger-tire":1,Muscovites:57,keys:4,appreciably:6,flitting:8,"Bel-Air":2,"agreed-on":1,supersede:39,dystopian:1,forfeited:17,flags:18,Masur:2,DAYAC:2,"ill-fitting":1,dystopias:4,pfennig:80,alluring:1,Hoeve:2,"re-order":1,ludicrous:1,budgeteers:4,nowbankrupt:1,profoundly:6,"three-run":1,Carlsson:2,ad:80,"S.W.":2,solvable:1,overhanging:8,"drama-filled":1,Riemann:2,Lotos:2,Bickwit:2,MRCA:2,Cruel:1,Bachmann:2,Weslock:2,upgradings:4,unite:42,"fast-approaching":1,Samoa:2,cognitive:1,profferred:17,follows:20,miffed:45,Bradlee:2,Sunbelt:2,Bradley:11,ai:656,jolted:32,"metal-tasting":1,rheumatoid:1,"more-generic":1,unilateralist:1,Lidov:2,vicelike:1,"grass-roots":1,unpatronizing:8,strongest:51,cabinets:4,pronounced:45,Seoul:11,contacts:18,affects:72,Greve:2,Zhejiang:2,pronounces:20,mailers:4,"Hartley-Leonard":2,JUDICIAL:1,augmenting:8,YWCA:2,Medellin:2,Norbert:2,remembered:85,peculiarly:6,Infectious:1,Lazybones:113,David:74,restrictive:1,Norberg:2,hostages:4,Davis:2,Leucadia:2,Typically:6,tripping:8,Caraiba:2,piles:170,piled:112,"Grev.":2,crass:1,Precisely:6,tenants:4,waltz:25,al:504,aliens:4,invading:8,"semi-heights":4,afflict:39,denominationally:6,"professional\\/executive":1,Warwickshire:2,famines:4,Lehmans:28,errant:1,"well-bound":1,splenetic:1,Schieffelin:2,Saunder:2,cloud:44,"copy-cat":1,multilevel:1,hopes:72,Marriott:11,directed:45,Westerner:2,detachable:1,"error-free":1,Lewis:2,KQED:2,ropers:4,Mauldin:2,"hardest-hit":1,Narrowing:8,Panglossian:1,markdowns:4,Nye:2,Pathans:28,"gunmetal-gray":1,"self-tender":1,Hillel:2,"state-chartered":1,semiautomatic:1,MACMILLAN:2,teemed:16,Rhin:2,Hiller:2,dungarees:4,irreplaceable:1,ponying:8,Tanner:2,Babylonian:66,Recherche:2,Macel:2,"audio\\/visual":1,accidental:1,lend:42,Mullendore:2,Bodin:2,liners:4,polynomials:4,Depictions:4,Lujan:2,lent:32,genetics:4,hansom:1,desert:139,Liberating:8,boyfriends:4,"Macmillan\\":2,downcast:1,rotational:1,Paperhouse:2,Spectrum:2,loafed:16,failures:4,Interviu:2,restraining:5,Foresters:4,grays:4,SLIPS:20,Seeking:8,"stockholders...":102,enjoined:54,Kellogg:11,"habit-forming":1,Gerbrandt:2,redemptive:1,fatal:1,rejiggering:8,Pacitti:2,"rubber-necking":8,Constitutional:40,Walkin:2,ECONOMIC:1,"vehicle-making":1,contribs:4,"first-preferred":1,wires:4,Alisky:2,arrange:42,disappointingly:6,shock:25,Shayol:2,tenuously:6,Osake:2,Aqualon:2,rearing:55,Abelson:2,bleeding:55,Lone:2,Long:294,Despising:8,Streeter:2,Witnessing:8,"price-growth":1,retracting:8,Susitna:2,Kinsell:2,chicago:2,"single-store":1,"stockholder-owned":1,Pornographer:2,PRODUCTS:123,Goldstar:2,Datafleet:2,"double-A-plus":3,Dysan:2,bods:4,Cacophonist:2,frontiersmen:4,Bursts:20,remissions:4,extrema:4,bode:42,extreme:3,"inter-town":1,dastardly:1,"cash-deferred":1,crystallize:39,Deportees:4,Steichen:2,Valhalla:2,FORMER:1,Brothers:41,limp:3,sacrilegious:1,Nico:2,Industrie:2,FM:129,FN:2,Nice:301,Fu:11,Sirrine:2,Canepa:2,MDC:2,TEACHERS:113,harrowing:13,MDT:2,collonaded:17,Tortillas:28,"C.P.":2,"cost-efficient":1,"asset-quality":1,"lung-tissue":1,Kloske:2,Urben:2,commandeering:8,tearing:8,subscription:22,"Frequent-flier":1,Clov:2,Clow:2,UPHELD:17,indignities:4,Buckeye:2,"telephone-marketing":1,Whitehouse:2,"uh-uh":106,impeded:54,immoderate:1,Condos:4,Condor:2,IATA:2,Speeches:4,Orvis:2,boned:17,Orvil:2,employs:20,bones:4,patinas:4,"slow-growing":1,overtly:6,native:3,Kabel:2,"California-based":1,demonic:1,responsibilities:4,reeking:8,Ginner:2,Stafford:2,watery:1,Nissan:11,Malapi:2,forswore:16,Guards:28,SCORE:2,trapdoors:4,Icelandic:2,lines:18,Shamrock:2,linen:22,chief:3,Marshalls:2,Tahiti:2,chien:64,"stock-trading":22,Schenectady:2,furnish:42,unforethought:1,eerily:6,Minnesota:2,Cavazos:2,duffers:4,Takanashi:2,Csathy:2,"worse-than-expected":1,Herzenberg:2,gestational:1,industrious:1,Northerners:65,LaGuardia:2,taboos:4,"quill-pen":1,Ebbetts:2,stances:4,Catania:2,Achilles:2,Inspectorate:2,Terpers:28,noncommittal:1,lushes:4,"non-retail":1,Lorain:2,mention:182,cutting:9,Seasons:28,"Merritt-Chapman":2,inoculations:4,Roaming:8,"capital-gains":93,stunts:4,estranged:45,jiggling:8,identified:81,Toujours:64,Bancroft:2,"ABC-TV":2,disregard:25,identifies:20,uninteresting:1,Tetrameron:2,"three-room":1,tetrahalides:4,"black-white":1,sergeants:4,Dickens:2,"non-wireline":1,Wacoal:2,empires:4,Gloeilampenfabrieken:2,"short-dollar":3,Electress:2,Signature:2,trickier:12,Sombrotto:2,oriental:1,"four-week":1,lecture:24,thereupon:6,"capital-to-asset":22,Reliable:2,unluckily:6,"one-house":1,hazard:25,"non-virulent":1,"French-modeled":1,Divisional:2,"sun-tanned":1,Interim:1,barriers:4,"plant-and-equipment":1,Petrovich:2,south:277,predominate:33,Taming:8,franks:4,erroneous:1,instill:39,"Canadian-dollar":1,humblest:51,Phils:28,thirties:4,Laude:2,deafened:17,Eurocrooks:28,dehumidified:14,"Wilson-to-Jim":1,maidens:4,Adnan:2,chivying:8,agonies:4,Pueri:64,"Railroad-rate":1,"Madrid-based":1,Trinova:2,overpayments:4,Reserved:157,reaffirm:42,Rolland:2,Weisbord:2,Pullings:2,prune:25,hospices:4,"probe-based":1,"ninth-circuit":1,"much-talked-about":1,inversely:6,References:4,Merrell:2,Thiep:2,Kunkel:2,Thieu:2,finetuning:8,Par:2,Pas:64,Pat:2,"poverty-stricken":1,inundating:8,Pax:2,Pay:657,Paz:2,Plastow:2,curves:4,Pac:2,pitiable:1,dictate:42,curved:7,Pak:2,Pal:2,Pam:11,Pan:2,Pao:2,"Mac-Laren":2,"double-A\\/single-A-plus":1,"maggot-covered":1,rejects:72,fictive:1,Sposato:2,"Uh-uh":106,Distorts:2,nabbing:8,starches:4,Sesame:11,masts:4,preliminary:3,Rural:40,Stibel:2,starched:14,quilted:1,downbeat:3,Calloway:2,"Carnegie-Illinois":2,Inju:2,Wellsville:2,"road-building":3,"pork-barrelers":4,Bishop:2,"mortgage-based":1,nags:4,absorbing:30,"near-certain":1,Civilization:47,hemlocks:4,STREET:2,rebuke:63,afferent:1,heighborhoods:4,incorruptible:3,restyled:14,Teeter:2,excrutiatingly:6,overgrown:14,Manic:40,Mon:2,Mom:47,Manin:2,cockpits:4,Shepherds:28,beat:658,bear:182,yelps:4,Prices:123,bean:659,"pre-split":1,"bulk-chemical":660,Wessel:2,Technologies:74,annihilate:39,unauthorized:1,"ANIMAL-RIGHTS":4,Bright:40,Camden:2,tightening:5,stinkpotters:4,splendidly:6,Jerome:2,Letch:2,"mystery-story":1,amply:6,Jurors:113,exists:20,abstruse:1,"Soviet-style":1,medicinalis:64,Various:66,audits:19,maximums:4,"hottest-selling":51,"missile-range":1,Hunkerish:1,"forest-products":152,progress:25,contaminated:45,"Soviet-backed":1,minimills:4,Datastream:2,anonymously:6,Study:128,S:661,Moreno:2,Lorimar:2,Hawley:2,upcountry:1,tenebrous:1,antipodes:4,Kanebo:47,"under-serviced":1,"wholesale-store":1,fluoropolymers:4,"at-home":1,photographs:18,vent:25,Inlet:2,Solving:8,"legal-lending":1,Gershwins:2,Ormsby:2,OLE:2,copies:4,armadillos:4,Leinberger:2,neutralized:17,Brooklyn:11,stentorian:1,contemplative:1,copied:54,"tell-all":1,CFCs:56,Fairchild:2,censor:149,Zworykin:2,Boyce:2,ridden:17,nosedived:16,angles:4,Stratton:2,PRECIOUS:66,payrolls:4,Heading:8,blackouts:4,homer:25,homes:4,marches:18,microcircuits:4,homey:1,Yoneyama:2,"bond-trading":3,Mozambiquans:4,"Shin-Daiwa":2,Crooked:1,UTILITIES:2,decamped:16,Baskerville:2,"S.p.A.":2,Product:11,Garden:2,Christi:2,landmarks:4,impressionistic:1,Bedbugs:4,Cleanth:2,prognostications:4,Produce:39,Dismal:1,Pendant:2,Christy:2,Sunoco:2,neutralizes:20,twelfth:1,frivolous:1,Natwest:2,slickly:6,caters:20,novels:4,shames:4,hospitals:4,Chevaline:2,fucken:1,Yokel:2,scholars:4,shamed:17,"bi-monthly":1,insure:42,untouchable:1,"low-rate":1,"forty-fold":1,thought:662,"pre-trial":3,feudalistic:1,Bookings:4,Fairless:2,"good-quality":1,peacefully:6,barking:55,"red-tile":1,Harsco:2,Darth:2,profiteering:55,domestic:3,ETV:2,Osnos:2,CDL:2,conjugates:4,"network-wide":1,"world-ignoring":1,affections:4,"fast-shrinking":1,arbitraging:8,conjugated:14,"good-will":3,scrimp:39,Bushes:65,Sawyer:2,"pit-run":1,admonished:16,rumpled:1,oilworkers:4,Takuma:2,Watterson:2,"Employee-benefit":1,"now-discontinued":1,epoxy:1,Luxuries:2,awash:97,Documents:123,"nine-months":4,alive:97,unpredictably:6,Rosett:2,convey:42,convex:1,"resulted...":102,"dollar-profits":1,Coffee:11,Naclerio:2,bifurcated:1,marched:32,Tenderly:6,economical:1,Sanitary:2,MANUFACTURING:2,ironies:4,Coffey:2,Killeen:2,Schlossberg:2,"executive-legislative":1,buttoned:17,Howick:2,Brancato:2,preventative:1,noisy:1,Fyffes:2,December:2,"Vice-President":2,"over-allotment":3,Noticias:2,"work-a-day":1,engineless:1,"one-dimensional":1,discard:42,"J/NNP.I.":1,"Medicare-eligible":1,projectors:4,childrens:4,perspiring:1,chemists:4,guard:139,Twilight:2,"capital-reserve":1,"well-baby":1,Stadium:11,Scientists:123,Immunetech:2,micrograms:4,adolescent:22,Suzy:2,brides:4,Vanourek:2,impassively:6,stimulative:1,McFarland:2,Varmus:2,earsplitting:1,"self-righteous":1,"anti-French":1,Jeffersonians:28,Protracted:1,Syndic:2,artillerists:4,"cut-throat":1,plague:44,"commodities-related":1,strident:1,assets:4,THIDIU:2,"free-travel":1,Camelot:2,"French-born":1,Outwardly:6,aristocratically:6,Intervention:47,durn:1,supreme:22,pin:24,Rye:11,Ryc:2,"SS-24":2,"SS-25":2,Appellate:2,"SS-20":2,pip:175,"central-bank":22,pit:24,Wimbledon:2,rakish:1,claiming:8,"case-to-case":1,ellipses:4,motored:16,Jacksonville:2,"Ry.":2,ecological:1,"three-panel":1,"That-a-way":6,Stewart:2,Dragons:2,Private:66,Ritterman:2,"ironic...":102,vehement:1,"right-to-counsel":1,tanking:8,"enzyme-like":1,maquilas:4,bunkmates:4,"sun-baked":1,heliocentric:1,hating:8,"nuclear-propulsion":1,Earthquakes:4,patches:4,whereever:293,Buccaneers:4,bureaucrats:4,Oka:2,patched:14,"public-affairs":4,"already-developed":1,excused:54,dales:4,regrets:72,merchant:22,risk:24,"Angeles-area":1,oxaloacetic:1,nodules:4,"voice-over":1,Poquet:2,leggings:4,Lorillard:11,funneled:32,Antique:2,"market-by-market":1,"Harte-Hanks":2,Regiment:2,verie:6,flashy:1,shockproof:1,"hostile-bid":1,Elburn:2,"non-service-connected":1,surrounding:5,electricians:4,louder:299,Harlequins:28,Heraclitus:2,expressive:1,tethers:4,Revulsion:2,Carpenters:65,"engine...":102,bronchiolar:1,plodding:55,coasters:4,Strafaci:2,despoilers:4,Andress:2,mints:4,Plants:4,kicked:32,orgies:4,"law-making":4,Blasingame:2,"McCarran-Ferguson":2,Exportkredit:2,ramps:18,Scandinavian:40,socialize:39,"B.C":47,Utrecht:2,"non-taxable":1,overprotective:1,singled:32,"West-End":2,Pseudomonas:4,outpace:42,analysts:4,mistake:25,Bennis:2,hydrophobic:1,Petty:129,Tenn:2,"bad-expectations":1,perpetuated:17,Tend:149,Tens:4,perpetuates:20,Rundfunkchor:2,Cleveland:11,codewords:4,Engelhard:2,compositions:4,Everyman:2,preserved:81,Rheingold:2,Parisian:40,Olga:2,Bombus:2,bellringers:4,phony:3,phone:44,Rounding:8,"five-day":1,Eisenhhower:2,enjoying:8,"left-centerfield":1,"cleaner-burning":1,campers:4,Abalkin:2,Gottingen:2,daft:1,phrases:4,"Perth-based":1,"auto-loan":1,decorative:1,thankless:1,Ecolab:2,walkways:4,Jerry:2,Renoirs:28,"British-owned":1,guarantee:44,Fleckenstein:2,Giraud:2,Lortie:2,Miranda:2,"once-private":1,"SbCs-type":1,kebabs:4,pokes:20,Laurent:2,mouths:4,KRON:2,pokey:1,campgrounds:4,FORD:2,Emanuel:2,Seife:2,"still-uncalculated":1,Laurene:2,arthritic:1,Around:124,"Fig.":47,acknowledged:112,ultimately:6,unpunished:1,deepens:20,acknowledges:20,"standard-issue":1,executed:81,Salvadoran:66,Valdese:2,sprout:149,over:663,"off-the-record":1,pound:44,sickle:1,"net-benefit":1,sickly:1,obligational:1,executes:20,"Bible-emancipated":1,Tutunik:2,Mogg:2,outsized:1,"hands-off-all-sweets":4,flagrante:64,SAC:2,SAB:2,Barges:4,Cruelty:2,destroyed:45,Bargen:2,compensatory:1,Armenian:66,Tanaka:2,"once-unprofitable":1,adventurously:6,SAT:2,However:664,Midwesco:2,"Anglo-Argentine":2,payouts:4,"uranium-waste":1,Martinsville:2,Curtain:2,bouts:4,Annualized:14,merchandisers:4,Antithyroid:1,stinking:30,fonts:4,"incentive-pay":1,capricious:1,TALKS:20,Diffring:2,prohibit:42,Elton:2,independent:3,"stern-to":6,"banana-exporting":1,Quickview:2,Derel:2,Derek:2,hanged:54,Adolphus:2,truant:1,clothe:39,Styles:123,Idrocarburi:2,Ginn:2,ammoniac:1,transplantable:1,Radetzky:2,integrative:1,bucking:8,Hurt:157,William:2,Blumenkrantz:2,Ozanne:2,Hurd:2,Sounder:2,"re-created":7,Cooler:2,"then-market":1,"effort...":102,Folonari:2,"re-creates":20,"time-limited":1,Tien:2,Percival:2,BIGGER:12,Valparaiso:2,"poetry-writing":1,recite:42,Impact:11,Cannistraro:2,Sojourner:2,"corrosion-protection":3,megalopolises:4,PORTING:8,"Etienne-Emile":2,Calisto:2,Espre:2,sharpest:51,nip:25,Shaving:116,"Fitzpatrick-Davis":2,Thefts:4,"After-the-fact":1,Berkowitz:2,"F.C":2,wildly:6,abstentions:4,sidelining:8,acidified:17,Receipts:111,Search:39,Burgsteinfurt:2,esoteric:1,downsize:39,Ties:65,collectives:4,abandoning:8,"re-acquire":39,classed:17,strung:54,precipitously:6,Romaniuk:2,headlands:4,classes:4,wisps:4,Silences:4,Gerd:2,ran:16,Disposables:4,ram:63,Gero:2,raw:1,Spelman:2,"temporary-help":3,rap:78,Hengst:2,nipples:4,Kaolin:2,Bibles:111,"Lehman\\/American":2,degenerates:20,Slaughter:2,"short-of-war":1,Ridiculous:1,nonmusical:1,glimpsed:54,glands:4,Ogden:2,Blimp:2,gerundial:1,Bikini:2,glimpses:4,Faulk:2,"half-acre":1,philosophic:1,Biking:116,parting:21,TRUST:158,Sundome:2,yearearlier:1,swerved:16,shooing:8,inaccuracies:4,ORACLE:2,levying:8,"high-intensity":1,currants:4,contacted:54,"hunched-up":1,labels:18,"mutual-fund":3,distillates:4,och:64,Korowin:2,faddish:1,Thereby:6,Big:129,Bid:2,Bib:2,Bic:2,whiteface:3,Bix:2,Feodor:2,parlayed:16,Mayans:4,"blue-collar":1,Dornier:2,Berger:2,Lopukhov:2,airstrips:4,Catalina:2,reconstruct:42,Ricardo:2,fabrics:4,Batista:2,"price-conscious":1,"yellow-dwarf":3,idiotic:1,"easy-to-operate":1,gages:4,mergers:4,"adjustable-rate":1,pummel:39,Lego:2,Radhakrishnan:2,swears:20,Morozov:2,upturned:1,Performance:47,Metzenbaum:2,"Kennedy-Waxman":2,Hanks:2,tersely:6,Wachtler:2,Arianists:4,"HIV-1":2,paralinguistic:1,Breger:2,pocketbooks:4,Hays:2,Documentation:2,listlessly:6,Advani:2,Torres:2,Chevy:11,outages:4,Gumbel:2,devout:1,Giustiniani:2,sipped:16,rhythms:4,Datuk:2,ventricular:1,"W.I.":2,HCA:2,unheeded:1,"re-creactions":4,Bergson:2,Mohamed:2,Zooey:2,suggest:149,Kanin:2,Torrey:2,vexed:14,reconstructs:20,Zulu:2,"Aristotelean-Thomistic":1,occupants:4,vexes:20,Hmong:665,Prentice:2,Seynes:2,bureaucratic:1,aback:6,incomparable:1,Lambert:2,rebounded:666,Kimihide:2,"general-practice":1,"post-chemotherapy":1,incomparably:6,containers:4,Unitil:2,fleeting:1,Staples:46,Birnbaum:2,Dey:2,evidenced:17,craft:25,Gerosa:2,benefits:18,budged:32,"high-altitude":1,"pre-market":1,Secretary:11,deliberations:4,unelected:1,hyperactive:1,Bengalis:28,"mine-safety":1,thousandth:1,penultimate:1,Darkhorse:2,beepers:4,"last-season":1,Owning:8,uninterruptible:1,Naphta:2,Menu:2,"System-specific":1,brewed:17,Candidates:4,"moderate-income":3,Refinery:47,bonanzas:4,Abrams:2,Rapping:8,furled:16,Rochford:2,ingested:32,Worlds:111,passbooks:4,"scientifically-trained":1,"New-issue":1,AIEE:2,Nestle:2,CanadianImmigration:2,characters:4,mentions:72,workings:4,dozing:8,"common-sense":3,mentioning:55,Twinkies:28,incredulously:6,"Watergate-beleaguered":1,woodworms:4,"kibbutz-made":1,"property-related":1,"anti-Noriega":1,medics:4,uncoached:1,Corault:2,"die-hards":4,"year-to-date":3,laptop:22,transporting:55,Methodists:28,resigning:55,Oleanders:4,"for...":102,functionally:6,vices:4,Protestants:41,UIC:2,"cholesterol-free":1,monitored:45,"three-night":1,furry:1,groused:16,explanatory:1,Corso:2,Flint:2,Corsi:2,Philip:2,breakfasted:16,grouses:20,erratically:6,reorganizations:4,Hekhmatyar:2,Marrakesh:2,rubicund:1,inescapable:1,Corona:2,prominant:1,cruzados:4,Invalid:2,incontrovertible:1,officals:4,Nerds:57,"Belo-Universal":2,atmospheres:4,Crimea:2,Bomb:39,"headline-grabbing":1,Tears:4,Finns:28,Aguais:2,willowy:1,Milkaukee:2,crudest:51,incumbents:4,utmosts:4,HP:2,Pius:2,HK:2,HI:2,HN:2,HM:2,advertise:42,HF:2,perfected:17,HD:2,HE:53,securities:4,fingerprinting:21,"time-poor":1,Hu:2,Hi:125,Ho:183,marauders:4,Begbick:2,booking:21,He:38,plights:4,"weasel-worded":1,searchingly:6,Sandner:2,erotica:4,Deductible:1,homewards:6,Commodities:56,Gaston:2,Tassinari:2,hutments:4,plunging:55,"H.":11,Venneboerger:2,Duverger:2,steadily:6,Bess:2,efforts:4,twitch:25,curry:63,Best:667,Provided:17,Touches:20,SERVICE:47,"lunatic-fringe":1,shaken:14,"bucket-shop":1,Pattison:2,UNRESOLVED:1,"free-market":3,Puts:20,outmatched:16,"much-anticipated":1,indispensable:3,aquisitions:4,"anti-war-related":1,tacks:4,Mennis:2,Rocky:2,abysmal:1,differences:4,removes:20,Zurkuhlen:2,Peasant:2,outfox:39,tacky:1,sustained:45,removed:81,Bascom:2,Fired:17,muster:63,prowl:449,"higher-salaried":335,"coconut-lime":1,Fires:511,BRK:2,flappers:4,precious:97,LaMantia:2,CAROLG:2,starchy:1,penal:1,trim:520,believably:6,Resnik:2,"nineteen-year-old":1,Hudson:11,Dissidents:4,escutcheons:4,"panic-driven":1,believable:1,boodleoo:106,check:24,tris:4,constructed:54,"Rd.":2,detriments:4,tip:44,Steinkuhler:2,stagnant:1,tie:24,MARYLAND:2,Kincannon:2,Jewishness:47,dissonances:4,"loan-loss":22,uniformly:6,Windflower:2,wisecracked:16,Boase:2,dullest:51,magpies:4,"multi-phase":1,hashing:21,Salon:2,portends:20,longer:668,"fill-in-your-favorite-epithet":1,Pollitt:2,landed:32,longed:32,"great-nieces":4,grisly:1,effluents:4,premeditated:1,unimpeded:1,Loftier:12,"tongue-in-cheek":97,Newsstands:4,"business-minded":1,Sherry:11,"swollen-looking":1,Today:669,Dad:11,Dae:2,Dag:2,essentials:4,"helio-copters":4,Dan:2,Dai:2,Standard:129,Das:2,Insurers:123,Day:11,"non-black":1,furrows:18,MEASUREX:2,Micelles:4,Rheumatics:670,Chirac:2,bluffs:4,headquarter:1,Atari:2,"pseudo-anthropological":1,Bronfmans:113,penises:4,Secure:39,Canoe:2,Kron:2,firmwide:6,registered:45,culminating:8,planning:21,symposiums:4,quick:34,eroding:8,Talleyrand:2,Antenne:2,delineaments:4,"two-week":1,Katsanos:2,sucks:20,"public-interest":3,steelmakers:4,Colossians:28,stands:132,Heorot:2,nationalized:112,unripe:1,contracted:32,scads:4,Federico:2,Karches:2,Karcher:2,Podger:2,reply:44,outlandishly:6,Groom:2,"custom-chip":1,"once-spare":1,alkaline:1,Age:11,dazed:103,Aga:2,"long-termers":4,water:465,Miyata:2,Gauged:17,"refuse-littered":1,supplying:8,avenging:13,sleepwalk:25,bygone:1,expressly:6,grounded:45,restructuring:671,Lemans:2,potable:1,"world-renowned":1,mimicked:17,Unione:2,unbidden:1,Justice:129,"Cover-Up":2,Unions:4,"bad-risk":1,"conventional-type":1,transferrable:1,swallowed:54,wrecking:8,Townley:2,"third-quarter":202,"fifty-pound":1,unsheathe:39,Zeisler:2,frothy:1,certiorari:296,smeared:14,smudged:1,October:2,sessions:4,clicking:55,outputs:4,mainline:3,drown:42,"first-hand":97,insights:4,"Fourth-quarter":3,dialed:32,reprimanding:8,flagship:22,nonunion:1,Safford:2,Antilles:28,streak:78,stream:25,Media:239,expectant:1,Wonham:2,Borscht:2,Ushikubo:2,"major-frauds":1,quacks:18,conversely:6,Thoroughbred:2,Terms:123,"front-back":1,Mihalek:2,protectionists:4,secured:45,unwire:39,Fruit:11,Shvartzer:2,unappreciated:1,Traps:4,Horizons:2,"red-white-and-blue":1,clone:25,Mazzone:2,soyaburgers:4,THR:2,floral:1,gorges:18,XCEL:2,"radar-threat":1,summoning:8,amuse:42,needy:176,Buttrick:2,Premark:2,"out-migrants":4,"Sidley-Ashurst":2,Leblanc:2,"nine-member":1,Suntory:2,Leblang:2,acts:18,Upton:2,Wozniak:2,yuppies:4,Breaking:229,midnight:163,dinkiest:51,ducklings:4,Premarin:2,"pre-eminent":1,swank:1,atCrcial:2,MinHa:2,microcomputer:215,decontrol:25,Communese:2,Moving:8,swans:4,Greifswald:2,thaws:4,eccentricities:4,Linger:59,buffetings:4,McDade:2,Edwardsville:11,endeavored:32,remolding:8,Triggering:8,"not-so-pale":1,"non-smoking":1,guffawing:8,Motorized:2,"smog-ridden":1,Contest:11,"self-screening":1,Geological:2,Marder:2,Burford:11,Save:672,"set-aside":3,factors:18,factory:22,extrapolate:39,hacked:32,misallocating:8,Palumbo:2,maneuver:25,attended:32,bolts:4,blizzards:4,hobble:39,eject:39,"motional-modified":1,earning:55,"asphalt-hard":1,"blood-thirsty":1,Collinsville:2,gusts:4,retreating:8,"heavy-weight":1,gusty:1,"high-resolution":1,suspend:42,fetched:32,rafts:4,undercapitalized:1,Kelly:2,fetches:20,commissioners:4,Panoz:2,Miyoshi:2,Lasmo:2,molded:81,"J&L":11,"J&C":2,"J&B":2,haggle:63,plastic:22,Margarito:2,Hoylake:2,Conable:2,Cult:11,Leonel:2,Culp:2,exploring:8,amines:4,unobtainable:1,"Co-authors":4,"T.T.":2,Saull:2,Jerell:2,lengthier:68,quirky:1,traditionnel:64,distantly:6,Kedzie:2,toughening:8,"public-policy":22,Runners:4,chugs:4,marines:4,Yankee:129,unprecedentedly:6,legalizing:8,whiskies:4,Gastronomes:4,nominating:8,Jemela:2,kimchi:64,Premont:2,Funeral:11,mourners:4,Multifoods:74,Merrick:2,Bastards:4,"in-home":1,paraphrase:78,Aktiebolaget:2,"optical-disk":1,agilely:6,malpractices:4,"social-services":1,sightings:4,Olayan:2,"Depression-era":1,pencils:18,Kuomintang:2,"AC&R":2,Pflugerville:2,Audrey:2,trafficking:21,"inter-Arab":1,senior:3,Humana:2,"P\\/E":2,"above-ground":1,supraventricular:1,diverge:42,"end-of-model-year":1,woos:20,evaluative:1,Continuing:229,Parry:2,CERTIFICATES:57,dreaded:45,Stettin:2,reoffered:81,"payment-in-kind":1,dye:25,Baroque:66,Discoveries:4,verdicts:4,braver:12,orphans:4,fainted:32,"state-registered":1,clowns:4,fainter:12,Jozef:2,Corporal:2,poling:8,Physicians:130,"silver-bearded":1,"art-historical":1,beasties:4,Keeler:2,Spread:39,Gehrig:2,Volk:2,Seminole:2,parking:122,Sniper:2,"fenced-in":1,inhibitory:1,mortgage:25,crystal:22,ways:4,review:44,Univision:2,inhibitors:4,Tarzan:2,"region-by-region":1,Mazeroski:2,rebuilds:20,toying:8,Harlow:2,sirens:4,multiplied:54,shivered:16,"medium-size":1,"fellow-craftsmen":4,"U.S.":673,"fast-talking":1,inseparable:1,multiplies:20,recentralized:17,missions:4,gimmicky:1,gimmicks:4,Broadstar:2,prompted:32,"government-securities":152,Turbine:2,Sarrebourg:2,"skull-bashings":4,Zumbrunn:2,"key-financial":1,hereunto:6,destabilizes:20,assertions:4,misapplying:8,Herculean:1,skeletons:4,raring:1,bums:4,Beauty:11,disappearances:4,eyewitnesses:4,"self-sustaining":1,microscopic:1,Deets:2,followup:1,messes:4,"long-keeping":1,reimburse:42,Breve:2,implored:54,"sea-horses":4,foreclosed:674,implores:20,attentive:1,excelled:32,rhymes:72,refractory:3,Colors:57,jonquils:4,Cotran:2,spritzers:4,rhymed:16,Crystallography:2,Contend:33,"WFXT-TV":2,"double-B-plus":3,"generation-skipping":1,Sake:64,telephone:25,dissident:3,Ticketron:2,"Euro-TV":2,Amomng:1,Speakership:2,Saks:113,Wardair:2,Kirchberger:2,distributions:4,"now-famous":1,supra:6,Burdines:28,macaroni:91,distilled:14,barefoot:218,disadvantages:4,smothering:8,drives:18,driven:14,submarines:4,Waxworks:2,Eta:2,vacanices:4,"Bennigsen-Foerder":2,Perozo:2,Haaek:2,Bondholders:4,pints:4,flakes:4,components:4,"a-Monthly":1,soapsuds:4,disloyal:1,Stimulates:20,agriculturals:4,Provo:2,Teijin:2,lavish:1,Eisenach:2,Diodati:2,LVMH:2,sampled:54,blot:25,"metal-working":1,hint:24,Louella:2,embezzled:16,Shealy:2,Applications:57,bloodhounds:4,falsely:6,samples:18,Simca:2,outwardly:675,nattily:6,Woolworth:11,replaced:54,hermetically:6,Vedder:2,undergraduates:4,Shelton:2,divested:81,kilowatts:4,squirreling:8,Sultane:2,Tootal:2,Newbold:2,aqueous:1,oddly:6,sternly:6,"quid-pro-quo":1,Sultans:4,"civil-rights":93,"mass-marketers":4,"profit-making":3,"six-week-long":1,Sidorenko:2,"non-OPEC":1,"two-nosed":1,Ricostruzioni:2,Wray:2,deduce:39,viselike:1,table:25,International:40,"low-density":3,intact:1,McEnroe:2,Paddy:2,Knowing:8,Parthenon:2,Brentwood:2,renounce:39,stops:72,reallocating:8,"A-1":3,unfunded:1,severed:54,"English-Danish":2,Later:676,populists:4,convincing:450,warlords:4,"squashed-looking":1,fantasize:149,pastors:4,Albright:2,Montagu:2,Mabon:2,"one-act-play":1,Bundestag:11,Croix:2,beavers:4,Transit:11,"small-fry":1,Erected:17,Blanche:2,Prevented:17,spaghetti:91,cripples:4,concentrations:4,Goebbels:2,McCracken:2,"Soviet-built":1,scofflaws:4,spinal:3,Equate:39,"top-tang":3,lastly:6,Kaufhaus:2,feudal:1,lawmaking:3,"interest-only":1,Beatles:111,Opposite:677,Brannon:2,DELAYS:20,Amenitskii:2,TECO:2,thereabouts:6,deteriorating:30,Mlangeni:2,Marver:2,Orejuela:2,baronial:1,Kummerfeld:2,caraway:3,garnered:32,Circulations:2,sentimentalists:4,greeted:32,Drogoul:2,avec:87,Twin:2,Radical:2,Tawes:2,sleazy:1,"risk-averse":1,russet:1,frighten:42,"business-class":1,cringed:16,Principles:57,Spievack:2,slosh:39,LeCave:2,"special-edition":1,incorrect:1,"B-cells":4,rubbed:32,Woodbury:2,"junk-financed":1,dramatizations:4,"just-picked":1,erecting:8,Nuf:6,arbitrageurs:4,redial:39,"sweet-tongued":1,"eight-mile":1,trash:25,stalwart:3,requested:32,Berard:2,Basham:2,separate:240,stocky:1,grotesques:4,CNA:2,CNN:2,stocks:678,"sun-inflamed":1,Knots:2,stackers:4,refinanced:54,Ornstein:2,Mean:39,Guidi:2,Dubovskoi:2,Suttle:2,Stretch:40,lack:44,executing:8,lacy:1,Words:57,"blood-forming":1,piazzas:4,synthetic:3,Ecole:2,Christiane:2,lining:55,switched:112,Christiana:2,dejectedly:6,siblings:4,defuse:39,Christians:41,Usha:2,fax:22,"low-duty":1,"multiple-year":1,far:591,ticked:112,perseveres:20,shavings:4,Behrens:2,sons:4,fan:24,hems:4,Capellan:2,"upper-middle":1,shipboard:22,Litton:2,Ideologues:4,lesbians:4,booting:8,Endeavor:216,Galbraith:2,Macao:2,align:42,Chase:2,Scarpia:2,Hattori:2,Discourse:2,Welling:2,NOVEMBER:2,fabricates:20,"over-emphasized":14,interaxial:1,imported:471,Definitive:1,advantageous:1,whimper:25,"serve-the-world":1,attitudes:4,fathoms:4,"ultra-pasteurized":1,scowling:21,whitecollar:1,Clouds:2,Susan:2,totalistic:1,Rachmaninoff:2,researchable:1,Mohammed:2,Gundy:2,"red-light":1,Leonore:2,Danza:2,Communication:11,"price-wise":1,weaning:8,schoolgirlish:1,miniature:3,supplements:18,spaceborn:1,gleeful:1,Forrest:2,Metter:2,Chores:4,UNDEFINED:1,Things:123,"less-serious":1,appliances:4,Reader:2,inorganic:1,Luray:2,aberrant:1,pervades:20,Maurer:2,punts:4,"kidney-shaped":1,forcefully:6,conspiring:8,pervaded:32,"new-home":1,branded:14,Zipper:2,waxen:1,amalgamations:4,grabbing:55,crested:1,operators:4,Sidekick:2,"something...":102,Figaro:87,stick:95,Hegel:2,"big-time":1,portended:16,Confronted:17,Zela:2,"battle-shattered":1,Thunderbirds:28,protons:4,Kwon:2,arbitrating:8,Zell:2,"Free-marketeers":4,originations:4,psychoanalytic:1,challenging:30,"drug-making":1,Thurday:2,Bonito:2,univalent:1,protects:20,"closet-sized":1,Grohl:2,meditate:39,"cold-storage":1,recursive:1,sleeplessly:6,"Know-Nothing":1,Friendly:2,wither:42,gullies:4,speeding:5,"light-headedness":1,Glo:2,Influential:1,"commodity-chemical":1,oddballs:4,Shippin:39,Careless:2,mismeasurements:4,Raucher:2,cults:4,retrofitted:17,Played:17,LeMasters:2,cudgels:4,Player:11,culte:64,retaliate:39,Tech:2,"half-dozen":22,Herschel:2,microsomal:1,"Gestapo-style":1,gauges:72,"non-sentimental":1,eludes:20,Raikes:2,disabled:338,gauged:54,Jamiesson:2,"tuxedo-rental":1,Vranian:2,Pickens:2,dithers:20,eluded:32,"read-my-lips":1,Threatened:16,excutives:4,conformist:3,filberts:4,Guyon:2,Dominican:40,aggressively:6,L:11,"sub-station":3,"screw-loose":1,accumulate:42,"meat-processing":1,"ozone-depleting":1,Trustcorp:2,subtler:515,refresh:33,irreducible:1,Nutrasweet:2,succulent:1,used:45,"Tiger-Heli":2,Daywatch:2,inflict:39,JAUNTS:4,Oculon:2,twists:18,"democracy-free":1,"out-of-mind":1,Mulcahy:2,Frankenstein:2,congenial:1,"one-sentence":1,Eliezer:2,"electrical-products":4,docters:4,soulless:1,combed:32,forgive:42,Stauffer:2,hearths:4,lag:679,"honey-in-the-sun":1,Nonrecurring:1,"non-academic":1,"States-Yugoslav":2,cremated:17,"Seger-Elvekrog":2,glottochronological:1,"Helmsley-Spear":2,Barakat:2,Booming:1,"patrons...":102,"municipal-bond":3,fancy:104,brave:82,"once-grumpy":1,"lower-quality":215,passes:72,breathless:1,"Co-sponsoring":2,Giroldi:113,inhibitions:4,polybutenes:4,passed:54,penetrates:20,"single-shot":1,"court...":102,Paolo:2,treasured:14,option:78,"state-supervised":1,Pericle:2,relieved:45,Dijon:2,rawboned:1,"semi-serious":1,nullifying:8,REALTY:2,Beefeater:2,Nishimura:2,relieves:20,"fence-sit":39,Marina:2,sinless:1,Rico:2,"F.A.O.":2,whiskered:1,brushlike:1,WPA:2,doubly:6,"West...":102,Crittenden:2,"recently-filed":1,Anglo:2,Devices:41,Wakui:2,gilt:613,Kombo:2,booklets:4,"Dept.":2,Bamberger:2,Forge:2,Abercrombie:2,perpetrate:39,sandwiched:54,Nuzhet:2,Supporters:4,archaized:16,Viewing:55,Refractories:111,sandwiches:4,Galvin:2,hurling:8,puffing:8,"human-resource":1,buff:22,wheedled:17,Boehlert:2,Coventry:2,reach:95,"self-deluded":1,miserly:1,Lafayette:11,"Sears-McDonald":2,revivals:4,Giuseppe:2,soared:32,equatorial:1,windows:4,coincides:20,Switzer:2,locales:4,ingots:4,coincided:32,Juliet:2,"say...":102,Forrester:2,rationalized:7,reassembled:17,JP:2,Ebert:2,allocable:1,Erath:2,flexers:4,restarters:4,JH:2,laments:72,Forward:2,JA:2,tussled:16,ragging:8,Seattlites:4,Nationwide:294,Jr:2,Blaming:8,starters:4,Nature:11,Jo:2,Taruffi:2,unopposed:1,unilaterally:6,feminists:4,hip:22,Bedford:2,hir:404,his:680,"mono-unsaturated":1,ceremoniously:6,Cokely:2,amici:64,explosively:6,Bierce:2,longest:51,commiserate:39,JOINT:1,"J.":2,dossiers:4,outstrips:20,bars:18,Partnership:2,Shirt:2,Rospatch:2,yassuhs:106,Shira:2,bare:82,bark:25,Cluff:2,compacted:7,"entry-limited":1,learns:20,glistening:8,Libya:2,distinctive:1,Oregon:11,libraries:4,ENDED:16,Menelaus:2,use:44,consecutive:1,"Thursday-night":1,SALT:2,initially:6,Ingbar:2,"one-company":1,"general-purpose":1,rapid:1,admirers:4,African:66,Japanese:681,Spurred:17,Fracturing:2,sluiced:32,Morrissey:2,"small-business":22,Unitholders:4,Morey:2,"four-nation":1,sluices:4,blazed:16,became:16,redemptions:4,upturns:4,Morel:2,arbitrarily:6,"network-affiliated":1,"three-point":1,"carpet-cleaning":1,unleveled:17,improper:1,Cobb:2,Cobo:2,pesatas:4,"pro-Reagan":1,"Latter-day":1,"Hewlett-Woodmere":2,jugglers:4,steeples:4,Guitar:2,whom:79,ditches:18,whoe:79,Elite:2,Finkel:2,buck:24,passably:6,"single-party":1,Maitland:2,TRIAD:2,"Afghan-Pakistan":1,"left-handed":1,stolen:14,Succeeding:8,bailouts:4,sportiest:51,fingerings:4,Heidrick:2,wireline:1,underperformed:17,Springerville:2,engineers:4,City:11,lodges:4,Middlesex:2,blurted:32,Edwards:2,Edwardh:2,lodged:54,"Fleet\\/Norstar":2,"Write-offs":4,anguish:78,Cite:33,"gallus-snapping":1,openended:17,predigested:17,twofold:97,retroactively:6,Skydome:2,"Rolls-Royce":2,widely:6,itchy:1,"pro-reform":3,parvenus:4,Ila:2,negotiate:42,Sober:2,Fabian:2,"post-1987":1,"executive-level":1,"precedent-setting":1,verboten:64,"new-car":22,refute:39,Seizing:8,edgy:1,unnourished:1,edge:25,Augustines:28,dares:20,bleaching:8,reliant:1,GLI:2,aftermaths:4,salutaris:64,intervals:4,pyramiding:8,autumnal:1,Semenov:2,Sixteenth:40,illusions:296,corroborated:32,"mile-long":1,"half-melted":1,tamer:12,"single-digit":3,MedChem:2,unscheduled:1,Farwell:2,Glory:47,conscript:22,REJECTED:17,Defends:18,rafters:4,"specialized-engineering":1,WMB:2,antiseptic:3,sharpened:54,"Kass-Pedone":2,modifications:4,Cucamonga:2,capitals:4,drooled:16,ignore:42,"one-week":1,unstable:1,Teeley:2,"pro-student":1,Pharmaceutical:40,hinted:32,"time-cast":1,Backs:20,Leighton:2,"highest-pitched":1,litter:78,"co-developers":4,modernize:39,"insurance-cost":1,Clubs:41,Fund:11,Motorola:2,ticking:8,Funk:2,Aguilar:2,"non-beer":1,Barton:2,Bartol:2,Taoists:2,cannons:4,palmed:16,Fulfills:20,Singleton:2,tauntingly:6,Koreagate:2,Okrent:2,overgenerous:1,entrepreneurs:4,completing:8,"I.R.S.":2,grazin:8,"Nathan-Bond":2,unnoticed:1,stitched:17,operational:1,OPPENHEIMER:2,shawls:4,"Greene\\/Worldwide":2,Sonnett:2,intraday:3,stitches:4,amidst:127,"Batallion-2000":2,"ABG-Semca":2,Fuzzy:1,skouting:8,"audio-visual":3,Beccaria:2,Verit:2,Maoist:1,"higher-than-retail":1,Sylvan:2,Ziebarth:2,repeatedly:6,Zedmark:2,Means:682,"non-Russian":1,Wickcliffe:2,licensees:4,feasting:8,"majority-party":1,unsealed:14,Westerners:28,Ansel:2,worthwhile:1,shortcuts:4,Hungerfords:2,divisive:1,missionaries:4,"wall-flowers":4,forestalled:17,malicious:1,Specifics:4,Embarcadero:2,grouped:17,ornamented:17,mammoth:1,interpretable:1,disrupting:8,Felsher:2,"least-developed-nation":1,"then-prevailing":1,"half-filled":1,Foiles:2,liquefy:42,Reformation:11,Foiled:17,KOFY:2,emoted:16,Oakland:11,reseachers:4,Kimmel:2,underachievers:4,instantaneous:1,Stands:2,prospectively:6,Bowan:2,Viewpoint:11,"special-interest":3,Endara:2,"A.P.":2,squeezing:8,sweathruna:64,Commanding:8,Dailey:2,"property-rich":1,"manufactured...":102,Systemwide:66,Sobel:2,Porgy:2,engineered:45,headlined:54,BANCORPORATION:2,NRM:2,warships:4,Sims:2,LAN:2,"Tarot-like":1,violinists:4,"prepayment-protected":1,LAC:2,deals:18,Projections:4,Kuraray:11,dealt:54,manifestly:6,businesses:4,LAW:47,"all-married":1,"stainless-steel":1,Haynie:2,"civic-lunch":1,Neanderthal:1,narcotizes:20,reinsure:39,Interviews:4,surefire:1,"pre-French":1,Hutton:2,"Raw-steel":22,Durwood:2,"open-bank":1,beanballs:4,buffeted:17,universities:4,hourly:1,Zygmunt:2,Narita:2,"non-familial":1,Zakes:2,Randall:2,"post-colonial":1,"twice-a-year":1,vistas:4,"re-exports":4,noncontract:1,Belafonte:2,sinuses:4,"end-tailed":17,"bottom-fishers":4,Technomic:2,Benediction:2,scrapped:54,Alois:2,Dowd:2,Clapper:2,rationalistic:1,oversold:683,"U.S.-Korean":1,Hardy:2,"permanent-insurance":1,Materials:41,helpers:4,Spade:2,Carlsbad:2,feverishly:6,gossiped:17,scales:18,forbid:684,chipped:45,"black-and-white":1,shoved:32,Threatening:8,subsidary:1,"quake-inflicted":1,scaled:54,adsorbs:20,"thirteenth-century":1,"decade-long":1,Toho:2,shoves:20,analyses:18,grassy:1,pauses:72,Births:4,Jacksons:28,"deer-are-long-legged-rats-with-big-ears":1,organismic:1,Murguia:2,"exchange-listed":1,Dolphins:28,particularistic:1,Selections:4,Gossips:4,inclined:14,symbolizing:8,"Oct.13":2,Copaken:2,Sighting:8,entwined:14,thuringiensis:64,Giannini:2,women:4,Trompe:64,"parent-company":3,"ANF-Industrie":2,restaged:17,extralegal:1,Solloway:2,abort:39,merged:81,NTC:2,NTG:2,"Fox-Pitt":2,Northern:40,flaring:30,rapt:1,heaving:8,Skipping:55,Magic:40,rape:44,Cutbacks:2,Frisbee:2,patronize:39,HUTTON:2,Hubie:2,fidgeting:8,Duchossois:2,"extra-curricular":1,undersized:14,modulations:4,segmenting:8,exemplify:149,hurdles:4,bestsellers:4,"anti-management":1,salvaging:55,Vassiliades:2,hurdled:16,Qualities:111,ethnic:1,Hence:6,hymens:4,Dostoevski:2,Knightfall:2,sculptures:4,Aermacchi:2,interrupted:81,"Far-reaching":1,Fairmont:2,sculptured:14,"high-rises":4,"Rundfunk-Sinfonie-Orchester":2,Convulsively:6,heavyweight:22,"Toronto-based":66,"half-bottles":4,"heebie-jeebies":4,dearest:51,"primary-color":1,outsold:16,Inwood:2,Billard:2,complicate:42,Hoemke:2,choosy:1,apologetically:6,owe:149,"money-wise":1,choose:42,Roizen:2,inconsistencies:4,covered:81,pending:199,Yoder:2,Task:2,Scandinavia:2,"multi-purpose":1,Gabor:2,flout:39,lionized:17,catchwords:4,Gabon:2,Adam:2,microeconomic:1,Writing:217,service:44,mollified:54,decommissioned:17,drummers:4,HMOs:2,Considerable:1,Emulex:2,"worst-case":1,unavailing:1,"job-boosters":4,"higher-toned":1,FiberWorld:2,Arts:46,masterworks:4,completions:4,HATS:4,"U.S.-built":1,Witnesses:57,whitish:1,Spangenberg:2,lobbied:32,sectional:1,Shuttle:11,Michelob:2,respects:18,effloresce:39,unabated:1,impart:39,McCafferty:2,dive:24,Vantage:2,witches:4,sunbaked:1,Deno:2,"service-industry":3,supercritical:1,halfheartedly:6,yori:64,conflicts:18,Snedaker:2,"Ed.":2,yore:685,conscripted:17,feasible:1,"round-eyed":1,reweave:39,"slow-firing":1,keyless:1,nonrecurring:30,"experience-oriented":1,Maloof:2,"much-delayed":1,Flushing:2,"management-services":152,endemic:1,tolerant:1,salient:1,Uprising:2,galled:17,tootles:20,"minority-internship":1,earthshaking:1,pimplike:1,doomed:45,powdered:7,simulate:42,"heat-processing":1,Heymeyer:2,males:4,Bellow:2,Moldavian:2,riches:504,abetting:8,frugal:1,Fletcher:11,Corrupt:2,Ailey:2,"creek-filled":1,Milling:2,"quality-adjusted":1,Ailes:2,Empire:11,fissionable:1,Potash:2,"quasi-xenophobic":1,Kremlin:2,Independent:40,arraigning:8,"shareholder-rights":176,Pabst:2,"ham-handed":1,"pre-game":1,Braking:2,ghazals:64,Twaron:2,Elizabeth:2,supplanted:17,Kiss:39,Mattox:2,Yquem:2,Howie:2,Middlefield:2,"wind-blown":1,firecrackers:4,Daniil:2,Laying:229,siphon:39,vouching:8,"European-made":1,biologic:1,Mercedes:130,delve:39,Profits:57,amulets:4,"terra-cotta-colored":1,"much-lauded":1,Coeur:2,CI:2,Assicurazioni:2,High:294,Salter:2,Adjoining:8,Blvd:2,Silly:2,REQUESTS:4,smirked:16,Bantam:2,intragovernment:1,nolens:64,superimposes:20,purely:6,"b-As":686,superimposed:14,seal:44,debate:44,Lingering:1,painted:45,Pyramids:28,Faget:2,Unpublished:1,"Rey-controlled":1,Craft:47,tinges:4,"re-echo":39,Measured:17,"lighter-than-air":1,Kollmorgen:2,sued:32,"UV-B":213,Spinley:2,Quelch:2,canyons:4,flirting:8,"Galophone-Kimberly":2,ones:4,sues:20,daydreamed:16,Flugdienst:2,NIH:2,homosexuals:4,HCFCs:4,memorabilia:4,Sullivan:2,Maury:2,vied:32,Promotional:1,NORC:2,Maura:2,"grassroots-fueled":1,WIN:2,Bertorelli:2,Gosh:106,truer:12,conversions:4,Siniscal:2,turbulent:1,"Gold-backed":1,LMEYER:2,Lawrence:2,merits:18,recoiled:16,unfairly:6,Amman:2,"bright-red":1,Bernardine:2,Gutfeld:2,"ever-quieter":1,record:139,"phase-one":1,Ramtron:2,superb:1,"eight-cent":1,chairmen:4,oldsters:4,trifle:479,Ellsaesser:2,reexamining:8,Zivley:2,Shunted:17,huts:4,neonatal:1,spoil:42,"limited-time":1,fervors:4,"Safety-Kleen":2,"Berlin-West":2,Tet:2,Daignault:2,Suemeg:2,Parkinson:74,Kirby:2,"Shotgun-type":1,clogged:81,demurs:20,"DC-9":10,torments:72,comestibles:4,"out-of-school":1,wonder:687,kinesics:4,"retailer-sales":1,worldly:1,"fourth-grade":1,"no-layoff":1,adulterers:4,hypothalamically:6,Margolin:2,Fujisankei:2,"non-professional":1,lettermen:4,intimidates:20,CF:2,Langendorf:2,enlarging:55,"Strong-earnings":4,Benson:2,divinely:6,"Home-made":1,thrusting:55,STATE:11,uncanny:1,Navigation:2,wily:1,wilt:513,"intra-Community":1,"disabled-workers":4,choices:4,will:688,hovering:8,Poetrie:2,unaccommodating:1,riche:1,PLO:2,Potentially:6,Bollinger:2,Braques:28,boite:2,unflappable:1,"far-out":1,Plantation:11,richissimos:4,lobular:1,Bretton:2,Tactics:4,Hope:115,Cambrex:2,Gaubert:2,Colman:2,privileges:18,"program-dominated":1,limply:6,"horse-playing":1,retailing:21,Pasta:2,Londe:2,privileged:1,elbows:4,Janis:2,Sosnick:2,premiere:205,takeoffs:4,MTV:2,Voyagers:28,"first-amendment":1,proprietors:4,glared:16,marketwide:1,Bust:2,MTM:2,proprietory:1,suffragettes:4,"already-expensive":1,"asset-stripping":1,Looked:16,"back-ups":4,Kutz:2,Muir:2,"government-provided":1,unpacked:1,"Lond.":2,theses:4,Minuses:4,sensing:55,Haut:2,Annapolis:2,Quentin:2,Schmalma:106,Conyers:2,identically:6,melanderi:28,Ayers:2,patria:64,downturns:4,dooming:8,miniscule:3,"Records\\/SONY":2,beauticians:4,Tower:2,Wolfsburg:2,avidly:6,"two-page":1,point:486,Prohibition:11,Fujisawa:2,"Milwaukee-based":1,crannies:4,Mattsson:2,earthquakes:4,Solodar:2,identical:1,Reared:17,Drum:2,"permanent-looking":1,republics:4,Bante:2,"name-droppers":4,idyllic:1,Norimasa:2,Bobettes:4,Bantu:2,fervente:2,ahem:106,Dealing:8,"Federal-court":1,Barcus:2,repressed:14,Desc:2,"stain-resistant":1,Bunting:2,Milken:2,Fuller:2,"credit...":102,faithfully:6,IAFP:2,searching:55,Bronces:2,darkhaired:1,"self-content":1,Jonathan:2,neglecting:8,"M.D.C":2,"regular-featured":1,lead:689,"mass-circulation":1,obscurities:4,lean:240,"M.D.s":4,leap:24,nonfinancial:1,glacial:1,refolded:16,locate:42,"all-in-all":6,"Japanese\\/Chinese":1,Chimicles:2,murdered:45,hoofmarks:4,Chester:2,Maui:2,tempered:54,slug:25,CONGRESSIONAL:1,Elios:2,stereotypically:6,spilled:32,"ethics-related":1,shipping:55,surge:25,Fundamentalists:57,Furiouser:68,Buick:2,Fosset:2,fatally:6,Really:690,Ecclesiastical:2,warrants:18,brambles:4,Predictions:4,druggers:4,brush:139,inpenetrable:1,"North-Central":1,Liebenow:2,Ball:11,resistors:4,Bali:2,Bald:2,"province-wide":1,Bala:2,Sailor:2,Baly:2,Vern:2,NetWare:2,appointing:8,Kenji:2,funds:18,bombardments:4,corneal:1,"missile-defense":1,Suggestion:2,Charmer:2,kibbutzniks:4,"triple-digit":1,Bucharest:2,Gathering:21,Golf:11,Gold:11,Redbook:2,Goddamn:106,insipid:1,recede:149,"flood-prone":1,AFTERMATH:2,Hemingway:2,Strasny:2,"network-owned":1,Tamales:28,buffs:4,domesticates:20,Mrads:4,bombarding:8,Vancouver:2,Temporary:66,ususal:1,"more-or-less":6,Adamski:2,book:25,boom:25,boon:22,Chinaman:2,Procedures:41,honorary:1,withstood:32,junk:25,"Jovanovich\\/Bruccoli":2,moguls:4,ideological:1,medications:4,dollarette:1,Dover:2,Geingob:2,NFIB:2,Calmly:6,rotting:8,"tax-reform":3,"well-entrenched":1,"extended-range":1,Lust:2,northerly:1,hardboiled:1,"mid-week":3,Debts:2,BUSINESSLAND:2,Larsen:2,"five-nation":1,Schuster:2,"waste-management":3,advantage:25,Moreira:2,fractioning:8,Adjusting:8,scold:39,"all-county":1,halfways:6,mutinies:4,alphabetic:1,Duhagon:2,Elec:2,Apicella:2,"button-down":1,citrus:3,millages:4,Fridman:2,Kearney:2,Goshen:2,liaisons:4,ASSETS:46,Loen:2,Cairenes:28,Loeb:2,"J/NNP.A.W.":2,broiled:17,deferments:4,"ultra-violet":3,"non-compete":1,Loew:2,"non-violent":1,sooty:1,punning:8,miniatures:4,Dissident:40,sustaining:8,Cruger:2,Pampa:2,Charade:2,Burrill:2,Bosis:2,tiered:1,cooking:27,Blackwill:2,BLOEDEL:2,Dylex:2,"store-brand":1,"AT&T":11,Agfa:2,hallucinating:8,Maldutis:2,shocks:18,chins:4,Foundation:11,jubilantly:6,zlotys:4,nawt:6,"non-``":133,Octopus:2,doldrums:91,"One-year":40,Rundlett:2,climbed:32,Nibble:2,"compressor-manufacturing":1,Dubose:2,Jewell:2,Farther:6,natures:4,"over-leveraged":1,Shicoff:2,Isler:2,Isles:74,"mortgage-lending":3,appropriately:6,Dexter:2,lengthen:42,"now-smaller":1,forbore:16,Vitulli:2,"pro-rata":1,Warburgs:28,ARTY:2,abbreviations:4,Gemeinschaft:64,"share-repurchase":1,Laodicean:66,therefore:691,Randell:2,Diabetes:2,Glenne:2,LOUIS:2,Clients:4,"Red-blooded":1,primeval:1,Mattress:2,unpack:39,Buoy:2,"J.H.":2,Proprietary:2,archaeological:1,CHEMICAL:2,leadings:4,Colombia:11,"sky-carving":1,"six-mile":1,unreconstructed:1,"cable-programming":1,Le:87,La:87,Lo:183,Li:2,"American-style":1,Lu:2,cookers:4,"automobile-parts":1,Biafra:2,absolute:3,LA:2,Malapai:2,Easter:11,LM:2,Navin:2,LS:2,LP:11,dared:32,Falcon:11,LX:2,"junior-grade":1,Guste:2,"L.":2,stingier:12,"operator-assisted":1,emphysematous:1,Centerre:2,Hoping:8,"down-payments":4,romped:16,Matunuck:2,sickening:1,Sarum:2,farmlands:4,nonsensical:1,"point-of-sale":1,"investment-counseling":1,Ehrlichman:2,Willy:2,"already-shaky":1,Wills:2,whizzing:8,partnered:17,Dussa:2,"Forty-one":1,CONTAIN:39,Willa:2,"multi-windowed":1,rewarded:54,Boxford:2,Qinghua:2,Abbott:2,occupations:4,secede:39,Progressivism:2,anticipations:4,"HIV-related":1,wales:4,"per-ton":1,Decisionline:2,variables:4,Prence:2,Libera:64,Hickory:2,riggers:4,HIGH:40,recollections:4,Lodowick:2,multidimensional:1,undeveloped:1,glutted:14,Mechanics:2,Shamu:2,"five-percentage-point":1,Shame:59,diatoms:4,Hovdingar:64,Authenticated:17,telescope:25,sandbars:4,Tiburon:2,outgeneraled:17,PENSION:47,Jamestown:2,allay:39,WEDTECH:2,esoterica:4,touts:20,Underseas:2,smirk:25,encourage:42,zap:42,Correcting:8,misrepresentations:4,stamping:498,resinlike:1,Blessings:4,Osric:2,"air-conditioners":4,universally:6,"single-day":1,Pilsudski:2,competes:20,commissaries:4,"UH-60A":2,"Crawford-Browne":2,ministries:4,Mooney:2,competed:32,dentures:4,Walbancke:2,Krampe:2,Delfim:2,Mao:11,disfigured:112,maladies:4,"Tshombe-Gizenga-Goa-Ghana":2,clamorous:1,reintroduces:20,seizures:4,Itch:39,Fearless:40,ruins:4,"mind-boggling":1,"pan-tribal":1,"Kerr-McGee":2,exulted:16,nigras:4,Gosbank:2,"middle-Gaelic":1,"large-size":1,Oracle:2,"non-interstate":1,Colleges:113,Alongside:206,Diceon:2,idly:6,idle:82,valiant:1,"bath-supplies":4,Preludes:28,Generally:150,"media-spending":1,Phuong:2,dozed:16,arousal:1,CORPORATE:1,Studach:2,Fontaine:2,Kennard:2,racers:4,moralizers:4,Pascual:2,"anti-epileptic":1,Missionary:10,concedes:20,committing:8,limitless:1,vexing:13,retroviruses:4,metrics:4,Seib:2,diagnosable:1,Dispensing:8,conceded:32,Mahler:2,"non-EC":1,Paragon:2,"confidence-shattering":1,scream:95,Zanzibar:1,Curly:1,"sons-in-law":4,"ex-partners":4,TAXPAYERS:4,Marks:113,cheaply:6,Resources:41,Mylan:2,Extend:39,"longer-established":1,Reiser:2,Tiao:2,midshipmen:4,Octave:2,Coliseum:11,Mylar:2,remotest:51,Dalkon:2,Tricks:65,bruddah:147,"dope-ridden":1,acrobats:4,conquerors:4,Harburg:2,Guesstimates:4,Rip:2,Craig:40,Rio:11,eyelids:4,Rim:2,"Higher-income":12,"twice-daily":1,boarded:112,Composers:28,pioneering:30,housewarming:1,clarified:54,"three-bedroom":1,overexercised:17,eschewing:8,sweetpeas:4,Narberth:2,"mass-produce":39,Occupational:40,clarifies:20,deadpan:1,Advances:57,Dartboard:47,droves:4,"ex-Mrs":309,Sinhalese:1,"third-story":1,timber:25,croakin:8,Advanced:40,"Coast-based":1,"marketing-communications":4,Truesdell:2,unseemly:1,Bronx:2,flathead:1,Spectradyne:2,Elaborating:8,veer:39,"leisure-oriented":1,Otis:2,heating:21,Laura:11,"high-yielding":1,Wohlstetter:2,multimillions:4,Lauri:2,Lauro:2,eradicate:39,gypsies:4,Mendell:2,Biovest:2,blonde:3,truthful:1,CICS:2,relearns:20,Hinman:2,Sitting:8,union:22,Tamm:2,flipped:16,Brassica:2,Hoosier:2,Weerasinghe:2,tallest:51,Remington:2,Tama:2,allotting:8,Royaux:2,Consensus:2,"low-water":22,sycophants:4,"business-related":1,Indemnity:2,Hieronymus:2,TDK:2,Elgin:2,participatory:1,"data-communications":4,Talley:2,Beware:39,ugly:1,employ:182,"disk-drive":22,Vlasi:2,Kaneb:40,Zurcher:2,Prozac:2,"Michel-Etienne":2,RODE:16,Evzone:2,Clarksburg:2,Potomac:2,"London-based":66,Sword:11,noncompetitive:1,womanly:1,verged:16,Phouma:2,JYM:507,malefactors:4,jolting:8,Elders:130,"hot-honey":1,split:692,Peden:2,Clardy:2,Wussler:2,KIPPUR:2,boiled:45,effortlessly:6,inadvertently:6,qualifications:4,"intellectual-literary":1,consents:18,Liquidating:116,Bentsen:11,Persia:2,Traces:4,Tracer:2,midsized:7,"Malay-based":1,"anti-Bork":1,Martyn:2,"Miami-based":1,Gavin:2,Belton:2,goofing:8,discrepencies:4,Weaken:39,Shaffer:2,outlived:54,Rapid:40,Muscolina:2,Retracing:8,"out-of-doors":91,"gun-shy":1,snickered:16,Neversink:2,portrayed:54,Happy:40,Ewing:2,espouses:20,Baghdad:2,beloved:344,espoused:32,"Bake-Off":2,"grilled-chicken":1,"warn-your-enemy":1,confidentially:6,"Jewish-Gentile":2,otherworldly:1,unprotected:1,"off-white":1,clustered:54,shadow:25,Muscovy:2,Mongi:2,Maniago:2,"Schleswig-Holstein":2,retake:39,festivities:4,Steven:2,Growers:28,Agricoles:2,Literally:6,discordantly:6,begin:42,proportionally:6,defeatists:4,"Book-of-the-Month":2,prospectuses:4,Between:127,stealthily:6,Goodyear:31,Asiatic:1,"Merriam-Webster":2,Redwood:2,Passaic:2,plucked:32,Ingleside:2,slivers:4,alligatored:17,"IBC\\":2,"low-yielding":1,Jakes:2,fish:693,"personal-computer":22,"anti-scientific":1,disdains:20,IBCA:2,Franchising:2,bicentennial:22,browse:39,"property-poor":1,stoked:17,oversaw:385,beinge:8,RECRUITS:20,administer:42,Aaron:2,Management:11,Seelig:2,Rheinstein:2,collectors:4,"fast-vanishing":1,tame:82,Testicular:2,NALU:2,Device:47,"single-room-occupancy":1,tamp:39,contusions:4,DyDee:2,grooms:4,"miles-per-hour":1,"quota-cheaters":4,nonvoting:1,"hot-tempered":1,Boudreau:2,Soda:2,safeguard:63,"High-technologies":4,masquerading:8,"Gene-Princess":2,Pleasanton:2,auditioning:8,pesos:4,smashed:85,Brest:2,Lolita:2,refillable:1,prudentially:6,Deleage:2,whorls:4,Pittsboro:2,tooth:163,triangles:4,Tashi:2,microwaving:8,flaps:4,Apollo:2,eventual:1,Lefferts:2,"market-affecting":1,OHIO:2,vegetative:1,Ferruzzi:2,"all-consuming":1,E:694,Operation:11,Gardena:2,comely:1,intent:22,"class-conscious":1,Horticultural:2,variable:3,Gardens:41,rephrased:17,Inform:2,filing:21,Sudanese:2,overturned:54,Heerden:2,Blackwells:28,Wunderman:2,Shigezo:2,"non-arbitrage":1,bandits:4,Wabash:2,Bye:106,Proudhon:2,osf:127,Millstone:2,airframes:4,Tourist:11,timbered:1,photocopiers:4,crates:4,Beckwith:2,Tourism:11,Glendora:2,"anti-Yankee":1,"who...":102,Agnos:2,choice:22,Lyle:2,Halprin:2,Selkirkers:4,stays:72,Olszewski:2,"plaid-floored":1,Lasker:2,Dimitri:2,Tau:2,cooks:4,Tap:63,Tar:113,"Monday-Friday":2,Organized:2,Sojuzpushnina:2,Tae:2,Inexplicably:6,defaults:18,CLAIMS:20,Tan:40,Tao:2,Tai:2,Taj:2,Copernicus:2,"crash-scarred":1,intial:1,trails:18,"Small-company":1,Dryja:2,lengthened:45,thrumming:8,"long-suffering":1,shirts:4,costlier:12,"not-so-lonely":1,"Stop-Limit":2,Rolm:2,Landau:2,Loper:2,Magna:2,"Fault-tolerant":1,"scandal-wracked":1,boost:182,Lopez:2,"Bio-Products":2,"Porsche-like":1,Latham:2,"egg-processing":1,Webb:2,Hallmark:2,accomplishes:20,mafiosi:4,dusty:1,Displayed:17,LME:2,accomplished:81,irregulars:4,Bofors:2,REAL:66,Shattered:1,Giulio:2,Thornton:11,Enough:301,Jong:2,Joni:2,REAP:33,Heimers:2,nitrates:4,working:695,Kansai:2,Hayter:2,Lazzaroni:2,Royalty:2,Inmates:57,Jaclyn:2,"High-gain":1,Sahjunt:2,Finnerty:2,"Bush-Gorbachev":2,"mid-continent":1,Vicolo:2,Doubled:16,Rapatee:2,"non-family":1,tines:4,arable:1,Doubles:2,Opelika:2,riders:4,Joffre:2,originally:6,harmonious:1,Showers:2,Comparative:1,stupidities:4,zippers:4,unraveled:81,Protestantism:2,admired:112,Mexicali:2,"tree-shaded":1,mirrors:72,Hump:2,Hecht:2,Shilling:2,Matamoros:2,locks:18,incremental:1,admires:20,Bore:39,Hume:2,septic:3,Plimpton:2,dooms:4,vainly:6,foreshortening:8,slams:20,Skinner:2,Knauer:2,Printemps:2,minicomputers:4,Drain:63,"moon-washed":1,"dinosaur...":102,STC:2,"power-buying":1,paleontologists:4,LecTec:2,Kissin:2,STS:2,Corporate:66,Korps:2,egotistical:1,temperate:1,finanicial:1,Needless:66,regressive:1,Moll:2,COCAINE:2,wolves:4,Astaires:28,Mole:2,Encouraged:14,Spurgeon:2,"seven-bedroom":1,Peterborough:2,SEPARATE:1,"touch-tone":1,Prudence:11,years:4,episodes:4,yeard:17,Fjelstad:2,"close-in":1,Lakeshore:2,"dust-thick":1,"once-fashionable":1,Cypress:11,Assist:2,Escanaba:2,Legislatures:4,troubled:103,relapsed:16,augen:64,recipients:4,civilian:3,Kemm:2,Deutsche:164,"Minoan-Mycenaean":2,indigenous:1,secularized:17,drilling:122,Kemp:2,Webster:2,"U.S.backed":1,"ki-yi-ing":8,materialized:32,"twenty-nine-foot-wide":1,Cafritz:2,Holcombe:2,Certified:2,materializes:20,quarrymen:4,retrieve:42,Entitlements:4,Live:696,sponsor:24,prudently:6,workdays:4,Mongan:2,interned:17,paroxysmal:1,Zawia:2,Treasonable:1,Barbour:2,Drums:4,typed:81,Transfers:4,complicates:20,curbs:4,FUTURES:4,Roughly:6,complicated:81,Veritrac:2,"pro-tem":1,GRANTING:8,Libertines:4,Avmark:2,"fortune-happy":1,"large-firm":1,initiate:182,aboard:245,"oil-futures":4,Owens:2,"managed-care":1,saving:5,"XA2000":2,Aloud:6,Vasilievitch:2,Funding:11,exaggerations:4,stifles:20,"sway-backed":1,Sabhavasu:2,Amici:64,stifled:32,oversimplified:14,decommissoned:1,plugugly:3,Mullaney:2,tombstones:4,Stileman:2,Herger:2,Meils:2,herds:4,specialists:4,adoptable:1,"Pentagon-related":1,nonsocialist:1,Economidis:2,unfit:3,Hubert:2,tortures:18,sockdologizing:8,"flat-footed":97,Procepe:2,Suggest:39,locations:4,Easterners:57,"gene-splicing":22,"cold-rolled":1,"wood-products":4,Rawleigh:2,SOARED:16,invite:95,Hastert:2,BREWS:20,Evadna:2,warriors:4,Alicia:2,Salzman:2,intends:20,portents:4,Hale:40,Kenworthy:2,Half:697,evened:17,Hall:11,Halo:2,creditably:6,imperatives:4,"High-end":1,Gilleland:2,Newcomers:4,Concessionaires:4,Allison:2,printed:45,knowingly:6,prayerfully:6,creditable:1,Mohasco:2,Chet:2,Lands:65,Cher:2,Ches:2,twirlingly:6,Ishida:2,Chez:2,Chex:2,Chef:2,Landa:2,phis:4,Granin:2,"summer-winter":1,Chen:2,redirected:54,Chem:2,Schilling:2,fascinated:81,"coupon-equivalent":1,Rheumatism:2,infuriate:39,APMS:2,Sky:11,Electronics:698,fecal:1,"sales-tax":22,Seigel:2,Piwen:2,aggressive:1,Ski:11,Meanings:4,equidistantly:6,Chips:111,betrothal:1,Leadership:47,Frenzy:2,Housing:11,Bianco:2,"gas-derived":1,hindmost:1,guarded:81,Assets:56,suitcases:4,tilting:8,"fraud-related":1,"two-round":1,simplistic:1,Nagymaros:2,"college-sports":152,awaiting:8,Machinist:2,"Plaintiffs``":133,Ryosuke:2,"Public-health":3,Asquith:2,whipped:112,Dismounting:8,multifiber:12,Cashion:2,morose:1,"cost-billing":1,"One-day":1,Toll:47,"hurricane-wracked":1,Juge:2,impressions:4,hastened:32,Clintonville:2,Weithas:2,intoxicating:1,"stock-appreciation-based":1,"agriculture-based":1,alarming:13,"low-speed":1,Jonas:2,"consumer-electronics":152,refreshed:103,Mitsubishi:113,Boondael:2,"business-services":1,planes:4,Conasupo:2,"bankruptcy-court":22,Gettinger:2,"pro-Iranian":1,"publicity-shy":1,McCauley:2,Vitarine:2,concentrated:81,busting:8,Automax:2,Bancario:2,"stop-and-start":1,Luxco:2,recitations:4,s:251,concentrates:72,loveliest:51,UMNO:2,Unsettling:1,"Sweet-sour":1,compels:20,"dark-skinned":1,Leavitt:2,Giordano:2,"Twenty-First":2,radicalized:17,Horton:2,Pepper:11,RESIGNED:16,"extra-high":1,"post-independence":1,stripped:81,ultracentrifugally:6,Berber:66,Briefer:2,relations:4,Sundarji:2,combatted:17,"no-trading":1,formed:45,Baykal:2,geothermal:1,"Industries-developed":2,Entertaining:2,former:3,runnin:8,outflows:4,"rock-like":1,Annandale:2,Commander:2,straighter:136,huckstering:8,Revamps:2,Copland:2,Flugleasing:2,parboiled:16,"non-vested":1,"U.S.-led":1,"all-round":1,Diaghileff:2,reviled:14,Nagoya:2,dubious:1,obtuse:1,electrogalvanized:7,Eliminate:39,serological:1,engages:699,debilitating:1,Govette:2,Replacing:8,theorized:16,"mean-square":1,legalistic:1,Lovejoy:2,Megdal:2,Landover:2,Whipple:2,UTA:2,"chain-store":1,deft:1,defy:42,Commissioner:2,UTL:1,edges:4,wired:54,bluntly:6,"healthy-looking":1,brasses:4,Spherical:1,Appropriately:6,Pork:11,tracking:55,Haupts:2,"Zero-Based":2,Otros:2,Primark:2,Port:2,"I.M.F.":2,steamed:54,recycles:20,disconcert:39,Crossfire:2,Conservative:129,divestitures:4,BOJ:2,Concerns:4,BOC:2,INVESTMENTS:28,"serious-minded":1,Boylston:2,uncap:39,Males:28,Bardagy:2,counterproposals:4,Malek:2,Lewala:2,overthrow:63,Malec:2,"Duke-EPA":1,Debates:4,gestured:16,"mosaic-like":1,Decreasing:8,world:163,colluded:16,apprehending:8,tremulous:1,SETTING:8,Nacht:64,unrepentant:1,"out-of-step":1,shutter:25,militate:39,Sludge:2,goosey:1,learning:55,Burchette:2,Engel:2,unshielded:17,demeaning:1,diving:5,divine:3,Brazilians:65,Prabang:2,refundable:1,semantically:6,"well-planned":1,restoring:55,SQUARE:2,"holiday-season":3,retains:20,"Tax-exempts":4,Lukens:2,Cawdron:2,"E.D.":2,majoring:8,"Private-sector":1,retraced:16,Tibbs:2,Magnatek:2,Puzzled:17,"local-exchange":1,Inisel:2,"five-cent":1,rabbinical:1,Paine:2,shapely:1,No:700,McMullin:2,Paini:2,Ne:2,unethically:6,Ng:2,Endangered:2,ineffable:1,Pains:4,conceptually:6,Sansone:2,Finley:2,"Gordon\\/Pick":2,NH:2,Tewfik:2,Bielas:2,Hultberg:2,NL:2,DnC:2,NO:701,lacquered:17,NB:2,NC:2,NE:2,deCordova:2,lounging:55,rumbles:72,mindless:1,Windahall:2,Maeterlinck:2,NS:2,NU:2,NV:2,NW:2,Hannover:2,Firebird:2,"N.":40,worsted:3,"Nations-monitored":1,Alternately:6,Tandy:59,foreheads:4,"Group\\/Business":2,Arkhipov:2,"jewelery-related":1,"liquid-drug":1,pull:95,rush:44,rehabilitations:4,hairpieces:4,Rodriguez:2,"Property\\":1,Beheading:8,"eight-count":1,Caution:25,Berndt:2,OGURA:2,rust:25,Porche:2,gratuitous:1,"DPX\\":2,Pathe:2,Sultanate:2,AZT:2,Humanity:11,Real:459,Sarawak:2,ideally:6,Taff:2,Read:445,"half-completed":1,COMPLETED:16,"T.D.":2,Rear:1,Theran:2,hydraulics:91,"anti-idiotypes":4,environing:8,Kildare:2,Khivrich:2,Rempsberger:2,"electronic-measuring":1,"Conn.-based":1,Comeau:2,Correlations:4,dyed:17,Hardware:11,Cardillo:2,Bias:2,Pitch:169,dyes:4,valves:4,"added-value":1,Fit:1,"population-control":1,Fix:39,landlocked:1,Fio:2,Fil:2,Schaefer:2,whitely:6,Rendell:2,Waterbury:2,"domestic-made":1,midwest:51,Zwiren:2,Capricorn:2,tombs:4,checkin:8,Mignott:2,Ancistrodon:2,"problem-solving":3,Nagin:2,"mind-numbing":1,rootless:1,"quasi-governmental":1,Maxtor:2,shenanigans:4,Anabaptists:65,"sixty-five-mile":1,small:1,USED:16,Peace:11,healed:54,past:702,Terminating:8,displays:18,pass:95,Reyes:2,McCarty:2,investment:22,quicken:39,fertilizations:4,clock:78,corked:1,colonists:4,subspaces:4,full:97,Critically:6,Bourses:2,Charlie:2,diapers:4,Digby:2,"a-Includes":20,Roeck:2,civilians:4,ventilated:112,"elementary-school":1,Justino:2,Justine:2,solvating:8,experience:24,anthropologists:4,"single-lot":1,countin:21,Mannesmann:11,faculties:4,"tax-free":1,followed:703,Richmond:11,Annisberg:2,Gigenza:2,literary:3,Conlow:2,enliven:33,Alsagoray:2,Wexler:2,Friedrichs:2,unrecognizable:1,Conlon:2,"tissue-transplant":1,Meana:2,Teknowledge:2,door:163,Flannagans:111,"anti-choice":1,"one-sided":1,tested:45,jealousies:4,Celica:2,nonviolent:1,doom:25,Agitato:2,Chad:2,anxieties:4,applelike:1,centrifugal:1,Bondi:2,Newitt:2,wimp:25,diabetic:3,generalists:4,memoirs:4,Varga:2,"Seventy-nine":1,concordant:1,sequins:4,respective:1,ANDERSEN:2,Vining:2,cosily:6,enlargd:17,enlarge:39,ONEIDA:2,Succeed:2,creeks:4,implicitly:6,sprinkle:182,lanky:1,Emil:2,"Closed-end":1,sympathize:149,"Bio-Trends":2,Medfield:2,mended:17,CATFISH:4,GOULD:2,Maccaquano:2,"low-margin":1,Silently:6,Statistically:6,waked:32,abrasives:4,Dobson:2,Senorita:2,Woonsocket:2,RTRSY:2,"expense-reducing":1,overcooked:17,Trailing:8,Bridgetown:2,replied:32,rocketed:32,Pinpoint:2,Nervous:1,Nishizuka:2,"wide-ranging":1,resorts:18,DKB:2,Fagenson:2,replies:72,"Chem-Con":2,smiling:5,roots:4,"state-run":1,Plenitude:2,Lizzie:2,revalued:17,Pualani:2,hounds:4,symptoms:4,plotters:4,shuddering:30,"one-color":1,"in-jokes":4,wined:16,Menfolk:4,focussed:54,unstated:1,dull:1,Elektronik:2,busied:16,Medlin:2,Banker:2,weeds:4,"Kennedy-wordsmith":2,"self-insured":7,Duy:2,Alastair:2,directionless:1,Benda:2,reactions:4,brunette:3,"Phoenix-based":66,scotched:16,advertisers:4,inquired:32,Nitto:2,Weldon:2,Mazzorana:2,denotes:20,Wackers:28,"slowly-mending":1,Stjernsward:2,denoted:54,mineworkers:4,"Prof.":2,warm:82,Builder:11,Brookland:2,abnormally:6,Cartoons:4,ATARI:2,Serious:66,McCain:2,bodyworkers:4,plowing:55,pairs:4,Panza:2,Fleischman:2,verandas:4,multihulled:17,existential:1,Economist:11,Reluctant:1,Fra:2,purport:33,Fri:2,despatched:16,brutally:6,Curtiss:2,Pareo:2,Fry:39,wardrobes:4,Personality:2,Byrne:2,Abramowitz:2,cradles:4,moderately:6,hallowed:1,"formula-based":1,bedridden:1,Clericis:2,cradled:17,justly:6,Illeman:2,Rolette:2,interviewed:54,gaiters:4,repurchases:4,FRANKFURT:2,Puette:2,Mademoiselle:2,Recounting:8,Kleiner:2,condolences:4,Eubanks:2,"fertility-control":1,charges:18,"family-oriented":1,navigators:4,Rosenblum:2,surrealist:1,Interwoven:1,waft:39,Achenbaum:2,Snuggle:2,Food:11,Brace:128,Orchester:2,Blackmun:2,Krogers:28,also:675,Haavelmo:2,Foot:11,"Chiat\\/Day\\/Mojo":2,CALLED:32,"counter-measures":4,departmental:1,Grais:2,PLUNGED:16,Lilly:305,balkanized:1,Eurofima:2,Grain:11,Grail:2,Friede:2,trills:4,ticketing:8,Haliburton:2,deviations:4,Capitol:11,"Anne-Marie":2,sometimes:6,barred:54,"self-financed":1,barren:1,Portfolio:11,barrel:25,Relatively:6,Nagorski:2,bulletin:25,"Anhalt-Bernburg":2,"American-built":1,Hal:2,Ham:2,Han:2,"H.T.":2,Had:493,bookings:4,Hay:11,Merciful:1,Hap:2,baneful:1,Has:109,Hat:2,"Pa.-based":1,Haw:106,access:25,Bulgarian:66,Cellar:2,Dunn:2,neophytes:4,Dauster:2,Dung:2,snobbish:1,calibers:4,"broker-dealers":4,atheistic:1,McLemore:2,Viande:2,Cowbird:2,sunny:1,trek:44,BACK:6,"non-insurance":3,plasters:4,Dimes:2,devoured:54,adapts:20,bytes:4,INCOME:47,approximations:4,Amalgamated:2,delicately:6,Glacier:2,Grolier:2,Fiori:2,overboard:6,Fiore:2,shower:44,"free-falling":1,unrealized:1,sulfurous:1,Cuomo:2,"Perkin-Elmer":2,AGREED:16,"Panama-incorporated":1,"Thatcher-style":1,Erikson:2,Hostile:1,AZTR:2,"bull-like":1,Tustin:2,untouched:1,Hollinger:2,Sewer:2,Shionogi:2,Non:64,last:162,"R-5th":1,"door-fronted":17,"eight-month-old":1,lash:95,McEnaney:2,acted:32,Oresteia:2,aforethought:3,sinuous:1,Greeniaus:2,"S.P.":2,Woonasquatucket:2,"Wyeth-Ayerst":2,Appointment:47,originators:4,lucrative:1,Automobile:11,"decades-old":1,patrolled:54,combatants:4,periwinkles:4,"ozone-safe":1,infect:39,Siecles:28,diffusely:6,Prompt:40,Michel:2,Icahns:2,exponential:1,Meinders:2,caged:17,Neste:2,expanded:45,empirical:1,Reverdy:2,presentational:1,cagey:1,Margins:123,cages:4,trinkets:4,Vizeversa:2,von:2,waivered:17,motors:4,"tell-tale":3,vos:64,"savings-and-loan":3,"tight-fisted":1,Disgusted:17,Keffer:2,"eventshah-leh":6,Wisner:2,"Gen-Probe":2,flooded:54,Entrepreneurs:4,"first-order":1,Pakistanis:28,Chorus:2,Heinze:2,Benetton:2,ringsiders:4,"guerrilla-held":1,Minns:2,Karp:2,Kary:2,delisting:21,honor:24,Kara:2,Names:57,Kare:2,Karo:2,Karl:40,dieting:21,Neodata:2,Unimpressed:1,crackled:16,Amtran:2,Milne:2,crackles:20,cuffs:4,"Non-cosmetic":1,"anti-intellectual":1,overcurious:1,resemblances:4,Lockman:2,Marino:2,Tackle:2,Marine:129,cordon:147,PROSPECTS:4,Multimedia:2,"poor-white-trash":1,emergency:22,McAlpine:2,Bellingham:2,abound:149,Lerman:2,Margery:2,Petrolane:2,marques:4,individuals:4,Wiesbaden:2,tribes:4,ExPe:2,velocities:4,methods:4,goddamn:704,necessaries:4,Bourse:87,methode:2,Norristown:2,Confidential:2,measurements:4,benefit:44,Nyack:2,Ravenswood:2,Heublein:2,SIERRA:2,"Deloitte-Touche":2,Antigone:2,inserting:8,chrysanthemums:4,obscures:20,"LATE-BREAKING":1,Congressmen:57,obscured:81,Havilland:2,Sugary:1,"bad-smelling":1,deserved:32,epochal:1,Quivar:2,Sugars:28,wrinkles:4,Levki:2,Prescience:2,excised:32,wrinkled:103,"torch-lit":1,"eight-person":1,"Globe-Democrat":2,Keizaikai:2,"Debt-Burdened":1,Zola:2,readable:1,Shay:2,prodigious:1,"Well-wishers":4,Altair:2,Balch:2,Shad:2,HFC:2,Shan:2,enthusiasms:4,Used:14,span:44,harnessed:17,"specialty-retail":1,Brunsdon:2,sock:25,Feds:28,prowling:8,spas:4,Sabras:4,Counties:111,considerably:6,"hot-cereals":4,Congresswoman:2,"data-storage":3,deductions:4,Keynotes:4,hyping:55,"Sha.":2,considerable:1,nonrecourse:1,fades:18,Afanasyev:2,inhumane:1,Dolphin:2,Elegant:2,preemptive:1,Yemelyanenko:2,"mortgage-securities":1,positivism:22,WWOR:2,Iguana:2,introjects:4,Sofia:2,Malkovich:2,unsafe:1,char:39,diverse:1,chat:24,surveying:537,Sierra:2,shiningly:6,Nast:2,Phillies:74,conceptions:4,hove:16,Arthurian:1,Gurion:2,Skelton:2,Smokey:2,Julius:2,Rutstein:2,"long-lasting":1,Nakasone:2,"BIA-COR":2,"Indiana-Ohio":2,land:24,lana:64,Gawdamighty:106,electroplated:17,Leipzig:11,Rheinstahl:2,Winnipesaukee:2,Radar:2,"Chicago-Helsinki":2,Secaucus:2,Jif:2,modernizing:55,dawning:55,toted:17,Jin:2,railbirds:4,broaden:42,Jim:2,broader:12,amiss:1,Pesticides:4,Biogen:2,Notice:169,Garson:2,Symptomatic:1,Youngest:705,rejoined:32,contours:4,expeditious:1,resources:4,"pinkish-white":1,quadruples:20,dissents:4,petitions:18,quadrupled:54,Wakes:2,harbor:44,ICCO:2,whooping:13,funneling:8,Sabbath:2,damning:8,JACUZZI:2,"world-class":1,"twice-yearly":1,Spending:21,Richelieu:2,Mathematically:6,Broadcasts:4,croon:39,Wellsley:2,"drought-related":1,Campaigne:2,Schmedel:2,Tauke:2,"industry-standard":1,henceforth:6,advantageously:6,"much-coveted":1,Freedom:11,Dupont:2,Dierker:2,Orfeo:2,TECHNOLOGY:11,"Greek-Americans":28,keddah:64,Trumbull:2,unwittingly:6,Zaporogian:2,KV:11,survey:44,thatt:127,NRLDA:2,"A.G.":2,steamers:4,Greenwich:2,INSTITUTE:2,Feuchtwanger:2,lymphocytic:1,dumbest:51,Paster:2,Kleinman:2,Maiorana:2,"virus-boosting":1,Lamberth:2,Mandresh:2,Cadwell:2,"L.T.":2,Wedding:47,binges:4,Suspected:14,nonpolitical:1,"By-Products":2,baby:235,Reactors:2,housebreakers:4,enzymatic:1,"attention...":102,"twenty-dollar":1,clients:4,Hideaki:2,"five-month":1,"back-dating":8,Offenses:4,hauls:18,FRAUDS:4,process:24,lock:50,loco:64,Hetman:2,Lender:2,"bond-underwriting":1,nears:72,uncompensated:1,engagingly:6,Agricole:2,"all-American":1,educational:1,Agricola:2,paled:706,Eldred:2,Millicent:2,procured:54,Nuggets:28,bilingual:1,hormones:4,Friends:92,pales:72,Nathan:2,"recorders.":4,summonses:4,"a-gracious":1,terrors:4,Retardation:2,"Brest-Silevniov":2,Gospel:2,Tinsman:2,"Owens-Ilinois":2,Marlowe:2,realized:85,regains:20,Sitco:2,Sanwa:2,"Oct.":11,"Moet-Hennessy":2,realizes:20,pungently:6,presuppose:33,"Good-by":106,"thrift-holding":1,holds:72,folksongs:4,mute:82,"roll-call":3,Committeeman:2,directs:20,"Campbell-Mithun":2,Ads:4,perfect:1,broiling:8,Scientific:40,Kodaks:28,varies:20,Brooks:2,Cabinet:11,meantime:163,thieves:4,Brooke:2,hijackers:4,morgen:64,vicariously:6,"Courter...":102,Hungry:1,astronomically:6,caucuses:4,realize:42,Purnick:2,"blown-up":17,autistic:1,ruefully:6,Caronia:2,Emmanuel:2,sneezed:32,electrically:6,"All-You-Can-Eat":2,Talmo:2,glasses:4,Friedmann:2,suitors:4,RIVALRIES:4,Organisation:2,bump:182,Aniseikonic:1,Chehel:2,Carbondale:2,Vermonters:28,Viren:2,fundamentally:6,Welborn:2,Bassis:28,"M.S.":2,bicameral:1,"anti-AIDS":1,Dirvin:2,unprepared:1,highs:4,Karene:2,"news-weeklies":4,Emery:2,Expecting:8,disintegrating:8,Dives:4,Passing:541,"once-a-month":1,dejeuners:64,mainland:22,transferable:1,Jesus:395,chilly:1,Manufactured:1,chills:18,"Aubr.":2,untested:1,whiners:4,Gosheim:2,"Fourth-of-July":2,Forecast:11,Coombs:2,Krispies:28,starker:12,NZI:2,Ries:2,Iraj:2,Iran:2,"cinder-block":1,Lengwin:2,Doosan:2,backdoor:1,SHAKE:39,Iraq:2,denominators:4,pervasive:1,Firearms:74,burglarized:17,laymen:4,pressurized:17,Barletta:2,recurrences:4,Waycross:2,Veryfine:2,Hastings:2,"seed-capital":1,egregious:1,"big-fee":1,gentile:22,Goupil:2,Parella:2,"student-test":1,"U.S.-supplied":1,"one-country":1,Bolingbroke:2,seethes:20,Finsbury:2,Jeeps:4,Rowe:2,ponders:20,dishes:18,prevayle:39,uncalled:1,Fluor:2,Gazinosu:2,"Bay-area":1,"Jeep\\":2,worldwide:97,Pierce:59,khan:64,Gumkowski:2,"essential...":102,Samaritan:2,"Ob-Irtysh":2,Fritzsche:2,petals:4,scabrous:1,Feliciano:2,"Clinico-pathologic":2,Gaskin:2,Reserve:2,"Bio-Dynamic":2,bleaker:12,Balsbaugh:2,"program-trading":3,perceiving:8,bartenders:4,woolworkers:4,Tender:47,Tussle:2,rainbows:4,woolly:1,"employee-benefit":3,"titian-haired":1,nominally:6,Pennington:2,Chromspun:2,Walton:2,bombings:4,Ultramar:2,jai:64,untellable:1,Nightline:11,Okies:2,Dryden:2,"WARNER-LAMBERT":2,"sports-related":1,Bonhoffer:2,symbols:4,determinants:4,wynne:39,BLAME:39,"lower-middle":1,rapped:32,exude:33,Brochures:4,strengthened:81,Heller:2,"tax-shelter":3,Pt:2,faier:6,differentials:4,Pa:2,Adoption:47,Pe:2,"glass-bottom":1,Pi:47,Po:2,PR:11,Consitutional:1,Rheims:2,insulting:13,Iwo:2,"self-taught":1,PX:2,Aloys:2,thermonuclear:1,"P\\":2,PC:47,PA:2,PF:2,Dyna:2,truncheons:4,Jackman:2,Vastly:6,perennials:4,"high-topped":1,Kitchen:11,Harty:2,Hartz:2,Hartt:2,Domesday:2,Kimbolton:2,FACES:20,"P.":11,"factory-jobs":4,Widowers:4,Istiqlal:2,perfidious:1,Clearwater:2,Cows:4,unearthing:8,Barbie:2,roughed:16,Gooding:2,Featherston:2,Bayou:2,Moderate:1,undergraduate:117,rougher:12,"CR103":2,"door-to-door":3,debs:4,Sophisticated:1,"DJS\\/Inverness":11,Istat:2,">":287,sheepish:1,valuations:4,swarmed:32,Tohmatsu:2,McKeown:2,Gossnab:2,Epiphany:2,shiftless:1,Sturges:2,purposively:6,BELEAGUERED:1,lecherous:1,"eraser-fitted":1,Number:47,Quiksilver:2,"U.S.-developed":1,Battle:11,deductible:1,fielding:21,Schopenhauer:2,stuffing:55,Likening:8,playgrounds:4,bioequivalent:1,Pipes:2,Piper:2,"until...":102,agonizes:20,Fuel:11,Adequate:1,merest:51,"H&M":2,"Nineteen-sixty":2,Donbas:2,complemented:16,Diplomatic:1,unsympathetic:1,sunshades:4,colts:4,Lai:2,audit:25,Joking:8,shotgun:22,patterns:4,Colombo:2,Artists:41,diversify:39,audio:3,"north-south":1,"bankruptcy-proceedings":4,"corporate-wide":1,Kekisheva:2,"well-financed":1,slitters:4,zotls:4,clocks:18,floes:4,BCI:2,web:22,Specthrie:2,wee:482,hauntingly:6,Contacted:17,wei:4,GTI:2,undulating:1,"fly-dotted":1,Taco:2,villagers:4,"PC9801LX5C":2,Garn:2,Ninomiya:2,Nipponese:1,biologists:4,archeological:1,Stalone:2,Spendthrift:2,tick:63,peeked:16,pies:4,DesRosiers:2,Sopsaisana:2,Pirates:74,"Ethel-Jane":2,DuPont:2,vistors:4,undid:16,flickering:8,"now-notorious":1,teratologies:4,FIRM:47,breakables:4,Ladenburg:2,actuarial:1,Rojo:2,immortal:1,"VO5":2,scatters:20,choosing:55,flush:162,Hutchison:2,Meridian:2,"Christmas-time":1,contested:81,"B.C.":707,"just-in-time":1,Recurring:8,mementos:4,sayonara:64,Elshtain:2,"e-Estimated":17,Gruntal:2,nonsmokers:4,"freeze-out":3,Hemweg:2,pressure:44,wields:20,SABLE:2,"Christian-Democratic":2,infiltrating:8,SPECIALIZED:1,coldly:6,illegalities:4,VOA:2,outshines:20,Viruses:4,Trinkaus:2,Diery:2,documentary:22,Margeotes:113,Glazier:2,Greenville:2,Schreyer:2,Sofitel:2,Mood:2,Sacremento:2,riflemen:4,indoctrinated:17,boites:4,bagged:187,Balafrej:2,yarns:4,stonelike:1,Contract:11,Winzer:2,Cooke:2,"one-week-old":1,"nation-wide":1,places:18,"Marxist-leaning":2,placed:54,gloated:16,"Bank-Texas":2,Executive:11,Berkshire:2,nurses:4,"is...":102,Cassa:2,hearers:4,reciprocates:20,Darwin:2,nursed:16,effected:54,"CFM56-56s":4,Fate:11,deadly:97,Critic:2,lately:6,Fats:113,compares:72,behold:39,"Well-intentioned":1,February:2,repeat:551,Inheriting:8,Ineffective:1,multinationals:4,repeal:25,turboprops:4,searches:18,"Odd-year":1,misconstructions:4,perpendicularly:6,searched:32,gardens:18,"c-Excludes":39,Deauville:2,Ericson:2,Lippmann:2,NYU:2,McClure:2,BOTTLED:17,Berkshires:113,rekindle:39,nervously:6,Mondry:2,Ruhnau:2,"stomach-churning":1,Babbitt:2,Sanraku:2,Tokyu:2,manhandled:17,sexualized:1,STRIP:39,Guerneville:2,militantly:6,Dignity:11,amorous:1,"two-inches":4,Enterprise:144,Musique:2,Military:40,"money-fed":1,succumbing:8,"three-month-old":1,Yearly:40,Stringing:8,exaggerate:42,compassionately:6,"Mutual-fund":3,harrowed:17,"Merleau-Ponty":2,notifying:8,miuchi:64,abolishing:8,MANEUVERS:4,Whoopee:235,Killory:2,ATLANTIC:2,Schachter:2,"Dodd-type":2,Moos:2,"Y-MP8-232":2,Avery:2,"beer-cooling":8,Game:47,unfelt:1,personifies:20,Chairperson:2,multifamily:97,Gorman:2,residual:3,redeploy:39,personified:54,"cold-cereal":1,Nonresidential:1,KKR:2,"issues...":102,KKK:2,Spruce:2,postponed:81,Riklis:2,shrimpers:4,cloistered:1,inflicting:8,Lampoon:2,"now-scuttled":1,socioeconomic:1,Crisco:2,plot:44,Seymour:2,coins:4,bundles:4,"value-orientations":4,plod:39,"week-one":1,galbula:64,bundled:17,abusing:8,Breeden:2,toppling:8,wavy:1,Directorate:11,Chronicles:113,separates:20,Breeder:2,blocking:5,Swept:17,Headed:17,"U.S.-German":1,"still...":102,"total-cost":1,Substantial:1,Initiative:2,Madrid:2,Afield:2,Sammi:2,"one-arm":1,Montenegrin:2,indicated:85,flunk:33,flung:32,Ralph:2,agriculturally:6,impair:63,indicates:20,wholesaling:55,Honeywell:2,befuddling:30,"university-funded":1,"six-figure":1,inhabitants:4,"US-Travel":2,vehicular:1,"isolation...":102,recovers:20,"co-wrote":16,Hindemith:47,"hundred-yen":1,evolutionists:4,Cryptic:1,arcs:4,pollinating:8,customs:4,"run-of-the-mine":1,arch:78,foundering:30,complacent:1,elusive:1,alienate:39,appreciate:42,Delegation:2,rogue:1,Fannie:2,Globocnik:2,derided:32,"droopy-eyed":1,Hackel:2,priming:55,FARMERS:4,Eward:2,Drew:708,Dioxins:4,Orthodontic:1,Argentinian:1,Banda:2,Dred:2,"well-connected":1,choicest:51,Consequences:4,jerking:8,safe:3,squadrons:4,sack:25,"coal-like":1,lifelong:1,Candela:2,"Sunday-school":1,"Twenty-six":1,eventualities:4,Saunders:2,Beairsto:2,l:19,"store-name":1,dingy:1,Lapides:2,flyers:4,Substituting:8,"soon-to-be-sold":1,"financial-crimes":4,Budapest:192,"publishing-group":1,"I-5":2,maniacs:4,"contracted-for":1,Clerk:2,"living-benefits":1,Oneok:2,Downtown:47,Cereal:47,engrave:39,Meyer:2,Trivest:2,commerical:1,colorless:1,Galloway:2,leftovers:4,Ahah:106,Sardanapalus:2,dashing:30,detecting:55,Hirudo:64,"bobbin-to-cone":1,"either-or":1,Correctional:2,"I-E":2,"Big-bucks":1,Metric:2,Perken:2,AMERICAN:2,footsteps:4,"newly-plowed":1,"high-interestrate":1,champs:4,"once-faltering":1,Bobbsey:2,synonymous:1,doling:8,disembark:33,electronic:1,Suchocki:2,Portia:2,pardonable:1,explosives:4,approximately:218,"Exchange-sponsored":1,Kenzo:2,chanted:32,Markham:2,Dodington:2,wastes:18,Mankiewicz:2,"hard-currency":22,fluently:6,wasted:45,Rosenstein:2,Backup:1,Masahiko:2,policymaking:1,ColoradoUte:2,askance:6,CENTRUST:2,Arteries:19,"Un-American":2,temporize:39,portraits:4,Cray:2,Crab:2,Maestro:11,Mazowiecki:2,Oshkosh:2,Kadonada:2,Eurocrats:123,fraternized:16,Victorians:57,"off-shore":1,Gallery:11,Flashdance:11,maquiladoras:296,culminated:32,disembarking:8,unsurmountable:1,Artist:11,germane:1,Lucy:2,assesses:20,Luce:2,Columnist:2,culminates:20,scripts:4,assessed:54,Luci:2,grave:3,Luck:11,topple:39,conjures:20,Arshinkoff:2,"heartstring-plucking":1,Elanco:2,"non-gasoline":1,PAP:2,Ridge:2,PAY:25,Ripples:4,PAC:11,disturbs:20,Katsuya:2,papillary:1,spuds:4,intergovernmental:1,PAN:2,Santiago:2,panned:54,Stravinsky:2,throttling:8,gutsy:1,Englishmen:123,marketings:4,Ostrander:2,Ranney:2,rotated:54,Herzlinger:2,"Board-listed":1,Gauchos:4,vividly:6,Loud:66,Ageny:2,stalwarts:4,tartly:6,overrule:39,Observing:8,Marckesano:2,Agent:2,LaSalle:2,Maurits:2,scrubbed:54,Gorbachev:2,Atwells:2,electrostatic:1,Lascar:2,optimum:3,Malawi:2,techniques:4,"BVI-based":1,"intermediate-term":1,away:709,Bricker:2,Repeated:14,bracing:55,arcane:1,"increase-results":4,Decide:39,Schweizerische:2,Philosophic:1,superstores:4,shields:4,disavowed:16,Pfiefer:2,Rede:2,Shaped:1,Shapes:4,travellers:4,Slutsky:2,Cupertino:2,abstracts:4,Offer:95,"red-blooded":1,fermentation:3,MOB:2,Abie:2,disappears:20,"publicity-seeking":1,McCammon:2,Odell:2,"Drive-in":2,whistles:4,unchangedat:1,Katangan:1,mutations:4,TransmancheLink:2,Ireland:2,Universe:11,telecommunications:710,alia:64,Kerry:2,noes:4,"German-built":1,Heinzes:28,Dedication:47,Surely:6,oleanders:4,Schweppes:2,Raphaels:4,innoculated:17,superpowers:4,Kneale:2,attacked:54,"disaster-assistance":1,Eschewing:8,Casbah:2,collects:20,clairvoyant:1,Broward:2,Rufus:2,gracious:1,Heinz:2,"ex-presidents":4,orthorhombic:1,Lvovna:2,Hoot:2,Hook:2,"over-the-air":1,Ascii:2,Saloojee:2,Hood:11,cons:4,cont:17,Athens:2,"Snug-Grip":2,Convention:11,diagnostic:3,Athena:2,canvases:4,Bacardi:2,"one-room":1,Stop:260,adjectives:4,PAYMENTS:4,"family-entertainment":1,synce:127,Dines:2,Cedvet:2,hang:711,counterparts:4,Cadesi:2,liberties:4,Machiavelli:2,Salvation:11,Cirrus:2,Lepercq:2,Broiled:17,Bricklayers:28,Subcommittee:11,musical:3,pronouncements:4,"ultra-liberal":1,"four-member":1,traditions:4,Konopnicki:2,Cambodia:2,Enquirer:2,Ballistic:2,Negmegan:2,Albacore:2,Koito:2,electronically:6,"single-lane":1,Paata:2,tramples:20,Taxing:8,shout:95,righteous:1,"Odd-lot":1,insensitive:1,Restaurant:11,unmolested:1,unfounded:1,cantilevers:4,Fresno:11,cooler:515,Certain:66,immunosuppressive:1,homing:13,"computer-chip":22,Clerfayt:2,swingin:21,songful:1,Pinick:2,flatter:39,Inez:2,born:17,couture:64,hassle:25,flatten:39,pugnacious:1,bore:712,confusing:13,congratulate:149,matriculate:39,Booby:1,"deep-space":1,"house-painting":1,Cullinet:2,"Ohio-based":1,Karacan:2,asking:5,adorable:1,Gray:2,"field-crop-seeds":1,Meetings:4,peel:39,"earlier-than-expected":1,Medicale:2,Gras:2,Neal:2,peed:17,procure:39,Mementoes:4,Near:713,Neas:2,Mescalero:2,Gram:66,Asserts:20,peer:714,Grab:63,Grad:2,Graf:2,Junkholders:4,secretively:6,breaded:17,zooming:8,shared:81,vats:4,crouch:25,mailroom:22,Abdullah:2,Caja:2,Enemy:47,versions:4,Negroid:1,stumble:95,Pendergast:2,familiarize:39,connote:42,Managerial:1,Matanky:2,malformations:4,Schlang:2,"Money-making":1,needled:16,Halda:2,ceded:32,disembarked:16,observances:4,needles:4,Romanesque:1,Greville:2,Distinguished:2,"Catholic-Jewish":1,"bottom-living":1,Pritikin:2,maximum:3,apostles:4,coverings:4,faking:8,"all-Copland":1,prayed:32,hotlines:4,guesses:18,Manners:113,"boutique-lined":1,Cabot:2,guessed:32,Hillsboro:2,commences:20,Stuecker:2,"pressure...":102,Kabalevsky:2,Namely:6,senatorial:1,Falls:715,"Eighty-Four":2,Competent:1,Falla:2,enthuses:20,mulling:55,"labor-based":1,update:95,Trial:47,Stolzman:2,Triad:2,Harpers:2,Montgolfier:2,"mid-to-high":1,"snob-clannish":1,alertly:6,"paper-littered":1,Jess:2,Bertha:2,Blasphemers:4,grokked:32,tribunals:4,"Moines-based":1,"long-cruise":1,"million-dollar-plus":1,supplement:24,synapses:4,"p.m.":163,"Non-money":1,layers:4,contributing:30,Burl:2,visualizes:20,Buri:2,Auberge:2,Burk:2,Burt:11,dissatisfied:7,Burr:2,Bury:59,"So-called":66,Princes:65,Bekaa:2,Elaine:2,Artistic:1,airing:55,Cyrus:2,Christrian:2,unformed:1,visualized:32,Mencius:2,flammable:1,Bumbry:2,Mateo:2,Episcopal:40,Mater:2,Onleh:6,evades:20,biscotti:4,Kelman:2,plutocrats:4,verifiable:1,Feinman:2,Mevacor:2,agitate:33,cost:181,Maxhuette:2,Instant:66,Pretax:117,Salish:2,Lucite:2,"OK.":106,typesetters:4,thicker:299,fastigheter:64,"non-earning":1,Representing:8,cynically:6,"Five-Year":2,housebroken:1,"foreign-debt":22,socioeconomically:6,CUNA:2,"Near-Term":6,lolling:8,Corroborating:8,Breakey:2,"crash-wary":1,lustrous:1,Distribution:11,Corvette:2,"Israeli-occupied":1,"military-medical":1,bangs:18,Quakers:57,OKI:2,"York-SF":2,Dowager:2,"perhaps-decisive":1,CALFED:2,Bizerte:2,"Atlanta-Chicago":2,losing:5,"oil-services":1,"steam-generation":1,Lawmakers:57,"most-actives":51,Scopes:2,Customers:123,"higher-education":716,Dies:511,Diet:2,Dieu:64,wonderfully:6,"T.M.B.":2,Diem:2,symbolized:32,Died:717,intently:6,Amber:2,Watchers:111,"union-sponsored":1,Canelo:2,UFOs:4,"twenty-fifth":1,Sneaker:2,decked:17,fortified:45,purge:25,Awakening:2,HDTVs:4,Rondanini:2,totalled:32,Throughout:127,"mild-mannered":1,Sweeneys:111,fracturing:8,Showa:2,Pizzo:2,"word-processing":19,MEDUSA:2,"Warner-Lambert":2,occur:42,Pizza:2,Bishun:2,Brightman:2,giveaways:4,lounge:25,unrealistically:6,etymological:1,Burden:2,"jiu-jitsu":64,ROTC:2,Ensrud:2,strays:4,sedately:6,dampened:32,Heineken:2,ornery:1,disgusted:14,Skopbank:2,produce:95,Martin:2,Model:47,epaulets:4,"pre-festival":1,noses:4,wanderings:4,Isselbacher:2,nosed:16,Synar:2,"half-reformed":1,Manley:2,Sheep:443,Sheer:40,Industrials:130,Sheet:2,Biochemistry:2,freckles:4,raised:45,Tanin:64,Re:11,Pergolesi:2,Cassell:2,Industriale:2,affirms:20,Industriali:2,ENTERED:16,Bolivia:2,Rh:2,Sheen:2,RU:2,Enserch:2,incendiaries:4,"top-10":1,DELIGHT:33,resettling:8,supernaturalism:22,RA:2,"a.k.a":1,factual:1,emigrants:4,non:145,nod:44,Faber:2,introduce:42,Eureka:2,unplanned:1,not:6,"R.":2,now:718,nor:119,Stakes:113,Flygplanet:2,thankful:1,Geoffrie:2,"concerned``":133,cannibalistic:1,Skim:1,fishmongers:4,Agricultural:40,Skid:376,unloaded:81,consummated:54,Raiff:2,Ordinance:2,Engisch:2,Legal:40,wrap:182,polices:4,VIETNAM:2,Passed:17,Garth:2,Expected:231,naming:55,tried:85,Janlori:2,rude:1,bullish:1,parceled:17,furthermore:6,Vasa:2,Ephesus:11,"spaniel-like":1,Dearly:6,Vass:2,moldings:4,Constants:4,Arrested:17,Yen:2,"gum-chewing":1,Hemant:2,Constitutions:4,Macomber:2,"right-to-life":1,Jeffery:2,Kroger:2,Leyva:2,Harbour:2,"Fifty-ninth":2,blind:719,Verret:2,"light-water":1,Sprague:2,Soto:2,Simmel:2,Pandelli:2,blink:63,Till:127,Simmer:39,Expressing:8,ring:44,"six-hour":1,"national-service":3,Freston:2,"stock-pickers":4,Trygve:2,remotely:6,Lieutenant:11,suvivors:4,"gloom-and-doom":1,Response:11,authorized:212,larks:4,Feuer:2,sores:4,appreciates:20,repossess:39,Refining:11,Sovietskaya:2,"vocal\\":1,heretical:1,appreciated:45,titans:4,underwritten:185,relocating:8,Creator:11,Fegersheim:2,recruit:95,Scientifique:2,aerials:4,vocals:4,impinge:42,profuse:1,Saigon:11,overdosing:8,Accumaster:2,APPROVES:20,Chantilly:2,Shanken:2,"minivans.":4,Shanker:2,CALIFORNIA:2,Danville:2,Numeral:2,Faulkner:2,APPROVED:16,Commune:2,Giolito:2,"lesser-developed-country":1,Delegates:41,Wimsatt:2,Broun:2,"Time-Olivette":2,mendicant:1,polygynous:1,"Salerno-Sonnenberg":2,Unconfirmed:1,"spring-back":1,Off:720,Unlike:127,Nagel:2,neatly:6,"sports-and-entertainment":1,Kauffeld:2,Reprinted:17,"customer-service":3,attempting:8,steady:97,unconquerable:1,"Asian-owned":1,Cossack:2,Scrum:2,podiums:4,"book-lined":1,Horse:11,discovered:81,Chandross:2,"rate-watchers":4,Oversight:2,Sophocles:2,Dasher:2,Worse:721,Wichterle:2,"soup-to-nuts":1,ALCEE:2,staid:7,Worst:380,Solidarityled:2,stain:25,"cash-starved":1,shrill:1,interstate:3,Luther:2,"Pepsi-Cola":2,"dervish-like":1,vocalic:1,Hartsfield:2,REQUIRED:2,reprints:18,Gottschalk:2,"Ba-1":3,"Ba-2":10,Hambric:2,"Hall-Mills":2,"color-coding":8,Benzedrine:2,actively:6,charcoaled:17,recalcitrant:1,Byler:2,reproduced:54,suspects:72,"January-June":1,glaze:44,rollicking:1,"cotton-growing":1,Christiev:2,Renoir:40,overcerebral:1,Productions:111,Christies:2,import:44,"all-cargo":1,therapies:4,orchestrate:39,Wert:2,ENGRAPH:2,Hollingsworth:2,exhortations:4,"App.":2,"regulation-writing":1,"non-white":1,Team:11,moans:20,Konishi:2,duces:64,resides:20,resided:32,Scripps:2,impediments:4,sulky:3,Krishnaswami:2,jeans:4,Sachs:2,sulks:4,Interested:14,merriest:51,muttered:16,scrimping:8,hillsides:4,Personal:66,Doctors:57,Matsuda:2,impugn:39,disclosing:8,substations:4,Purification:47,suspected:45,Mangano:2,Pertamina:2,scarfing:8,Stimulating:8,myofibrillae:4,reimburseable:1,DeHaviland:2,Sportsman:2,blinkers:4,lire:504,Volzhsky:2,"fume-filled":1,"near-monopolies":4,implacable:1,Garin:2,"bid-to-cover":3,Cumberland:2,contrarians:4,sawdust:22,Dietzer:2,Hirano:2,raptures:4,"May\\":2,Mailer:2,"eight-page-a-minute":1,"ONE-DAY":1,"O.E.C.D.":2,pillowcases:4,Illick:2,"week-to-week":1,aground:6,Funari:2,foam:44,"boom-and-bust":1,Wragge:2,Businessmen:4,"CBS-Turner":2,Launched:17,Budweiser:2,"in-group":3,"space-defense":1,DeSoto:11,congressmen:4,alleviate:42,uninjured:1,"music-hall":3,SDI:2,"co-conspirators":4,Swaine:2,glitterati:4,SwedBank:2,Framatome:2,Might:190,cliffhanging:8,renewed:45,Solano:2,Showing:8,overruling:8,swim:95,psi:4,laundering:21,stunk:16,onscreen:6,Herter:2,Starts:72,gonne:17,Oersted:2,gonna:8,ramshackle:1,Mutchin:2,Soybeans:57,"rat-holes":4,"Near-term":1,Executions:4,feckless:1,BioSciences:74,Interruptions:4,apartments:4,envoys:4,semiannual:1,nucleic:1,Lederberg:2,"iron-casting":1,unlocked:112,Earlier:286,"Right-wing":1,Grippo:2,"passive-loss":1,indestructible:1,assemble:42,sadder:12,"iron-rod":1,creaking:55,casuals:4,closedowns:4,Lancret:2,conceals:20,LTCB:2,freeing:55,Kamemura:2,stare:644,Khustndinov:2,shags:20,Horwitz:2,stark:97,start:722,"public-school":3,stars:18,Zaffuto:2,allergic:1,"F-14s":4,smuggling:55,delayed:81,"Nineteenth-century":1,intermissions:4,manipulative:1,"two-thirds":723,machinelike:1,Dees:2,Original:40,traveled:85,"lock-outs":4,Xidex:2,"big-league":1,Secilia:2,Lightweight:1,"world-shattering":1,intents:4,Judah:2,"coral-colored":1,Granite:2,Ferdinand:2,Judas:2,evens:20,"Nos.":4,Cutter:2,Lante:2,Annex:2,Chun:2,appraising:8,trample:39,terminating:8,"general-staff":3,"Swedish-Swiss":66,Madeira:2,Lantz:2,forcing:8,ineligible:1,Entre:2,Minsk:2,Nations:724,"re-thought":1,dabble:39,Amish:40,Caliphobia:2,roasters:4,"plastic-bodied":1,moonlight:25,stockpile:25,"York-Moscow":2,prying:13,Letting:8,Nerien:2,semantic:1,Compression:47,"W.L.":2,bookers:4,Renaissance:11,"ultra-high-speed":1,pledged:32,"first-run":1,uncollaborated:1,insulate:42,pledges:18,Hillyard:2,resounding:1,Steidtmann:2,Crabtree:2,Buffets:4,DeBakey:2,STOPPED:17,"information-systems":152,begot:16,antagonised:17,"just-ended":1,ceaseless:1,Canary:2,Canard:2,throbbing:55,Lipowa:2,Krapels:2,Boatyards:4,"gut-wrenching":1,"dual-ladder":1,Simonson:2,Nuns:28,Readerman:2,enjoin:39,befriends:20,"foreign-stock":1,envisions:20,chuckle:44,ails:18,Kroll:2,investing:695,"sun-bleached":1,Paribas:46,Affirmatively:6,learned:626,Bartholf:2,Craving:8,Bioline:2,ferocious:1,Ifo:2,gridlocked:14,tracks:72,"fourth-generation":1,Nahas:2,eventful:1,carpetbaggers:4,losses:4,dykes:4,Interprovincial:2,TransNet:2,Gurtz:2,sealing:21,Joan:2,Joao:2,inflected:14,Castaneda:2,"SP-44002":725,requiring:8,"SP-44001":725,"SP-44006":725,Emmies:28,"SP-44005":725,"revenue-losing":1,"tender-offer":1,Jingsheng:2,Fines:2,Prothro:2,implanted:54,conventional:1,heartened:17,Chenoweth:2,Entenmann:2,Warden:2,Houk:2,"Neo-Classicism":2,lineups:4,conformational:1,Limits:111,fusses:20,grimly:6,outpatient:22,"two-time-losers":1,Perritt:2,"Three-month":1,"Technical-chart":1,DiLoreto:2,grill:44,Afterwards:6,drearier:68,"high-net-worth":1,"Hardwicke-Etter":2,Martian:40,"twenty-year":1,"defense-industry":3,"brain-wave":1,Publick:2,Tierney:2,Caspar:2,Coolidge:2,rejuvenate:39,Pileggi:2,"well-behaved":1,"spectator-type":1,Opening:55,utilize:42,unlucky:1,shrouds:20,"Pre-College":2,Bevo:2,Gabelman:2,Thielsch:2,diffuses:20,Darkling:2,Television:11,Reciprocal:2,Boehmer:2,maladjustments:4,CoreStates:74,Emirates:111,"non-romantic":1,Viacom:2,horizontal:3,misnamed:17,Ameron:2,MBI:2,"wind-swept":1,Flies:4,Mexico:2,UDC:2,Poster:2,Myrtle:2,McCaskill:2,remnants:4,Serenissimus:2,Midler:2,thermal:1,Weedon:2,"gray-haired":1,Petrochemical:2,wishful:1,Platonica:64,Phelan:11,territorial:3,Hypothesizing:8,systems:4,founders:4,Chong:2,Inada:2,"food-safety":3,Fearful:1,tumbles:72,electives:4,Siberian:1,Doron:2,permissible:3,Makato:2,watchdog:22,predators:4,purpling:8,lifestyles:4,predatory:1,barrels:4,ATTORNEY:2,Afghans:28,"Yuk-sui":2,Stockhausen:2,jaws:4,exasperated:1,Lapps:28,ALLWASTE:2,punitive:1,deride:33,Guillaume:2,nonvirulent:1,TESTS:4,Farina:2,splattered:17,Nikons:28,testify:42,Ainslie:2,coincidences:4,safety:25,inactivated:32,"Prudential-Bache":2,mittens:4,counterrevolutionary:3,None:47,"spelling-only":1,housed:54,favored:45,PROPOSALS:4,preventatives:4,houses:18,unsightly:1,brightest:51,overshadowing:8,unresolved:1,BL:2,"Fill-Or-Kill":2,millenarians:4,"racial-preference":22,ACTING:1,uncertainly:6,"Uniroyal-Goodrich":2,"pro-Socialist":1,Handel:2,decapitalize:33,"E.T.":2,Mennonites:28,incubated:17,warty:1,Bharat:2,warts:4,Autos:4,Brailsford:2,Youngsters:4,Ponoluu:2,Zombie:2,seafaring:1,Cynewulf:2,Emancipation:2,"South-Asian":2,APPB:2,quivered:16,Molotov:2,Fries:2,Purloined:2,consonant:3,Fried:2,tapestries:4,classifiers:4,Buffetts:111,gret:1,grew:32,Valleyfair:2,"Korn\\/Ferry":2,grey:3,"non-newspaper":1,Krystallographie:2,Cecil:2,Cecin:2,Bowker:2,Poulenc:2,LINCOLN:2,Peng:2,perestroika:147,Fortney:2,Penn:2,blissful:1,null:3,Penh:2,Fleeting:1,cave:25,Sheboygan:2,AjA:2,AjB:2,"options-related":1,"six-story":1,Lightfoot:2,aired:54,hires:72,Sewickley:2,multilingual:1,Anthropologists:4,bettered:16,Kisscorni:2,hired:81,reawaken:39,"Aj.":2,Iosola:2,Adamson:2,Crum:2,Satis:2,"direct-investment":1,raving:30,sturdy:1,Viewer:11,bedfast:1,Sayles:2,tongs:4,"part-time":97,electrons:4,Callahan:2,unwed:1,tubes:4,naively:6,Viewed:17,"one-eighth":22,Pythagoreans:28,"seven-hit":1,velvety:1,ringers:4,albums:4,distressing:1,Dorens:2,Redmond:2,Multiphastic:2,"get...":102,Dorena:2,Caravaggio:2,Norment:2,financing:122,Intercollegiate:2,Tillotson:2,"Gas-cooled":1,Eaton:2,"tear-jerkers":4,pretending:8,caseloads:4,remarketings:4,Maxima:2,"Nev.":2,"co-operate":25,Auntie:2,adhering:8,stored:54,Stott:2,"after-hours":726,buyings:4,Guides:56,andrenas:28,"management-consulting":1,Centronics:2,Schillinger:2,"hell-bound":1,Emma:2,termites:4,colonialists:4,"life-supporting":1,Messinger:2,pictures:18,Depletions:4,"round-bottom":1,pictured:54,perversities:4,Isabella:11,Butterworth:2,Isabelle:2,lange:64,Ohioan:2,spray:25,Zamiatin:2,"half-hearted":1,Tuskegee:2,"B.C.-based":1,Anchisi:2,kneeled:16,commoditize:39,Kochis:2,cashing:8,Disciplinary:2,Steve:2,Merits:4,forgotten:14,vault:25,experimental:1,Spacenet:2,"Irish-made":1,expendable:1,unfolded:32,recommending:8,Educator:2,"mist-like":1,"employee-ownership":3,"Grand-Clement":2,Bethel:2,Bethea:2,wifely:1,Coble:2,"ever-faster":1,Gingrich:2,Czechoslovaks:28,lived:345,Ballard:2,Angenics:2,Flashed:17,Broadcasting:321,Buchbinder:2,Pick:216,"safety-sensitive":1,Sumner:2,lutihaw:64,intriguing:13,Sotun:2,Garner:2,Agency:11,pace:44,smart:34,Lemanowicz:2,Renfro:2,comrades:4,mailrooms:4,guide:24,pack:44,smacked:16,costly:97,funded:45,wagering:21,Racism:47,"ground-glass":1,Slash:39,Eagles:74,payers:4,Esther:2,mulitiplier:1,Murdoch:2,Extraordinary:1,fabulations:4,energizing:8,Phyllis:2,Gaulle:2,impious:1,superfast:1,ratings:4,Scenes:4,Movies:113,"computer-controlled":1,Lagnado:2,multisided:1,Berlaymont:2,Oswego:2,NewsHour:2,"double-stage":1,"canned-mushroom":1,Grafton:2,romanticize:39,Living:727,exploits:18,powering:8,Cavallo:2,shivering:55,Cavalli:2,Tyler:2,Usery:2,RoadRailers:28,disseminate:39,Benzinger:2,excavators:4,Commodore:2,Krys:2,Visigoths:28,useless:1,brushed:112,Rimmer:2,Graphic:2,Dowty:2,Demodocus:2,"well-populated":1,wonderbars:4,"notched-stick":1,Hockaday:2,"M.B.A.s":41,Madeleine:2,diuretics:4,"debt-induced":1,vests:4,excluding:8,envisioned:32,Keynesian:1,Auxiliaries:111,Cogan:2,popular:1,Dunaway:2,Sarpsis:2,cones:4,Hyman:2,Unitrode:2,economic:1,Midwestern:10,Jesuits:28,AMs:4,Difficult:1,AMI:2,Grossinger:2,Dooling:2,SPRUCING:8,AMA:2,spouting:8,AMC:2,AMF:2,Tennessean:2,AMP:2,AMR:2,AMT:2,MassMutual:2,Epistles:28,Bila:2,anecdotes:4,Bill:11,equipotent:1,MacMillan:2,negatives:4,Homeric:40,Decliners:4,smothered:112,SCANDALS:4,Nouveaux:2,turret:22,Distant:1,Looks:20,"high-heeled":1,geosciences:4,Looky:39,Baron:2,hounding:8,Beauchamps:28,alpha:3,Discovering:8,RoadRailing:8,Gershwin:2,Boulder:2,supplicating:8,Diversey:2,approved:112,Nadine:2,spawning:8,eons:4,Tonal:1,"done-and":119,janitors:4,Tosca:2,Littell:2,shouldered:32,Tosco:2,Metatrace:2,Woodward:305,vacancies:4,Schnuck:2,Saadi:2,preparative:1,"Buber-think":728,Wylie:2,Blackmer:2,"reverse-reverse":1,Tu:2,Aviv:2,To:729,Barshop:2,Avis:2,Ti:2,"three-to-five-year":1,evocative:1,surmise:39,Cardizem:2,"Spanish-language":10,goddamit:106,TV:47,TW:2,TR:2,Default:2,TI:2,Versicherung:2,TD:2,TC:2,TA:2,Customer:47,venerable:3,"laboratory-supply":1,"T8":2,Pounds:4,Median:1,Crippling:66,"T.":144,Woodcliff:2,"labels.":4,Amazonian:1,Minutemen:28,Sparrows:2,earphones:4,e:47,Uzi:2,complicating:8,"animal-rights":93,Donations:4,underrated:17,imprecise:1,Yalobusha:2,Westburne:2,Boccone:2,OST:2,Barsuki:2,bioTechnology:2,"wall-paneling":1,Clasping:8,Scheduled:17,Biddle:2,commas:4,"sales-conscious":1,"J/NNP.A.":25,"optical-scanning":1,"re-establishing":30,Rekindled:17,Schedules:4,Sulphur:47,friendly:1,Stress:47,Penrose:2,wave:44,Risks:4,rattling:55,Deukmejian:2,Camry:2,Korbich:2,Acquisition:11,Risky:2,Charlotte:2,Hewett:2,Sago:2,compassionate:1,"near-synonyms":4,"self-starting":1,Tyco:2,Tuesdays:28,rationalizing:8,Index:11,Laughlin:2,Magnificent:1,SEAQ:2,Cameras:4,SEAT:2,redone:3,"pre-literate":1,Camera:11,muffs:4,parimutuels:4,sultans:4,Ishiguro:2,Raton:2,Disadvantages:4,pitilessly:6,Disadvantaged:2,Kristin:2,"Coors-Stroh":2,Copiague:2,"long-handled":1,Publisher:11,Locked:17,Airman:2,Blanched:17,Popes:28,Locker:2,Published:17,enterprising:1,Rosalco:2,"AZT-treated":1,convert:95,fAs:2,villages:4,Tells:20,Theodore:2,Greenleaf:2,comminge:8,Soapy:1,"diaper-changing":1,frictional:1,Grunfeld:2,Blake:2,Doctor:11,rakishly:6,Contributing:8,Enskilda:2,infest:39,"well-polished":1,handfuls:4,enterprisingly:6,Fields:46,Rapanelli:2,traditionalized:17,Disputes:2,devotedly:6,historically:6,"CARTER-WALLACE":2,formally:6,balsams:4,Roffman:2,charming:1,Kirkwood:2,Squibb:2,appointed:81,blithely:6,wearin:8,lapse:44,postmarked:17,ensconced:54,transmitted:81,Birmingham:2,Mapplethorpe:2,Circumstances:4,unveiled:85,"double-valued":1,"Brooklyn-born":1,Qantas:2,Lovell:2,Friedberg:2,Shipyards:74,"high-VAT":1,Lovely:2,corruptions:4,"Sinhalese.":1,Merchant:11,"Times-Picayune":2,Breeders:113,despairs:20,Quyne:2,asinine:1,unseated:249,"service-oriented":1,GRiD:2,Happened:32,Lionel:2,fare:24,Assisting:8,Tymnet:2,farm:25,Euroshuttle:2,aborigines:4,dalliances:4,aliquots:4,Micelli:2,alibis:4,Detroiters:4,indemnifying:8,computations:4,yrs:4,Nyberg:2,Ploys:4,Arrangements:4,"Inter-Canadian":2,Rothmans:2,Lusaka:2,PENCILS:4,Resisting:8,"Ruiz-Mateos":2,backbends:4,costume:22,temporal:3,Kayne:2,IOC:2,Torstar:2,Labouisse:2,Formica:2,instrumented:1,stout:1,Hettie:2,Venus:11,Hemenway:2,Respond:33,overcharges:4,miniwelfare:1,"pre-war":3,"spoon-feed":39,"ever-successful":1,Deslonde:2,brassieres:4,overcharged:54,"freedom-loving":1,Specter:11,chided:54,MERCHANTS:28,Random:40,Salins:2,vacuolated:17,citric:1,pursuits:4,collegial:1,investigative:1,refight:39,Breeding:2,Wick:2,Santry:2,maximizes:20,Loral:40,Microbilt:2,Loran:2,CEO:11,terming:8,"single-copy":1,"back-alley":1,cause:730,Troutman:2,abolitionists:4,contemporize:39,Involving:8,Syncor:2,galaxies:4,"R.D.":2,Fistoulari:2,cleansers:4,Darak:2,Corrections:46,evidential:1,Prevost:2,Rodgers:2,Noxema:2,"re-emphasise":39,Yurochka:2,Nicandra:2,Murasawa:2,galling:1,Eurovision:2,Recklessly:6,powerful:1,Fete:2,Liliputian:2,Snelling:2,Theoretical:66,Enzytech:2,"cash-and-stock":1,inasmuch:6,"three-digit":1,Favorable:1,Lydia:2,Dawkins:2,Vidunas:2,lists:18,chemicals:4,Rosenbach:2,liste:64,characterizations:4,"well-established":1,submitted:54,Auburn:47,succinctly:6,Zing:2,Mihaly:2,"R.T.":2,Benham:2,Oval:40,"acrylic-fiber":1,"eight-times":1,globalists:4,sweeteners:4,Abilene:2,horrors:4,Other:66,Editions:28,Sarasate:2,"similar-sized":1,Bastianini:2,interstates:4,Batman:2,relatives:4,"auto-emissions":4,"red-bellied":1,plowshares:4,Pueblo:2,duels:4,Photonics:2,"France-Presse":2,discos:4,imperilled:17,counterbalance:63,corrects:20,Centrex:2,Equalizer:2,Bertolotti:2,"food-processing":22,overhearing:8,Kanner:2,astonishing:1,"ear-splitting":1,constrain:39,Randi:2,redheads:4,underpins:20,telepathically:6,Rande:2,Randy:2,Gavrilov:2,Bonenfant:2,"marine-related":1,obsequious:1,lowlands:4,Hough:2,MacPhail:2,receptors:4,patristic:1,Czarina:2,achieve:42,"back-slapping":1,Nevermind:39,Schwemm:2,"popular-priced":1,plunking:8,"second-half":3,offsaddled:16,Allegra:2,Masterworks:28,trucks:18,Garamendi:2,Barnicle:2,directrices:4,Hwan:2,Allegro:87,FAILED:16,Palisades:74,golfs:4,Gravely:2,tunes:18,slimed:17,Kacy:2,embryonic:1,Nathanael:2,torts:4,Levina:2,Levine:2,Tesco:2,shrouded:54,Dieppe:2,operates:20,officials:4,reinforcements:4,operated:731,"all-employee":1,Wisconsin:11,MAPCO:2,intending:8,Alabamas:28,tend:149,Kingsbridge:2,tens:4,unshaved:1,"Full-time":1,Magnin:2,remitting:8,limbs:4,"laid-off":7,Telex:47,merry:1,"one-stop":1,unfired:17,Juras:2,Remarque:2,unstoppable:1,hits:18,sediments:4,Burgee:2,Arlene:2,Formosan:1,Burger:2,revitalized:32,Quebec:11,nontoxic:1,scabbed:17,autocrats:4,Delawares:4,Amoco:2,Pauleys:28,"U.S.C.":11,Avoids:20,Bockris:2,Jaap:2,ENTERS:20,thanked:32,Leukemia:2,Frills:2,outlaws:4,Groep:2,erases:20,Hephzibah:2,battlements:4,constitutes:20,"anti-pocketbook":1,Fulbright:2,"five-speed":1,exploiters:4,guerrillas:4,Courses:123,Whitrow:2,impress:182,smoking:21,reclassified:32,Blandon:2,Lifeguards:4,Bricks:4,queuing:8,Belasco:2,Kamchatka:2,Kaisha:2,mused:16,ratiocinating:1,"Shochiku-Fuji":2,"two-month":1,"Cortizone-5":2,Ashman:2,BENEFITS:4,shotshells:4,McShane:2,Cottrell:2,Flusser:2,tweezed:17,parts:4,wheel:78,"wrong-headed":1,divvying:8,Aluminum:129,"employee-stock":1,Failing:8,abounds:20,Rossides:2,"Non-God":106,scarcely:6,MacReady:2,Taizo:2,placating:8,Invacare:2,Durkin:2,drowns:20,Threshold:2,Androfski:2,Newsnight:2,advertises:20,Gaydon:2,Flower:2,Dionie:2,TOOK:2,Canadians:65,detail:25,Brookhaven:2,femme:64,"run-down":1,"pin-pointed":17,"MC88200":2,Yoichi:2,FACING:8,balloons:18,Nicolson:2,Hibben:2,"half-murmured":1,Limit:362,Nelson:2,bottoms:4,"HK$":84,Cookies:4,necessary:1,lost:112,Lights:92,Corrado:2,Penelope:2,gangsters:4,tipple:33,"Wilkes-Barre":2,Jasper:2,Shrewsbury:2,lose:42,"broad-scale":1,Milton:2,"CITIES\\/ABC":2,Garryowen:2,Asahipen:2,"going-home":1,Thunder:47,Mayan:1,home:486,EEG:2,leery:1,chroniclers:4,Bohemia:2,"anti-trust":1,pinpoint:182,overlay:78,steaming:8,broad:1,overlap:44,"non-dual":1,"Toronto-area":1,Bryant:2,octogenarian:1,Nureyev:2,Quilted:2,"real-world":1,hurls:20,Vereinsbank:2,Shakes:20,"non-lethal":1,naps:4,"Hastings-on-Hudson":2,Archaeology:2,cataracts:4,tonics:4,"M.C.":2,Cernuda:2,Mental:40,Boadicea:2,greening:261,Jorda:2,Conspiracy:2,Crosfield:2,"Medical-instrument":1,"KLUC-FM":2,Garibaldi:2,Communists:41,contending:8,fettered:17,previously:6,Papetti:2,Quickly:6,Internal:40,Conseil:2,Secular:1,PRATT:2,multivalve:1,"slow-motion":1,Daphne:2,Veraguas:2,north:277,"state-trading":1,rioted:16,triangular:1,fountains:4,blaming:8,Chamber:11,strawberries:4,oxygens:4,Oops:106,"lowest-rated":1,sprinkling:21,ordinances:4,minutely:6,Pagnol:2,Khrushchevs:28,"skill-dilution":1,Cheyennes:28,dismounting:8,display:24,urging:55,"I.Q.":11,diligently:6,universal:1,Nghe:2,Hatakeyama:2,Mustafa:2,functions:18,Northridge:2,Geneva:2,"Jr.":74,Aoyama:2,Never:690,Neveu:2,"Acid-washed":1,publicists:4,Peller:2,BEGAN:16,discorporated:17,star:70,Dual:1,Congregationalism:2,"half-mile":3,stay:95,stag:22,Braggadocio:2,additionally:6,"less-than-altruistic":1,"Ungermann-Bass":2,Embraer:2,Neilson:2,watercolors:4,"Hanover-Mauri":2,Refined:2,foreshadowing:8,sniveling:8,Corsica:2,aided:54,forgone:1,whoops:20,knelt:32,"single-step":1,"clean-up":3,perverted:81,aides:4,Kwong:2,Sabena:2,"SKr29":4,Cluck:2,DeFazio:2,Preferred:40,Kristallstrukturen:64,"car-buff":1,Chucas:2,Kinji:2,Thurgood:2,Authors:4,Merlo:2,Dougherty:2,fists:4,"light-wave":3,Identifying:8,"Harley-Davidson":2,Anglican:40,Pressed:17,Kuperberg:2,Shapiro:2,Shitts:2,epidemiologists:4,crops:18,Tepid:2,Almonds:4,irrationally:6,Colosseum:2,Raiders:41,McIntosh:2,likely:97,arrangers:4,subordinate:104,bureacratic:1,Tolek:2,"low-moisture":1,Arizona:2,polyelectrolytes:4,Culkin:2,Manzella:2,IgG:2,Parkhurst:2,"mutual-funds":4,Pomona:2,foodstuffs:4,Toler:2,upward:218,"low-ball":1,snared:17,Cuts:4,Irwin:2,Pennview:2,songbirds:4,provisioning:55,inheritable:1,reshuffle:25,Rizzuto:2,Engh:2,Rounded:1,Knudsen:2,bumps:18,Packaging:11,oozed:16,creasingly:6,Inorganic:1,Persico:2,intrigue:25,Either:732,Industries:41,fantastic:1,Gutwein:2,kinesthetic:1,McCay:2,EasyLink:2,guests:4,"god-like":1,tertiary:1,"head-on":277,"non-Humana":1,"high-velocity":1,Gramm:2,"Pro-choice":1,WHO:79,"Honolulu-based":1,"hand-screened":17,survive:42,WHX:2,WHY:293,"non-high":1,Catcher:11,highfalutin:1,Blasts:4,"Times-Stock":2,"female-dominated":1,Greasies:4,ostracized:17,Bienville:2,exploitative:1,"laid-back":1,Shipston:2,ELECTRIC:2,Kingsford:2,Hettinger:2,Corporation:11,Whereas:733,stressing:8,Globalization:11,isothermal:1,Watching:8,colds:4,Hawesville:2,amazing:1,adventurist:1,colde:190,undesirable:3,blanks:4,Lucas:2,Spinelli:2,vibratory:1,believers:4,arrearages:4,"Bargain-hunters":4,"single-engine":1,"Bank\\/Tidewater":2,egos:4,schoolchildren:237,Hargitay:2,Trianon:2,octogenaraians:4,Became:16,Kalinowski:2,goodbye:235,operate:42,athletes:4,wus:6,unnamed:1,Wrongdoers:4,Hetty:2,Newark:2,captions:4,Ordinary:66,wuh:33,before:245,Halstead:2,Hosaka:2,chatte:64,rescheduled:32,Chorney:2,Pate:2,Pati:64,Path:11,Exeter:2,Oyster:11,gunning:55,Computations:4,"ninth-largest":1,runny:1,downright:218,Hartnett:2,Kymberly:2,Syntex:2,soddenly:6,Semiconductors:111,arrested:54,Derr:2,enterteyned:16,lofts:4,"non-comparable":1,hawkers:4,"long-shelf-life":1,pepping:8,calmly:6,Shabbat:2,skins:4,Moulin:2,untrustworthy:1,FmHA:2,Shelagh:2,imperiling:8,Thereupon:6,"chart-room":1,redressed:17,Luncheon:2,Rue:164,lurks:20,Producers:92,"E-II":2,languish:39,housings:4,Econoclast:2,Anspach:2,Dodd:2,ascending:8,Dods:2,Brenham:2,Minpeco:2,Costaggini:2,Ripa:11,bioinsecticides:4,Ripe:2,Guideposts:111,Angrily:6,"or...":102,punctuated:17,Burlingame:2,"major-market":1,"triple-crown":1,chinked:17,"mass-produced":1,fictions:4,Handled:17,"non-lawyers":4,"fee-for-service":1,"once-mighty":1,"economy...":102,Handler:11,Handley:2,immensely:6,Gortonists:57,"crime-fighting":1,yuan:19,Haislip:2,hawks:18,Beech:2,Hanson:2,tufts:4,Desert:11,Checci:2,Cerf:2,Strongly:6,"urban-fringe":1,Scotian:2,foreclose:39,digs:72,Cerv:2,Pacify:39,"sober-faced":1,"space-age":1,requisite:1,unscented:17,Anterior:2,"data-gathering":1,Shepard:2,Bentham:2,evaporates:20,"non-alcoholic":1,knights:4,girlishly:6,evaporated:32,AUSTIN:2,Fads:4,abstracting:8,Alors:64,Glaze:39,reassert:39,"two-burner":1,floodlit:1,OPTIONS:4,"Anheuser-Busch":2,TEMPORARY:1,Nesbit:2,Holderlin:2,communicative:1,collectivizers:4,Cochran:2,fitting:261,Mugabe:2,tunnels:4,salubrious:1,"Medical-supply":1,"show-stoppers":4,Ivan:2,"two-lane":1,Hammerschmidt:2,overloud:1,breathes:20,"self-destructive":1,unadjusted:1,hamming:55,Ballets:113,Durrell:2,Nazism:2,Laszlo:2,annoyed:45,Bowne:2,Opponents:4,aquatic:1,brutalities:4,"food-packaging":1,"Hwa-Shan":2,Carmine:2,northeast:168,flatulent:1,"price-earnings":593,jailed:45,palliative:1,Havana:2,Campenhout:2,Mnouchkine:2,Leave:39,Satellites:4,"asset-allocation":3,MicroAge:2,earn:42,Honored:17,dicendi:64,Fokker:2,"metric-ton-per-year":1,stooges:4,monumental:1,winced:32,enchant:39,"pug-nosed":1,ears:4,humanly:6,Billboarding:2,diminutive:1,Stickney:2,roasted:81,alterations:4,unmurmuring:1,nontraditional:1,"inter-city":1,incorporating:13,unflatteringly:6,Bettner:2,Tool:11,woozy:1,artificial:3,Maronites:28,Toot:183,"Back-to-back":1,bloodstains:4,adjudged:17,Boettcher:2,"medium-grade":1,insinuated:16,wears:20,Lipshie:2,Usurpations:4,"search-and-examination":1,"hundreds-of-billions-of-yen":1,arrogating:8,insinuates:20,cuirassiers:4,suggested:112,Saturated:1,civilised:1,McDonald:128,wounding:8,jotted:1,"nothing-down":1,sweepers:4,Stevenses:28,Cassim:2,Gemina:2,presumably:6,Patagonians:28,Soldado:2,"air-charter":1,eulogized:16,Papal:1,Lorraine:2,lanterns:18,WCRS:2,Legally:6,Shinpan:2,tint:174,tins:4,Vocabulary:2,Ryne:2,Waters:2,yaks:4,patrolling:55,Lamos:2,tiny:1,Lamon:2,commission:25,"mid-Atlantic":1,detrimental:1,interest:24,basic:3,"Marxist-Leninist":66,Hibor:2,deeper:458,Saddle:2,dismiss:42,yellowing:8,shattering:30,tolled:17,MISUSE:2,deepen:39,downplay:39,stockpickers:4,Ohga:2,"commercial-switch":1,Centrale:2,affirm:42,"all-knowing":1,"toll-rate":1,courageously:6,"GM-Jaguar":66,unshed:1,pessimistic:1,settles:20,parastatals:4,"tax-haven":3,track:24,mauling:8,Chastened:17,Grevyles:2,ABBIE:2,lasses:4,museums:4,waging:8,"level-headed":1,"non-refundable":1,"V.":734,stickier:12,maryed:17,Dixieland:11,Catalyst:2,shoveling:8,"Bare-Faced":2,VA:2,bearded:103,Valued:17,VF:2,"tax-give-away":1,renaissance:47,VS:2,Values:41,VW:2,Va:2,"black-majority":1,inherit:42,Howorth:2,Coniston:11,Vt:2,Vu:2,TVwhich:2,"pro-independence":1,flops:72,investments:4,McMullan:2,Politburo:2,"well-diversified":1,yen:91,Muses:2,"year-old":1,yes:341,"five-and-dime":3,yet:691,Musee:2,nudge:63,"decade-old":1,Demetrius:2,royal:3,bantered:17,Giving:8,inefficiencies:4,translucent:1,save:735,trimming:55,Brinson:2,sapped:54,roosting:8,sailors:4,BAKER:2,Schulze:2,Farrow:2,Hatton:2,nationalists:4,KPMG:2,Overseas:294,coincide:42,Pollen:2,Discrepancies:4,"A.F.":2,"career-risking":1,chuffing:8,"game-winning":1,Orinoco:2,zombies:4,Immunex:2,Witness:216,"fur-lined":1,theorists:4,shuttles:18,somehow:736,elderly:3,platters:4,vaulted:16,"blacked-in":1,Noufou:2,Stalingr:2,uncoated:1,Kyzyl:2,noncumulative:1,Siege:2,"seized-property":1,runing:8,offcourse:1,Moliere:2,Rising:8,Vadim:2,epigenetic:1,Odilo:2,"four-color":1,"two-component":1,"end-of-season":1,"fire-crackers":4,digestible:1,inedible:1,"non-scientist":1,Simsbury:2,"near-maddened":1,barbarians:4,submarine:22,Pressing:8,Including:229,Swinging:8,nonstrikers:4,"double-bogeyed":16,Marley:2,Haskins:2,ores:4,thinner:515,anointing:8,Urien:2,Lehman:2,jetting:8,fumes:18,slurs:4,scalded:17,thinned:54,"non-cash":1,murderers:4,slipshod:1,Unless:124,NBS:2,flying:737,"voice-processing":1,"old-line":3,"Chinese-style":1,NBI:2,Backed:231,vacated:54,NBA:2,factions:4,"most-favored-nation":1,expectancies:4,"Pressure-happy":1,Konzerthaus:2,Gazdag:2,January:2,spike:25,GenCorp:2,avions:64,educations:4,unpadded:1,Masuda:2,assented:32,"B.D.":2,titters:4,Franke:2,prevents:20,caution:24,energize:39,Franks:28,Unilever:2,tollways:6,horrifying:1,average:255,"optical-storage":1,Sybert:2,spotlighted:17,"D-Mass.":2,Nuclear:40,erupts:20,"beautifully-tapered":1,wriggling:8,Masse:2,pimpled:1,Massa:2,tarnished:81,Gaza:2,muffins:4,unallocable:1,Highway:11,graft:25,bruinish:1,marking:55,bruising:13,"cents-a-unit":1,fosters:20,Klerk:2,Bimini:2,Tagliabue:2,"Sanger-Harris":2,pouted:16,roomier:12,braking:55,Drive:128,"cement-truck":1,journey:25,NEARLY:97,budded:16,"Mass.":2,Iroquois:2,Rothe:2,jacked:32,Lithell:2,Echoing:8,"cut-and-paste":39,Mendelson:2,Decisions:4,trembled:16,stripping:55,profits:18,Apalachicola:2,vermilion:3,Systeme:2,"five-game":1,Desmond:2,cattlemen:4,commentaries:4,Armisteads:28,disorders:4,unrelieved:1,Hosogane:2,"Atlas-Centaur":2,blasphemies:4,Danzig:2,advises:20,Grill:2,"trouble-free":1,defying:8,advised:45,unworn:1,Donaldson:2,Riben:2,swapping:55,"hang-ups":4,Smythe:2,Cortese:2,Distally:6,Potemkin:2,noiseless:1,round:738,Ribes:2,surgically:6,rhapsodizing:8,unexpected:1,Jacchia:2,Beefing:8,Jardine:2,"Ath.":2,Lags:20,Opus:2,Issuing:55,Niva:2,ravenous:1,circulars:4,Head:11,filles:64,Orion:2,"pound-DM":1,Wrote:16,Heat:47,deficiencies:4,Hear:39,Defensive:1,international:3,Piller:2,Forever:305,shutters:4,dwarf:24,Cooperman:2,Fingerprints:4,"high-protein":1,JCKC:2,Goodwills:28,wearily:6,exemplified:17,Lotus:11,fleetest:51,Railroads:41,jungles:4,exemplifies:20,redoubling:8,Glison:2,"two-foot":1,slackened:85,recounting:8,insolent:1,statewide:97,merely:6,Ossad:2,sweating:55,spiffing:1,"mid-1960s":4,Thrush:2,Beecham:2,lieutenants:4,visit:44,disaffiliated:1,Pietism:2,Novell:2,Endless:1,Comment:47,preserving:8,Solid:117,unequaled:1,"cancer-suppressors":4,Hayes:2,"lovelier-than-life":1,Hayek:2,Rebels:4,"real-estate-related":1,reelected:17,Cuatrecasas:2,premarital:1,Kappil:2,Improvements:113,making:55,Archive:2,nearest:739,Fundamentally:6,frescoes:4,flouting:21,greenest:51,Gulfstream:2,Yemens:28,frescoed:1,burgeoning:30,Tristan:164,overreacting:8,Arpanet:2,"two-dozen":1,"equipment-leasing":1,Row:11,Shoppsers:4,"bond-price":1,Raymon:2,Kreditanstalt:2,Milenoff:2,COOKE:2,Sexton:47,Succession:47,CERA:2,basked:16,Series:239,purify:42,Magazine:11,Carliner:2,"spray-dried":1,Kerby:2,HOPE:33,abuzz:1,nous:64,"non-call":1,"Medicare-catastrophic-care":1,shoes:4,backs:18,Nutcracker:11,COMPUTERS:123,Leshem:2,Mutual:40,underpriced:740,Olvey:2,Asra:2,petrochemicals:4,equip:42,observational:1,Balkanizing:8,group:44,monitor:182,interesting:1,Pancoast:2,Uniroyal:2,FADA:2,Muslims:111,FADE:33,Listerine:2,Hanlon:2,"Japanese-type":1,"INGERSOLL-RAND":2,Fanny:2,repriced:17,resignedly:6,"Washington-area":1,Kyle:2,"-ing":1,Jellyby:2,Vocational:40,"MIG-2":1,leopards:4,Appalled:1,rattles:20,handbills:4,withholdings:4,feverish:1,Bertoli:2,"thunder-purple":1,Purse:2,"AIB.PR":2,"wide-cut":1,Minimum:2,careless:1,Bertolt:2,Turnbull:2,Byzas:2,brews:72,Oczakov:2,Eritrea:2,Holdings:46,treacherous:1,"some...":102,conventions:4,Saviour:2,speculators:4,fingertips:4,worried:45,Keo:2,Pomham:2,Upham:2,Kel:2,Keg:2,Gauloises:74,"earlier-announced":1,condemns:20,Formation:2,Aires:2,Key:129,Luvs:28,Cefiro:2,brimming:8,Bloomingdale:2,"Pro-life":1,Commerce:11,"earthquake-triggered":1,furtively:6,"semi-autonomous":1,bringing:55,Baudelaire:2,Gorshin:2,Afternoon:106,intendants:4,attarcks:4,Baku:2,Installed:17,Gesell:2,funks:4,Huntington:2,Bake:59,Sherwin:2,remorseful:1,Epes:2,Humanities:2,tidying:8,nutritional:1,Inflationary:1,methodological:1,Demands:4,Jalalabad:2,Posey:2,PVC:2,"health-and-benefits":1,lambaste:42,fiery:1,"A[fj]":451,"Teen-agers":4,"foreign-led":1,meme:64,gaudy:1,Oberweis:2,Sauerteig:2,adjourned:32,allegedly:6,"lean-to":3,Deposits:57,LOOKING:8,Samurai:2,"straw-colored":1,remora:4,scraping:55,Hendersonville:2,centigrade:1,"Right-hander":1,strolls:20,Subsistencias:2,lick:39,Container:2,lice:4,entombed:17,Tight:1,Karnes:2,"pro-forma":64,initiatiors:4,recreated:17,"Pierre-Karl":2,vestments:4,Visitation:2,Murphy:2,Langley:2,recreates:20,Francophone:1,"store-front":1,bets:4,formulas:4,Thule:2,Dellwood:2,comings:4,Hatchet:2,Tristano:11,assault:78,bete:1,formulae:4,complaints:4,Dworkin:2,Hatched:17,proxies:4,spaced:14,queens:4,Beyond:124,radioactive:1,Littlepage:2,"multi-product":1,Favored:7,scowl:33,Dominguez:2,Coogan:2,"down-down":1,"watered-down":1,playoffs:4,newer:12,kwon:64,Delloye:2,Gabriela:2,Stephen:2,Condit:2,"Health-Chem":2,Fosdick:2,Across:124,reek:174,despairingly:6,stormy:1,reel:24,RIT:2,storms:4,"non-dramas":4,analytic:3,McKinzie:2,"Israeli-born":1,"ice-baggers":4,ostensible:1,RID:39,McGwire:11,sensitivities:4,Organizations:46,geocentric:1,Large:66,unimportant:1,"a.k.a.":1,Largo:2,blends:4,Triton:2,Gillian:2,biosynthesized:17,Striking:30,moodily:6,"supply-demand":3,rotationally:6,Straits:41,"long-bubbling":1,Education:11,audited:81,Shotwell:2,Visualize:39,Connoisseur:2,sensitives:4,Vital:3,eliminating:8,contains:20,Acrylic:2,"penny-stock":3,radiates:20,Itching:8,Socinianism:2,RECORDS:4,enough:277,radiated:112,"J.M.":741,approvals:4,Rescued:17,ascribed:54,"quarter-by-quarter":1,pharmacists:4,Havens:2,coupons:4,Equally:6,"self-confessed":1,guardians:4,Anfia:2,"half-conscious":1,pacified:16,Lantos:2,"Class-D":2,Pearl:2,pacifies:20,"Kohnstamm-negative":1,"specialty-material":1,ascribes:20,"gear-sets":4,Anthropology:2,euphemisms:4,Southwood:2,"Medicare-approved":1,tilts:20,Constance:2,attaching:8,"computer-oriented":1,judging:55,oxyhydroxides:4,Getulio:2,fiftieth:1,Millbrae:2,Romulo:2,Rothmeier:2,Pointe:2,oust:39,squash:163,laptops:4,Ackroyd:2,Points:28,Action:11,COME:17,Bamsi:2,sound:742,Ambulances:4,Allegretti:2,inadequacies:4,troopships:4,"abortion-funding":1,many:743,cancelled:17,slapping:5,nonlinguistic:1,Factors:123,Sudan:2,Lutz:2,"Antonio-based":1,Factory:47,dynamos:4,sleeping:537,strain:44,Chappaqua:2,releases:18,Monticciolo:2,primitives:4,Ovens:4,creaks:4,"job-destroying":1,Grumble:2,belie:149,"CD-4":2,Guignol:2,compiling:8,aerobics:19,clammy:1,unperceived:17,Hardwick:2,"hypothalamic-cortical":1,pickoffs:4,Embedded:17,patrician:3,assist:182,Waldman:2,"nacho-crunching":1,"CD-I":2,"rough-hewn":1,"more-open":1,"gas-producing":3,Tribes:4,shortwings:4,businesslike:1,"Miller-Studds":2,biwa:64,Motors:111,"coming-of-age":1,Sweezey:2,"A.K.C.":2,uncomplicated:1,cameramen:4,handouts:4,outdoor:1,sputters:20,"asset-backed":1,sights:4,"French-made":1,Plastic:66,unofficial:1,Zaharah:2,thudding:8,despoiling:8,Git:39,"England-based":1,Rowland:2,Ramada:2,Taurus:2,Cezannes:28,Soleil:2,Ulric:2,GROVE:2,PROSPER:33,Quadrille:2,nonconvertible:1,gnarled:1,credentials:4,Dolley:2,Operations:744,Raised:17,hydrated:1,"newly-married":1,epicycles:4,Warrants:4,twittered:16,Biden:2,reimbursing:8,gratifyingly:6,Heinrich:2,bewitched:17,worries:18,"market-based":1,"turtle-neck":1,Pressured:17,Entertainment:11,"nurture...":102,imaged:17,Pressures:4,AB:2,"Kimberly-Clark":2,images:4,"AIDS-infected":1,Assurance:2,AD:47,HOUSTON:2,Meg:11,outs:4,"food-importing":1,princely:1,Augustin:2,Kolberg:2,Mel:2,Men:745,"mini-series":19,charlatans:4,Met:746,Sponsored:17,schoolteachers:4,"rough-cut":1,millidegrees:4,Chisholm:2,Gorski:2,"worst-hit":1,"good-by":341,Bendectin:2,Seabrook:2,Settle:39,"budget-priced":1,Leigh:2,AP:2,Scared:14,AS:587,Czeslaw:2,Sparcstation:2,ORTEGA:2,MacInnis:2,pockets:18,consolidate:42,Fanning:2,unused:1,skilled:7,actuate:39,harness:24,Banstar:2,acquiesced:32,"Rhine-Westphalia":2,paraphernalia:91,restrained:45,disfavored:1,railcars:4,Lynch:2,oxidised:17,fanatic:22,Guilin:2,motherly:1,Autocracies:28,Stopped:17,hurricanes:4,"Mac-Reynolds":2,arranged:54,Significantly:6,"lesson...":102,practically:6,"Soviet-Israeli":1,relabeling:8,Gesangverein:2,arranges:20,peeking:8,eschew:39,Satoshi:2,Wickes:113,"single-adjudicator":1,Broeg:2,Frail:1,Secutities:28,Wicked:2,again:6,Accardo:2,goddam:1,"J.R.":2,"mother-only":1,"earth-shattering":1,revisions:4,"crew-pairing":1,At:124,unthinkingly:6,withdraw:42,demobilize:39,academies:4,Dorothy:2,Bull:11,marshes:4,Mojave:2,Schafer:2,"P-7A":2,collegiate:1,"Song-sam":2,"Kahler-Craft":2,Warsaw:2,colleges:4,lapped:32,founder:25,Workers:41,founded:54,commute:174,THANKS:4,expressions:4,briefcases:4,shattered:81,preserves:72,Byzantine:66,Kazushige:2,Davenport:2,Bayonne:2,Fleischmann:2,Devout:1,crimson:3,Arenula:2,Training:11,unabashed:1,sitting:747,authentications:4,Trikojus:2,Poussins:4,purrs:20,Sebastian:2,elated:7,washing:55,"whiskey-baritoned":1,drugged:14,Beaumont:2,blares:20,Primaxin:2,"big-money":1,bypassed:54,blared:16,tribal:1,Abiomed:2,McGlade:2,"anti-abortionists":4,Mineralogies:28,Westcom:2,perspective:22,MIPS:113,affable:1,Andris:2,creatures:4,swampy:1,sweetly:6,brackets:4,swamps:4,"industry-wide":1,typifying:8,Demisch:2,leafhopper:12,"PR-wise":1,Isaly:2,MIPs:113,"railway-based":1,Manalapan:2,Ahead:150,Classified:66,"anti-union":1,threads:4,furlongs:4,Apologie:2,frangipani:4,Returning:229,sofar:6,sofas:4,uncharted:1,Ardent:40,Bizarre:1,Dehmelt:2,"African-Americans":28,"shareholder\\":1,"America.":2,Charging:8,"FHA-backed":1,Walla:2,shareholders:4,Walle:2,"long-held":1,Kristiansen:2,Metschan:2,plastered:14,"Sonet-compatible":1,squires:4,subsumed:17,Wally:2,restraints:4,"money-management":22,Transtar:2,Alysia:2,landes:4,Sotheby:2,handsomely:6,FOMC:2,constructs:20,Americas:74,necromantic:1,American:180,Roger:2,McKeon:2,Chiang:2,Woburn:2,Innocenti:2,"commercial-bank":3,specializes:20,Hamlet:2,guards:18,patrols:4,Harnack:2,Razors:4,specialized:103,hovels:4,"half-straightened":16,"deficit-cutting":3,Retirement:11,junked:17,salesmen:4,Welty:2,Mfume:2,"current-account":3,ensnarled:17,numbers:18,"P.M.":748,Cause:59,Seso:2,narrowly:6,Autorapido:2,TIRED:1,TIRES:4,Sparc:2,Declarative:1,Spare:1,"worst-performing":1,Spark:2,hamburgers:4,slackening:8,"Producer-Price":2,Schneider:2,Artemis:2,questioning:9,tangere:1,"fast-growing":1,Continue:42,spectacularly:6,coming:5,Furious:2,Residents:4,Chair:2,Porretti:2,Counting:8,"Japanese-made":1,Aristotelian:66,toiletries:4,upholstered:17,"retail-sales":176,Perito:2,skilful:1,"cancer-ridden":1,Mazzera:2,Afrikaner:66,Forced:17,Nashville:2,Imported:2,ANCHORAGE:2,through:105,Forces:749,"engineering-management":3,Wolcyrz:2,Pagans:4,golfing:21,Tomas:2,pests:4,Notte:2,Elijah:2,forints:4,misunderstandings:4,researches:72,recollected:16,Toman:2,Tatzel:2,Jerrold:2,Schwengel:2,postwar:1,socially:6,prejudices:4,Capitalism:47,frigid:1,Capitalist:2,motioned:16,prejudiced:14,vacationed:16,Canastels:2,Taipei:2,"church-goers":4,Interspec:2,hails:20,supersensitive:1,Commoner:2,"home-nursing":1,saloons:18,wrappers:4,Fiddles:4,Fiddler:2,Reverently:6,winnow:39,"mm.":19,marshaling:8,uninvited:1,Contel:11,Atkissons:28,Collyer:2,pubescent:1,DiCara:2,"burned-out":1,Sweeping:8,"glass-like":1,"intra-party":1,Mario:2,Ogilvyspeak:2,Weaning:2,enforcing:8,"pre-recorded":1,gobblers:4,impeached:17,reparations:4,beginning:5,Deerfield:2,Badin:2,Jawaharlal:2,needing:8,"hatchet-faced":1,Biggs:2,withes:4,NASA:2,NASD:2,Soir:2,Prodigy:2,raptors:4,embraces:72,stabs:18,jabbed:16,embraced:54,"three-and-a-half":1,unacquainted:17,"X.":2,"straight-out":1,bloodied:7,Laventhol:2,"anti-clotting":1,hollows:4,Littleboy:2,Germont:2,Scholastica:2,XL:2,Frenzel:2,Tsai:2,"sales-loss":1,"one-acters":4,Tsao:2,Tsar:2,obstructed:54,trolls:4,dippy:1,CLAUSTROPHOBIC:1,Sooraji:2,"Left-Wing":2,GEnie:2,Favor:39,Physiology:2,EXAMINE:39,substracting:8,orginally:6,"patient-interview":1,Xu:2,trudged:32,lilting:750,Lagonda:2,Esprit:2,"Son-of-DAT":2,Busey:2,showers:4,"POST-TRIAL":2,Troopers:4,Doubleday:2,Power:11,recondite:1,cholorfluorocarbons:4,Futter:2,Congel:2,Equitable:2,wows:20,millenniums:4,programmers:4,underpinnings:4,unceremoniously:6,loosens:20,esse:147,officiated:16,"off-key":1,Elecktra:2,inarticulate:1,"MD-80":47,drifts:72,reflections:4,Pisces:2,Shrinking:8,Popolare:2,Seiren:2,commissions:208,Langevin:2,noblest:51,converge:42,Krenz:2,unmeritorious:1,Bonilla:2,Hanoverian:40,Kathy:11,chimes:72,Messiaen:2,merges:72,Lessing:2,"lawn-feeding":1,"self-deprecating":1,idiots:4,chimed:16,"night-coach":1,lathes:4,Kathe:2,Solidarity:11,"venture-capital":3,Fiat:2,intractable:1,Unify:39,internists:4,express:50,"analytical-instruments":1,zapped:16,autobiographic:1,Assiniboia:2,Pitcoff:2,STARTING:2,Tootsie:2,doubled:32,Unilab:2,logistic:1,doubles:18,"July-September":1,Larkins:2,Portland:2,"natural-resources":152,threehour:1,Dismissing:8,Spreads:4,biannual:1,nerly:6,Citing:229,SKF:2,manly:1,Volkenstein:2,Phoenixville:2,DeCicco:2,"government-agency":3,expert:22,embalmers:4,shatterproof:1,Punch:39,vascular:1,Bushby:2,Cleopatra:2,Cipher:2,beetling:1,intimidated:17,"seventeenth-century":1,"Off-price":1,INPS:2,Ionic:1,acidulous:1,substitute:139,symbolical:1,Dancers:113,tempos:4,Windham:2,"sharp-focus":1,zilch:439,"re-run":17,esprit:64,elaborating:8,Derck:2,tubules:4,profligate:1,ravages:4,"DFS\\/Pacific":2,asserted:32,ravaged:17,civilize:39,furthers:20,weaving:55,Chinooks:4,Dineen:2,rivals:18,omniscient:1,Floral:2,"fly-by-nighters":4,chiseled:14,"less-obvious":1,enchantingly:6,Rajiv:2,strictest:51,grains:4,grainy:1,elections:4,Schimmel:2,reopens:20,denominations:4,coyly:6,Robins:2,whimpers:4,ganging:8,unearned:1,Bluntly:6,astound:39,"boat-rocker...":102,"Fuji-apple":1,Prison:11,aspects:4,Bonett:2,disillusioning:1,Glaris:2,Towle:2,"antibody-based":1,"quick-frozen":17,shortchanged:17,Intertrade:2,traditionally:6,Banawan:2,Provisional:2,Zionists:28,"pre-refunded":1,task:25,"Al-Rowas":2,ExploiTech:2,purtiest:51,coachmen:4,"express...":102,Quacks:4,"Die-hard":1,"year-on-year":1,Platonist:47,irritably:6,shape:24,irritable:1,Yorkers:111,alternative:22,Kenyan:66,Forster:2,rundown:22,cut:751,Crovitz:2,cup:25,marrying:8,Pae:2,undistinguished:1,waxed:85,habeas:296,Opositora:2,Bette:2,Exploration:11,"be....":102,reliable:1,hallucinations:4,Christian:752,Betts:2,maples:4,recycled:81,irretrievably:6,unhindered:1,"one-inch":1,"half-standard":1,absolutely:6,"commercial-free":1,presences:4,Riverview:2,"over-allotments":4,"divestiture-related":1,Tieck:2,proficient:1,Modular:2,Illuminating:2,epic:22,Shultis:2,Box:2,Boy:753,"Auto-Europe":2,Stempel:2,Bow:2,Bol:2,Bon:87,Bob:2,Frontieres:64,Romania:2,Loyal:1,"lower-than-planned":1,"S.Grove":2,"sweet-sour":1,Enhanced:2,delist:39,Captain:11,"XL\\/Datacomp":2,systematizing:8,fantods:4,depose:39,"Vt.-based":1,Strauss:2,Otterlo:2,"Wash.-based":1,Accuracy:47,"single-foot":1,Oppressive:1,openers:4,Longest:2,Coverage:11,Rexene:2,Mips:2,translate:42,JROE:2,Professionals:113,"motel-keepers":4,Hage:2,Splendide:2,Promises:20,delighting:8,subsidiary:22,planed:17,"W.C.":2,driveways:4,Salty:2,Pasterns:28,Wildcat:2,"learning-curve":1,Babel:2,Secured:1,Nymark:2,deprive:39,rarities:4,consulted:54,revelatory:1,appetizing:1,organizational:1,CAMPEAU:2,overfeed:39,"Red-Greens":28,"not-quite-perfect":1,Sailing:11,Fidel:2,Chrissake:106,adoring:8,composing:8,intensifying:30,Dallasites:28,POINTS:28,Israelis:65,Student:11,emanated:32,Evangelista:2,"Wade-Evans":2,"Heel-Lotus":2,"St-Laurent":2,admen:4,antiquities:4,"reserve...":102,intensified:45,TELESIS:2,"co-occurring":1,entertaining:5,Garzarelli:2,scouting:8,Boulroud:2,overlooking:8,monic:1,wards:4,bankers:4,Pah:2,Sahara:2,presenting:8,"in-room":1,"ready-made":1,caribou:19,magnetically:6,"time-zone":1,amplifies:20,Baumgarten:2,Assuming:229,amplified:17,compose:42,"boom-or-bust":1,Jujo:2,suave:1,"water-washed":17,tradesmen:4,"be...":102,bottomed:54,"Democratic-style":1,unhurt:1,Vollrath:2,Rearding:8,"spider-leg":1,RIVER:2,refusers:4,companywide:97,Alcoholic:2,Murai:2,Ty:11,Eldon:2,Murat:2,Hersly:2,Caligula:2,McCloy:2,"charter-type":1,Roemer:2,mysticisms:4,Term:47,Contra:40,Annaud:2,Criteria:2,Tropic:2,Avocados:4,fros:4,"penalty-free":1,"commercial-goods":4,Ogunjobi:2,dowdy:1,Pornsen:2,assisted:54,pleading:5,Dahlia:2,phonemics:4,Schoder:2,"non-linear":1,"VacSYN\\":2,plunkers:4,beasts:4,Hasbro:2,AGREES:20,"D.H.":2,warless:1,Burkina:2,MCorp:2,premiering:55,Menas:2,climb:95,Proceeds:123,Tareytown:2,composed:45,decentralized:103,Amtrak:2,Munster:2,Pisa:2,Emporium:2,Finger:2,composes:20,corpuscular:1,belittling:8,Driver:11,Driven:17,classically:6,Congregational:40,"Gramm-Rudman-Hollings":2,"penny-wise":1,Propper:2,Rennell:2,"co-inventors":4,Lukassen:2,"Pty.":2,engender:39,Wilfrid:2,Flakes:111,"Radio-Television":2,Nash:2,Ultra:2,minions:4,Inspire:2,transmissible:1,"anti-Nazi":1,Etruscan:1,gruff:1,ontologically:6,syrupy:1,Cultures:4,Apogee:2,syrups:4,noises:4,midsts:4,unseasonable:1,formations:4,Farthing:2,"Three-year-old":1,Daewoo:2,Durocher:2,"once-desirable":1,Superconcentrates:4,Petrie:2,"Mainliner-Highland":2,"delicately-textured":1,prostate:22,"necklace-like":1,Southey:2,"state-subsidized":1,HIV:2,Maplecrest:2,Tennessee:2,supranational:1,chambermaids:4,BHP:2,eggplants:4,"Dollar-yen":1,Kriz:2,contriving:8,Beside:127,Creations:65,circumscribed:1,knocks:72,Krim:2,transborder:1,iguana:1,edematous:1,tsk:106,"most-hazardous":1,undressed:16,itemize:39,godless:1,pugh:1,"European-based":1,couplers:4,"black-owned":1,"steel-hulled":1,Slack:2,pangs:4,"Yin-Yang":2,beads:4,denigrate:39,Architect:2,squabbling:21,preschool:1,applicants:4,straddling:8,Hollingshead:2,greenhouses:4,masterminding:55,Wurtzel:2,hisself:53,preclude:42,Dillard:2,oversubscribed:14,"E.O.":2,beady:1,Downside:1,McLish:2,tacticians:4,monumentally:6,crackdowns:4,Jima:2,"pastel-like":1,"Dai-Ichi\\/Nippon":2,averred:16,Awad:2,"barrel-vaulted":1,incensed:14,popping:8,Unisys:113,eking:8,enforceable:1,"crazy-wonderful":1,"Plee-Zing":2,scriptural:1,flushing:21,Mandle:2,Ural:2,Countering:8,peonies:4,vibrionic:1,"Anti-Swapo":1,grunting:8,contrarian:3,IRSAC:2,qua:64,clarify:42,approaches:18,que:64,British:198,qui:64,Sanger:11,quo:754,"super-empirical":1,pokerfaced:1,backwards:755,allies:4,"battlefield-electronic":1,"open-necked":1,Acey:2,allied:81,mortal:3,Aces:4,"flat-rolled":1,"less-effective":1,warys:4,domiciled:17,"grandfather-father-to-son":1,elegiac:1,Sievers:2,Rubber:40,lagging:5,Sventek:2,Kooks:28,Durgin:2,"tax-and-spending":1,Muncke:2,owning:55,Playboy:2,"dextrous-fingered":1,"Circuit-breaker":1,nebular:1,scant:1,Stocks:57,bargained:32,scans:18,Fliers:28,acquire:182,foamy:1,Burnett:2,Bordeaux:2,foams:4,Nearby:197,Reds:41,Accountemps:2,Ozagen:2,landholdings:4,bewilderedly:6,Reda:2,"off-field":1,assays:4,impersonations:4,Lastly:6,Sutherland:2,Ragan:2,Hueglin:2,Lachica:2,"Follow-through":1,Parmer:2,Dilworth:2,Defuse:39,Mueller:2,catapults:20,"attention-grabbing":1,Jacuzzis:4,incentive:22,Ziraldo:2,concerns:18,Ticker:2,Glad:1,WARS:123,deathless:1,Kiarti:2,Eritreans:28,"New-England":2,"M-CSF":2,interning:8,Protege:2,Russes:2,Sankei:2,Inadequate:1,"line-drying":1,McNamara:2,Joyce:2,Tartarughe:2,Afrikanerdom:2,Russel:2,thicken:39,fascists:4,rotating:8,Religion:47,Stumbles:20,"one-million-letter":1,unreliable:1,Regal:2,Regan:2,"communication-cluttered":1,Denison:2,sparks:72,Aycock:2,Superslim:2,Oei:2,"no-nos":4,mothballs:4,prancing:21,Jacob:2,communist:3,shouldering:8,regularly:6,pave:39,"associate-label":1,Stories:113,rebellious:1,overinsistent:1,pashas:4,Endicott:2,"Well-to-Do":1,Carlson:2,resultants:4,fixes:4,dispell:39,Desheng:2,fixed:756,Guarantee:47,Fungible:1,"well-guarded":1,turkeys:4,racked:54,groggy:1,"non-repetitious":1,reiterate:42,Orbiting:2,Ochoa:2,"easy-to-turn":1,Scrub:39,reform:25,vignettes:4,criminalizing:8,canons:4,unscrewed:16,difficulties:4,Heston:2,"inflation-fuels-growth":1,Concerto:2,"BE&K":2,"months-long":1,"GM-CSF":2,"operations\\":2,Mantegna:2,jewelled:1,Creedon:2,Gaelic:1,reproduces:20,"Well-Seasoned":1,"book-flogging":1,Entirely:6,Concerts:41,Macintosh:2,commenting:8,Soldier:2,burnishing:8,metered:17,kosher:1,Lippens:2,Spinners:28,wringing:8,"property-tax-cutting":1,Champassak:2,Mardon:2,"two-tier":1,ambushed:32,"See-through":1,Squire:2,Ahsan:2,Bench:2,reborn:14,deflected:32,uninitiated:1,Sapp:2,Pending:229,"long-necked":1,"short-wave":1,migrate:42,seasoned:7,drowsy:1,rump:22,"other-nation":1,iodinate:39,"drift-net":22,Carriages:4,Moonies:65,Overbuilding:55,Norex:2,"S-10":11,tense:3,assessments:4,locomotives:4,Roeser:2,distilleries:4,exhumations:4,Nalick:2,venomous:1,commmon:1,Centering:8,fumbling:30,Cineplex:2,LONDON:11,Estes:2,"Anti-Americanism":2,espousing:8,Yaqui:2,")":167,coronary:1,Accountants:28,shoehorned:17,Panel:2,Avoiding:229,"code-related":1,sigue:64,Surrendering:8,discredited:14,sisters:4,drafts:4,neural:1,Resident:2,Spring:11,"NOT-GUILTY":1,Sprint:2,Total:66,Seventeenth:1,reintroduce:149,excise:70,nicknames:4,drafty:1,inveigle:39,nicknamed:54,vocational:1,Fourth:294,streptokinase:2,"Y.J.":2,Lutheran:2,Gundle:2,Shogun:2,"one-sixth":3,Victoria:2,delegations:4,jackets:4,Dirksen:2,ought:190,Pulkova:2,Toxics:2,elapsed:17,Krasnoyarsk:2,"satin-covered":1,elapses:20,Bromagen:2,"ward-heelers":4,"ad-free":1,displaced:54,courtrooms:4,Isaacson:2,Durham:2,displaces:20,ghosted:16,livelier:12,straightway:6,classical:1,Signs:4,Olle:2,Grohowski:2,happens:20,Option:11,"best-hearted":1,screwed:54,"clean-top":1,Devcon:2,Heaven:395,Applying:8,refurbishing:55,pedaling:8,topiary:1,unchangeable:1,"U.N.C.L.E":2,urbanized:14,Jetway:2,"class-biased":1,Lascivious:2,Rabaul:2,Guardino:2,"central-district":1,Guardini:2,crudes:4,backpackers:4,planners:4,cancerous:1,Shinagawa:2,unfashionable:1,knuckles:18,PROSECUTIONS:4,Equipement:2,"Quattro.":2,condense:39,Twomey:2,hankerin:8,avowed:1,Therapy:11,knuckled:16,crucially:6,"Fair-priced":1,November:2,Arbuckle:2,Tyne:2,Philanthropic:2,"media-stock":1,crawled:32,"Source:New":2,Protons:4,unpartisan:1,"fuddy-duddy":1,Harlan:2,versatile:1,Sekel:2,Guiseppe:2,"HUD-backed":1,Graff:2,Crosby:2,Capetronic:2,Gauguin:2,Glaciology:2,indiscriminating:1,exceeded:32,Surgeons:65,transfused:17,periods:4,"AFL-CIO":11,"tumor-suppressors":4,Tempe:2,overpurchase:39,Tempo:2,duplications:4,Mcdonald:2,Centrum:2,Sylmar:2,Gitter:2,Blakes:4,conveys:20,Interlocking:8,floppies:4,"hard-liquor":3,Sabella:2,Deere:2,"F-20":2,Elcotel:2,Alba:2,Expenses:4,deregulated:81,Exterior:2,condiments:4,propsed:17,"food-services":4,Pryor:2,Behringwerke:2,elegances:4,Juilliard:11,reprocess:39,"white-suited":1,Quackenbush:2,GROWING:8,Handzlik:2,"Re-creating":8,rendezvoused:16,undisputed:1,"computer-matching":1,Obey:2,Vinnicum:2,Minnelli:2,metamorphic:1,LeFrere:2,Mnemosyne:2,whipsaw:104,acoustically:6,whatsoever:757,"Pride-Venus":2,Redland:2,Nasty:1,Prescribed:17,arboreal:1,dispense:42,Prieur:2,vastly:6,caliphs:4,Richter:141,anemic:1,gluey:1,school:25,Murtaugh:2,Ousley:2,conceive:42,glues:4,"cocoa-trading":1,MALAISE:2,Schweiker:2,Cowboys:41,delightfully:6,glued:54,Haake:2,veritable:1,Ruffled:17,disciplines:4,Satoko:2,construed:54,guidelines:4,disciplined:45,Palazzo:2,"take-up":1,"Saint-Saens":2,blue:3,"Z.":2,hide:95,cosmologists:4,supplied:54,blur:44,supplies:18,Behrendt:2,"non-violence":22,democratized:17,Niebuhr:2,Strehler:2,"state-appointed":1,Crispin:2,McAvity:2,MIDLANTIC:2,Wedgeworth:2,hideously:6,Gradual:1,ridicule:25,culminate:42,poshest:51,depreciated:16,"proposition...":102,Bayezit:2,murkily:6,natives:4,settled:758,Panting:8,Group:11,Destec:2,Yehhh:106,grumbled:32,Pedersen:2,Madagascar:2,Orville:2,Werdell:2,offi:4,Cat:2,grumbles:20,would:190,Laotians:4,tenders:4,Messiah:2,distributing:55,Whichever:447,quipping:8,Donuts:46,Ezra:2,Beauregard:2,Gradison:2,excommunicated:17,"black-body":3,tenors:4,ferrying:8,poultices:4,Ramparts:4,Stronger:195,"cheek-to-cheek":1,Crowd:11,Crowe:2,arterioles:4,Crown:11,Crows:28,warmish:1,Spotlight:2,"employee-management":3,hobos:4,MAKING:8,"guitar-twanging":1,"financial-support":1,defile:39,receivables:19,"gasoline-powered":1,riskiest:51,Bunny:2,returned:32,"non-verbal":1,legislate:39,Cordova:2,"stand-off":1,"non-elderly":1,toxic:3,Darla:2,Modzelewski:2,Yuzek:2,Commonweal:2,Mariam:2,Marian:2,pantomimic:1,imaginable:1,lump:78,airless:1,understandable:1,lances:4,girders:4,splendid:1,Siegal:2,capacitors:4,"quasi-monopolistic":1,ATTRACTS:20,preventive:3,"name-plating":1,Unanimously:6,Nonetheless:6,Gabriele:2,Arlington:2,fiendish:1,"non-staple":1,margining:8,"two-term":1,Nitsuko:2,"R.I.":2,howsomever:6,signatory:3,Gajda:2,mistreat:39,HASTINGS:2,Goldin:2,litigious:1,Mobile:40,ripens:20,Goldie:2,CHW:2,rental:3,Dwight:2,"tootley-toot-tootled":17,swaying:55,gluttons:4,Lureen:2,Foul:40,herald:42,Newsreel:2,minutiae:4,"occupation-as":759,junkloads:4,Frankfort:2,Carrel:2,"two-weeks":1,juggling:55,Frankford:2,Derivative:1,"mega-issues":4,lugged:32,pounce:39,large:97,psychic:3,"crisis-oriented":1,sighing:8,laid:54,DeGregorio:2,lain:17,"decision-making":22,gimcracks:4,aforesaid:97,worse:760,"disk-read":1,W:11,boosting:8,peaky:1,immigrated:32,Minnesotans:28,sods:4,Argonauts:28,longterm:3,conceding:8,filter:25,"city-wide":1,heck:235,smokers:4,Carefully:6,Antarctic:2,Saucony:2,separable:1,Hoyte:2,marriageables:4,"trade-magazine":1,"seldom-stolen":1,officious:1,attractions:4,primary:3,"pre-paid":16,Jinny:2,inharmonious:1,Welby:2,"Sainte-Chapelle":2,Kwek:2,Wimpy:2,researched:54,rechristening:8,Congress:11,"long-awaited":1,heights:4,confirming:8,corpus:80,Chevenement:2,frailest:51,illiterate:1,leaking:30,Flanagan:2,kindest:51,"Borg-Warner":2,"SH-11":2,Tanzman:2,Managed:17,unsaid:1,Wilcher:2,immigrants:4,tourists:4,"X-MP":2,Apprehensively:6,"pre-tested":17,MacSharry:2,Seveso:2,"market-corporate":1,Escort:2,Guillermin:2,Farmington:2,"most-influential":1,"Tampa-based":1,"net-like":1,"Off-season":1,puritanical:1,Linwood:2,Erle:2,overallotment:439,Sylvie:2,rodents:4,hatch:24,geographers:4,Gibbons:2,Meigher:2,Lenygon:2,Shafer:2,ProBody:2,"energy-adjusted":1,Grasslands:65,Shooter:2,SPWL:2,diversifying:8,Ceilings:4,structively:6,feint:25,Paced:17,Warrens:4,promotions:4,Saved:2,Bourbons:111,Voices:4,Burdened:17,"Mexico-United":2,Declares:20,Giovanni:2,phenomenally:6,registrants:4,Loomis:2,"output-restricting":1,bait:25,"Pro-Family":2,alight:82,confabulations:4,wedging:8,"insurance-claims":4,Martinelli:2,colors:18,Heyward:2,Lunday:2,"self-indulgent":1,bail:63,graded:17,Edict:2,spite:25,orienting:8,spits:20,knuckle:25,Racketeering:2,"Inter-american":2,"Bengals-Browns":1,Finals:4,leasable:1,Anxiety:11,pillorying:8,unhurried:1,"twentieth-century":3,despite:127,botanical:1,Matilda:2,Clanahan:2,Kagakushi:2,Moore:2,Kaldahl:2,anxiously:6,Schoenfeld:2,"pro-choice":1,Moors:28,NagyAntal:2,"C13532":2,Lamson:2,"inter-agency":1,Guilherme:2,BPCA:2,Vineyard:2,Textile:11,Excuses:28,Ants:4,Pitching:8,disturbing:13,UniHealth:2,Mathilde:2,"Jean-Marie":2,feline:1,Utilities:130,continually:6,discovers:20,Anti:2,empower:33,Roundup:2,Trek:2,Colored:40,"wide-grip":1,Tree:11,however:664,Sambuca:2,cashiers:4,absorbent:1,Among:127,Cruiser:2,Bucay:2,Tennant:2,mildly:6,Roads:113,behaviors:4,smuggled:54,"gay-rights":4,"single-A-minus":3,agitators:4,wretched:1,"mild-voiced":1,Hengesbach:2,dissipating:8,padlocked:16,subscribing:8,Literature:11,"financial-data":1,seein:8,"credit-ratings":4,moneymaking:3,captives:4,Amway:2,Sakowitz:2,stepladders:4,Stallings:2,anchors:18,Revitalization:2,"Zingggg-O":106,Javanese:1,Alexandra:2,Alexandre:2,"touch-starved":1,Sartoris:2,combos:4,Analytic:2,Grinten:2,"multi-million":1,legislating:55,NAREB:2,BLACK:66,Constructions:2,"Corp.:8.50":2,Spokesman:2,sidestepped:32,Horses:4,Nazar:2,usurping:8,Nazal:2,Development:11,screw:25,Paglieri:2,numerical:1,buyback:3,"capital-market":3,Junkers:28,Beckworth:2,HPB:2,gemsbok:4,possessed:32,endorsements:4,SAMOS:11,admiringly:6,Clothing:47,possesses:20,leagues:4,rubies:4,departed:85,proposed:761,Thevenot:2,Thevenow:2,bruise:25,Credito:2,Forms:65,proposes:20,Hegelian:2,leagued:17,rivulets:4,scattering:8,Nicosia:2,enlighten:39,"bargain-priced":1,cherry:3,Conspicuously:6,"sub-human":1,Keefe:2,Debt:47,flavorings:4,farmsteads:4,DeMeo:2,"low-VAT":1,skeptics:4,metaphorical:1,Nadja:2,burne:39,flattish:1,"first-base":1,"go-getters":4,burns:18,burnt:14,Munsters:28,Heart:11,Relevant:1,peeved:17,mansions:4,contradict:42,Probhat:2,Topic:2,Heard:157,peeves:18,pursues:20,uninterruptable:1,"Nelson-Atkins":2,reams:4,Hearn:2,"nuclear-weapons":152,Fitzwilliams:2,Again:150,Merchants:130,Topix:2,stringing:8,"left-front":1,"freer-spending":1,LaBella:2,clucks:72,Piovra:64,usher:24,Waertsilae:2,Plates:4,contests:4,Luksik:2,Strokes:4,Biscayne:2,Mankind:11,kayoed:17,Burnside:2,Accepted:420,Stroked:16,deleted:54,Brodsky:2,Deposit:11,Mello:2,oversaturating:8,"Hewlett-Packard":2,Hershhenson:2,choke:95,ensure:42,inveigh:33,ownself:53,Bolinder:2,Planters:2,dials:18,Meryl:2,Diamanti:2,lavishly:6,"long-cherished":1,obscene:1,bats:18,Steinbergs:2,"aircraft-test":1,Gencor:2,pampers:20,Confidently:6,INDUSTRIES:111,Stotler:2,foisted:32,Amen:762,"fuel-injected":1,destabilize:39,Amee:2,timelier:12,Amex:2,striding:8,JUMPING:2,Centoxin:2,Mantua:2,Ames:2,Amer:2,Infamous:2,amateur:22,GMC:2,GMA:2,bottlenecks:4,Lemuel:2,payable:1,Hardest:380,liveliest:51,Outhwaite:2,"animosity...":102,Brevet:2,Observer:2,Vom:2,Von:87,Tensing:2,Mikeen:2,loitering:21,encumber:39,Swissmade:1,Westcoast:2,panicky:1,"flame-throwers":4,Deseret:2,Maxus:2,"Adios-Rena":2,"no-new-taxes":1,pledging:8,"innovators...":102,"anti-foreign":1,when:763,oratio:64,Blaise:2,"suitably-loaded":1,Lamentation:2,soundly:6,plumbed:16,"government-backed":1,undeniably:6,Blueprints:20,Buber:2,tasteful:1,suppers:4,liquidate:39,"Part-time":1,Contrasted:17,"top...":102,"mark-yen":1,"after-run":1,sacks:4,Boorstyn:2,Barrah:2,"domestic-demand":1,Sergiusz:2,forgoes:20,Crowntuft:2,Peoria:2,Welles:2,Weller:2,epicyclically:6,trickle:44,"resource-wasting":1,rooters:4,tripartite:1,Nazarova:2,Schwarzenberger:2,contraventions:4,"British-born":1,Fatima:2,Truly:305,sequestered:17,Regrettably:6,"durable-goods":4,Flavell:2,"MK-Ferguson":2,Bowdoin:2,widthwise:6,unfamiliar:1,Sonet:2,Keyes:2,"Swiss-born":1,ritzy:1,Delia:2,Methuselahs:28,"well-experienced":1,clouds:18,impressive:1,level:205,Vrilium:2,posts:18,likens:20,Delio:2,"Inspectorate-Adia":2,Purely:6,domestically:6,Debate:78,tenths:4,Enthusiast:2,Flaum:2,tougher:136,industrialists:4,deflating:8,Carolinian:2,Ledyard:2,catapulted:32,"twin-engine":1,toughen:39,bales:4,port:22,"card-activated":1,Kunashir:2,Fathi:2,"high-level":66,stately:1,HEXCEL:2,"self-pitying":1,Merigan:2,Aprile:2,"per-store":1,Apology:2,Senesac:2,EMPLOYEES:4,entertain:39,"three-round":1,WGP:2,mockups:4,Abbett:2,demolishing:8,"upward-mobile":1,Hatfield:2,exams:4,Francesco:2,Francesca:2,"hand-delivered":1,Trafficking:47,videocameras:4,CROWDED:1,sympathique:64,Languages:74,Therefore:691,bribers:4,Sanders:74,"life-threatening":1,neuropsychiatric:1,Hoffa:2,Aktiengesellschaft:2,undersea:1,diagrams:4,roared:16,Hunterdon:2,diurnal:1,Opera:11,Opere:2,"turbine-generators":4,NKK:2,Charter:11,Ahrens:2,edible:1,Dakin:2,Ameaux:2,Harford:2,Bannister:2,"IBM-oriented":1,Wrap:2,druncke:187,Nonfinancial:1,Ground:11,"pent-up":1,nursing:21,Integration:47,Topton:2,Plainfield:2,Felske:2,Noble:2,Acropolis:2,Grassley:2,"co-market":39,"all-new":1,"interference-like":1,vital:1,Blair:2,Aljian:2,Tank:2,Macklin:2,"big-stakes":1,Valeri:2,Valero:2,Tana:2,flattens:20,Beesemyers:2,Carlucci:2,PRICES:91,Bromfield:2,Olerichs:28,Pinar:2,Gelbart:2,syndicates:4,reaped:54,Burning:217,"value-investing":1,"quarter-of-a-century":1,inform:42,syndicated:45,"Operating-system":1,"Yankee-come-lately":1,lamented:16,hassled:17,Aros:2,"chicken-and-egg":1,retools:20,CONTINENTAL:2,imitative:1,donates:20,Klejna:2,Lopid:2,Higher:195,Selig:2,demeans:20,intervenors:4,Hazardous:1,extremis:64,barristers:4,Augusto:2,qualifies:20,Cyclades:4,turtlebacks:4,Augusta:2,Supermarkets:56,Rome:11,rivaling:8,refrigerated:14,Roma:2,"A.V.":2,Romm:2,porters:4,gushing:8,escorting:8,Infant:1,stabilize:42,Lindemann:2,debating:30,donated:54,eighties:4,"wanting-to-be-alone":1,cornerstones:4,Flagg:2,dishing:8,busts:18,lambastes:20,dissenting:13,tidily:6,"third-selling":1,lambasted:32,Devine:2,Valais:2,unrestrictedly:6,Finder:2,"long-stemmed":1,Wheat:129,Gandy:2,uncannily:6,"Barbier-Mueller":2,Jager:2,landfilling:55,committeemen:4,"Five-O":2,Snedeker:2,Samsung:2,unsolder:39,dispatched:32,LaBoon:2,Babson:2,Felipe:2,Vocabularianism:2,dispatches:4,Widen:39,"live-in":1,Spear:59,Franconia:2,Sign:11,turn:764,handicrafts:4,Anticipating:8,cafes:4,Wider:12,turf:22,Gordan:2,Ferrero:2,Speak:260,"market-driven":1,spiralled:16,accruing:8,"toughest-ever":51,Eubank:2,Horowitz:2,"zinc-strip":1,"Mon-Columbia":2,cheerfully:6,Break:169,Leach:2,"action-packed":1,Bombeck:2,Commercial:765,insulins:4,"charge-offs...":102,fortuitous:1,"high-legged":1,Gauntley:2,Phoenician:1,HIGHER:12,IMA:2,Airpark:2,Upchurch:2,IMF:2,Brendan:2,IMO:2,Dowling:2,IMS:2,Minister:2,affiliating:8,"Five-Elements":2,Runtagh:2,reinforce:42,"branch-by-branch":6,Sears:113,Brake:2,unsatisfactorily:6,Jaross:2,Pottawatomie:2,"technology-licensing":1,Fails:18,Tora:2,Toro:11,Bolanos:2,Tort:2,Fishman:2,Clurman:2,EMPIRE:2,Tory:40,astonishingly:6,Drift:2,Bravado:2,Cattrall:2,wandered:16,"X-Tru-Coat":2,Spaulding:2,resembling:8,improvisations:4,surf:78,sure:766,Dealers:56,adversities:4,indelible:1,Hebrew:2,Montfaucon:2,Francoisette:2,COVERAGE:2,surmised:32,"autonomic-somatic":1,"tax-overhaul":3,Antioquia:2,NRL:2,NRC:2,NRA:2,later:767,Ventilation:47,beaded:17,Prodded:17,Bolinas:2,Schick:2,Sportswear:2,uninterested:1,urge:95,"often-ignored":1,"bulked-up":1,reinvigorate:39,pursuant:1,"Vermont-based":1,"semi-literate":1,Anthropic:2,Cornish:2,Gaylord:2,Saddam:2,Convincing:30,crimps:20,glandular:1,"Non-``":133,"Mass\\/Amherst":2,Gaja:2,wistful:1,Preliminary:1,Edythe:2,Techcorps:2,Acclaim:2,"closed-end":1,outperform:347,"African-controlled":1,Denise:2,barbaric:1,Nell:2,"commercial-loan":3,Clueless:2,artworks:4,slashing:8,Taschereau:2,"ball-carriers":4,"back-end":1,Vigorous:1,voluntary:1,Tsitouris:2,illusionary:1,Portico:2,"remote-controlled":1,Kenney:2,"Smith-Hughes":2,barging:8,Himalayas:28,Vos:2,Yff:127,Zosen:2,Himalayan:1,acquiring:8,Irma:2,contract:44,Pantages:4,Rudman:2,designations:4,filtering:55,Michelin:2,"billion-yen":1,HARD:1,Buechel:2,Widespread:1,opines:20,"two-story":1,enunciated:16,Foodmaker:2,consumptive:1,escalated:54,Negotiating:8,tonsils:4,"salt-edged":1,featuring:8,squatters:4,Lawn:2,fishin:8,Madama:2,downwind:218,Madame:11,repond:39,coherently:6,ophthalmic:1,Lidgerwood:2,ashtrays:4,protocols:4,pilot:70,"Jean-Michel":2,"Stern-faced":1,chromatographic:1,obligating:8,entractes:4,career:47,defunded:17,Open:768,Kuan:2,Opel:2,fisted:16,AMEX:2,Politicians:4,minds:4,AMES:2,Salton:2,Mirella:2,granted:81,eggshell:1,Workforce:2,jazzmen:4,careen:39,huzzahs:4,silliest:51,vintners:4,studentled:17,"slow-acting":1,Walkmen:2,Karan:2,weed:25,Dread:2,Banks:46,Sidewalk:11,weep:63,Dream:128,Insurrecto:64,quantitive:1,"Generic-industry":1,sinned:17,maltreated:17,"once-balkanized":1,without:127,deflated:85,Romances:2,coaxing:13,ninth:1,"twenty-page":1,DeBartolo:2,Belgian:66,headhunters:4,wher:293,liters:4,"surprise...":102,emulsifiers:4,lets:20,setting:55,bleats:4,flashing:55,sucked:32,"\\*":769,"men-of-war":4,Deliberations:2,Tamarijn:2,Manu:2,Many:770,inordinate:1,Ortega:2,Mana:2,"J.D.H.":2,Mann:2,Brave:2,"iron-handed":1,"out-of-court":1,Hallett:2,Consul:2,gyms:4,Blaustein:2,Switches:4,AmeriTrust:2,"run-ins":93,donations:4,"wholly-owned":1,"scientist\\/traders":4,Majestic:2,curriculums:4,"just-concluded":1,picture:44,Immanuel:2,LEVERAGED:17,Aschenbach:2,Reuben:2,Luft:2,Located:17,Kum:2,Ellen:2,lentils:4,developmental:1,"Pechora-class":1,Sherrill:2,frees:20,freer:12,"West-German":1,rooming:8,"half-off":1,imputed:14,"debt-to-assets":1,freed:81,Schley:2,KUHN:2,unpegged:1,beached:1,stereotyped:7,Schlek:2,parishioners:4,Billerica:2,Blush:2,stereotypes:4,Playing:8,beaches:4,Regaard:2,Goya:2,reprisals:4,"mega-deals":4,discussed:54,decelerated:17,Quattro:2,discusses:20,"A300-600R":2,Nunes:2,curses:4,instruments:4,Jidge:2,Rostagnos:28,"Sandinistas...":102,cursed:32,Trivelpiece:2,"flea-infested":1,SUES:20,Rorer:2,Lubars:2,"propeller-driven":1,Obelisk:2,there:771,alleged:81,junctures:4,"knee-socked":1,Proclamation:2,"nuclear-armed":1,alleges:72,treat:95,Utsunomiya:2,Singer:11,Compute:39,Ordinarily:6,staunchest:51,"Water-soluble":1,rouse:39,"well-modulated":1,Narragansett:2,offical:1,wholesale:3,artisans:4,Abell:2,whupped:16,Billboard:2,flats:4,creeping:30,Lancaster:2,accentuated:54,Bhutan:2,taste:44,"tri-colored":1,cockeyed:1,accentuates:20,tasty:1,uncovered:45,onerous:1,roses:4,"off-year":1,"c-reflects":20,"lemon-lime":1,proliferate:33,"super-exciting":1,"fuel-efficient":1,pillows:4,Modestly:6,Carden:2,cordless:1,START:2,Faight:2,STARS:113,Holguin:2,inroads:4,PFC:2,blacks:57,Majesty:2,Quotrons:28,Deegan:2,Darlene:2,platted:17,"executive-model":1,Cleo:2,"Hungarian-born":40,Esnards:28,roi:64,ShareData:2,scrappy:1,"off-road":1,logarithms:4,"no-fuss":1,Avnet:2,Avner:2,"re-rescue":39,SHOPS:4,titter:78,facelifts:4,extraneous:1,Dramatic:1,dairy:448,Gardelin:2,Arakawa:2,lawmakers:4,"blood-soaked":1,Axioms:4,tethered:45,uptick:772,Alaska:2,Baulieu:2,snapdragons:4,vacationing:55,beefore:127,Translink:2,"Field-Fisher":2,"Boom-city":2,Testing:47,Fenner:2,Vendors:4,"butterfat-rich":1,Carla:2,Marrie:2,liars:4,Carli:2,Carlo:2,lise:4,familiarly:6,dessier:39,Pepcid:2,abstracted:249,Kravis:2,slavered:16,breakers:4,Naganawa:2,chalk:24,risen:17,Quitslund:2,musts:4,wrongdoers:4,belied:16,brief:104,Milunovich:2,"Drs.":74,Nowhere:6,CEOs:123,Compound:3,Cinq:2,"pre-penicillin":1,unquestioned:1,compresses:18,ruffle:39,"Daimler-Benz":2,mayoral:1,compressed:54,Kaltschmitt:2,Dumez:2,"rocket-bombs":4,Winthrop:2,Absolutely:6,pizzerias:4,bungled:32,switchers:4,Kolb:2,horrified:14,"Japanese-American":1,gyrated:32,tragedians:4,binders:4,Thoroughly:305,Smithsonian:2,Gisele:2,Artzt:2,"Chien-Min":2,apprentices:4,Circumstance:2,Beatty:2,"Mayor-elect":2,Supper:11,Immediately:6,courthouses:4,Hammersmith:2,flat:34,Erich:2,flay:39,mutely:6,Morocco:2,flag:25,Mass:129,Fresenius:2,Nacchio:2,Lightly:6,Gymnasium:2,besides:206,Greaney:2,Finalists:4,yanked:32,salted:45,Nepal:2,"quota-trained":1,libertarian:1,Fortin:2,"pro-union":1,Quebecois:2,Defections:4,"independent-contractor":1,"toxic-waste-dump":1,Ahmiri:2,exalted:249,"once-loyal":1,Shadow:11,rebalance:39,aahs:4,guttural:3,okay:456,abdicate:149,"estate...":102,orbits:4,"never-ending":1,sponsors:18,Epps:2,Interhash:2,lighting:21,FAKE:1,holored:17,proclaimed:85,short:590,Aiken:2,wallets:4,marching:55,climaxed:32,Logan:2,Playgirl:2,Democrats:474,climaxes:4,shorn:39,"pre-maquila":1,began:16,Yukon:2,lifeguards:4,tanks:4,unimaginative:1,Koffman:2,Tarmac:2,Bianchi:2,chansons:64,Confindustria:2,"fourth-hand":1,clashed:54,Clinics:2,Monticello:11,clashes:18,Binder:2,ebulliently:6,bout:773,dimly:6,oftentimes:6,Safra:2,Oxford:2,hunted:45,Spain:2,Seward:2,adventurous:1,Halperin:2,Racquet:2,policyholders:4,Consultants:130,mastered:54,Midwood:2,Hospitals:56,"Christian-dominated":1,Larson:2,bolstering:8,Castroism:2,weight:25,Saints:74,Lothson:2,Debra:2,Mud:2,Cleota:2,transistors:4,cloudy:1,SuperDot:2,standards:4,"English-Dutch":1,Equifax:2,foolproof:1,frittering:8,commemorative:3,"said.``":133,"see-lective":1,"half-grown":1,guess:256,Caprice:2,czars:4,Corvettes:4,Brestowe:2,echelons:4,jet:78,Molding:47,Polyphosphates:4,Eloy:2,"clipboard-sized":1,fallen:14,Eloi:2,Ostpolitik:2,enlarges:20,Oklahoma:2,Keeps:20,Territories:74,enlarged:81,"mine-hunting":1,illustrating:8,Sinan:2,Shaver:2,Tintoretto:2,rookies:4,Geman:2,interviews:18,Fayette:2,Pleasant:40,trend:25,Larry:2,"transparent...":102,fought:32,Abroad:150,mainstay:22,unmentioned:17,insolvencies:4,Elementary:40,scanners:4,McAuley:2,amass:42,"pre-emption":1,Borland:2,exert:42,Zionist:1,Swisher:2,Zionism:2,Keio:2,"J.B.":2,hopelessly:6,Iceland:2,Romagnosi:2,Eppler:2,foamed:103,Hamey:2,"Cities-ABC":2,electric:3,populate:42,Sternenberg:2,RBS:2,Arkhangelsk:2,"Six-month":66,Zhao:2,Bohemian:2,storefronts:4,defensible:1,RBC:2,"Reeves-type":1,Marsam:2,diversifed:17,"order-processing":1,traditional:1,obediently:6,liberate:39,Colfax:2,restore:42,Profit:47,Shack:2,Efficiencies:4,fining:8,Haruki:2,Brumby:2,grazed:16,witty:1,axial:1,Hampster:2,"pink-sheet":1,Sorecom:2,northerners:4,Homebuilders:28,Specialties:2,"levi-clad":1,Tavoy:2,grievances:4,BW:2,Kandahar:2,Meselson:2,BP:2,cringe:149,Christopoulos:2,overhauling:55,Households:4,unflagging:1,"six-cent-a-share":1,chambers:4,Reformed:40,"more-stringent":200,threats:18,Hinchliff:2,Miniscribe:2,Trego:2,"upper-deck":1,Mottram:2,tactically:6,Buttacavoli:2,climbable:1,Blackburn:2,Could:190,Khouja:2,baleful:1,bibs:4,Dhuu:2,Bonnor:2,Teenage:2,paradigms:4,Meadow:2,sheaths:4,renegotiable:1,unincorporated:1,Counseling:47,Spurdle:2,Trujillo:2,"economy-lodging":1,Cheddi:2,Cotton:11,reside:149,"limp-looking":1,regulates:20,Maserati:2,previewing:8,sweet:1,sweep:25,"F.J.":2,regulated:81,"Post-Graduate":2,banditos:4,tepees:4,startling:13,Saftey:2,Reforms:4,Properties:46,flinty:1,softest:51,cinch:25,demand:44,Memoirs:2,Irian:2,frozen:14,Boots:113,Solemnis:2,Booth:2,Eckerd:2,insistently:6,concurrently:6,napped:16,Vicenza:2,Shrewd:1,Semiconductor:11,Dominated:17,Harbors:28,chestnuts:4,"spell-binding":1,"Pp.":19,"anti-cancer":1,"cross-marketing":13,Adventure:11,Leyse:2,absentees:4,monolithic:1,"Mo.-based":1,Itel:2,essences:4,peacemaking:22,impede:42,contractors:4,"bronzy-green-gold":1,"third-period":1,bourgeois:3,deflects:20,overemphasized:17,Hoechst:2,Treasurys:41,Miller:2,awaye:6,Druin:2,Socialists:57,Geology:2,Millen:2,"Cos.":74,dulling:8,spindled:16,unseen:1,Seems:72,"Sec.":47,Madre:2,Bohlen:2,shootings:4,arrowed:1,Rainman:2,Arnell:2,"F16s":4,"U.N.-supervised":1,grottoes:4,Matsu:2,Krumpp:2,tormented:14,acrobatics:4,Handy:2,Banoun:2,Performances:28,Raghavan:2,Smedes:2,Seco:2,Fashion:128,Landmark:2,Martoche:2,Penthouse:2,"and\\":119,systematically:6,admittedly:6,Candace:2,collect:347,Dearie:2,"Bifutek-san":64,Rinascimento:2,AirTran:2,Mulvoy:2,engravings:4,Lemon:2,Sixties:65,Dhofaris:28,sauces:4,"documentary-type":1,Murfreesboro:2,retry:39,Mareb:2,inoculate:39,shamrocks:4,"bankruptcy-law":22,retro:1,Marer:2,contrasting:30,meretricious:1,Tennyson:2,Dreieich:2,Prejudice:2,Lavelle:2,"Govs.":2,GUIDE:2,Roh:2,cautious:1,Unleaded:1,runes:4,Ron:2,Rob:2,Rod:2,Roe:2,associaitons:4,Roy:2,"double-glazed":1,quashed:32,complimentary:1,fluttering:8,"Commission-controlled":1,fleets:18,Urbano:2,Senium:64,purporting:8,Pavel:2,"no-tax":1,"Lee-based":1,Paved:17,burials:4,rows:4,entitlement:22,Hildebrandt:2,PARTNERSHIP:2,Brut:2,upheld:32,"Lao-tse":2,"Launder-Ometer":2,Arianespace:2,Kanoff:2,Hrothgar:2,"goods-producing":1,"pumped-up":1,raftered:17,Ashton:2,Franchisees:4,supinely:6,Austin:2,Petipa:2,Cassatt:2,remunerative:1,"city-like":1,Commemorative:2,Lawrenceville:2,landscaped:14,capitalized:81,Mignon:2,capitalizes:20,"clear-eyed":1,landscapes:4,Pitney:2,Talyzin:2,steeped:17,sepia:1,Attracted:17,Arguments:4,teased:54,"higher-quality":3,Orbe:2,Indicating:8,steeper:515,boatyards:4,disappoints:20,Fuster:2,Heberto:2,"High-tension":1,These:246,Gottesman:2,Fielder:2,Kolff:2,TNT:11,"Mallet-Prevost":2,users:4,Walford:2,"eighty-fifth":1,breasts:4,fertilized:14,TNF:2,Ranyard:2,posters:4,TNN:2,"California-backed":1,happier:12,Longstreet:2,Stansbery:2,curvaceously:6,"semi-rigid":1,"fat-tired":1,Deller:2,impatient:3,"private-banking":1,"non-social":1,impatiens:4,vocally:6,reined:32,"F.W.":2,Europeanish:1,vue:147,"clinical-products":4,Politizdat:2,Finsilver:2,Cooling:47,gang:25,Department:11,cases:18,"cat-like":1,Monagan:2,Lithox:2,Lille:2,fortresses:4,"high-mileage":1,Paquin:2,breach:25,unsettling:13,Arroyo:2,"re-animated":1,mainstream:168,Amidst:127,Rhodes:2,Zenaida:2,P:47,Allende:2,"re-animates":20,Jarmusch:2,downgradings:4,"volume-wine":1,Tedi:2,Congdon:2,bonds:4,Coletta:2,workouts:4,Vevey:2,Cygne:2,"copper-based":1,Arseneault:2,Allentown:2,Skywalker:2,Novaya:2,thynke:33,"life-time":1,folk:19,Mekong:2,showcase:22,concessions:4,Formed:17,investable:1,Former:66,LENSES:4,Billock:2,voluntarily:6,"re-arguing":8,monetary:1,youngest:51,gloat:63,Enimont:2,adjoined:16,Chantal:2,Begley:2,INVESTMENT:11,distressed:7,Haverfield:2,Insight:2,shades:4,leaving:55,"bond-futures":4,Moross:2,submerged:14,pitchmen:4,lighthearted:1,writes:20,distresses:18,"up-to-date":1,improbably:6,apt:1,improbable:1,walruses:4,Appraisers:28,hypothetically:6,"six-foot":1,constitutionally:6,Arranging:8,eagles:4,freezers:4,grandest:51,clever:1,homopolymers:4,opiates:4,antennae:4,"clean-burning":1,Murmann:2,capitulated:32,antennas:4,fraternize:39,disingenuous:1,Nucci:2,Hemming:2,mounded:32,"liquid-crystal":3,profitting:8,cubists:4,Hemispheric:2,Vamp:2,palpitations:4,Varner:2,dissolve:95,Dwyer:2,persuades:20,Science:11,"G.P.":2,Rimstalker:2,inaccessible:1,Forests:41,Alistair:2,clomped:16,lessers:4,Buttavacoli:2,Guandong:2,Laidig:2,"well-founded":1,"mid-term":1,hinders:20,justifiable:1,struggles:18,Afnasjev:2,"fiscal-first-quarter":1,justifiably:6,struggled:32,Montero:2,Campobello:2,Dorfman:2,Reading:258,Soba:64,Noranda:2,monthlong:1,tack:44,restructures:20,Orchestration:2,Dronk:2,Cognos:2,Vickery:2,majorities:4,Vickers:2,Anac:2,arduous:1,Demme:2,Pamasu:2,"six-year":1,Norgle:2,"broad-scaled":1,colognes:4,beauties:4,Shellpot:2,"goof-offs":4,reporters:4,meager:1,Sophomores:4,Shaevitz:2,bolognaise:64,Cecilia:2,Elyria:2,GENENTECH:2,Poszgay:2,TransAmerican:2,campaigned:32,"pan-national":1,idiomatic:1,latermaturing:1,interstellar:1,Eddies:2,"land-based":1,Nederlandse:2,Estherson:2,crystallographers:4,Turnover:47,landings:4,articles:4,"E-2C":47,"Stanford-Idec":2,trimmer:12,Nogol:2,Slowing:30,trimmed:774,"strike-bound":1,Calderon:2,hosses:4,dogmatic:1,oui:64,Moiseyev:2,"car-happy":1,Oryx:2,Chaucer:2,our:404,Structures:92,additions:4,out:775,Borrowed:17,Genigraphics:2,southerly:1,hagglings:4,Warrenton:2,cerebral:1,Fabi:2,telemarketers:4,plaguing:8,Goldwyn:2,IDA:2,"fourth-consecutive":1,disclose:42,Fists:4,insecurities:4,Dianne:2,BURBANK:2,Unconcerned:1,Azioni:2,Verification:47,miscellanies:4,Agnew:2,Agnes:113,informs:20,Durante:2,"grass-green":1,"York-born":201,Hyde:2,Diving:47,Hallucigenia:2,Divine:129,"recession-wary":1,Wadsworth:2,Bartholow:2,realtors:4,"little-noticed":1,galvanized:103,Gyp:2,outstate:1,umbrellas:4,Valery:2,"M.D.-speak":1,Dickensian:1,wagging:8,Fitz:2,Brokers:56,Duston:2,Hawk:2,Moscone:2,Hawn:2,Trader:2,Trades:28,disheartening:1,Kirschner:2,Hauptman:2,mules:4,diminish:42,Koopman:2,Traded:157,Reactions:4,"U.S.-U.K.":1,succeeded:54,objectionable:1,Vessel:2,"Lyme-disease":1,Peter:2,"M&A":11,tracts:4,clip:25,"M&H":2,Anton:2,recyclable:1,coalesces:20,Norborne:2,Jody:2,linked:45,ringed:7,Cheryl:2,pupils:4,Orlowski:2,Bayerische:2,Airfones:4,unbearably:6,Dewey:2,"energy-services":152,leakers:4,bellwethers:4,accountants:4,digestive:1,Klass:2,Panels:4,Cyprian:2,spirits:4,subjective:1,Shoppes:113,whipsawing:21,Slim:40,trounced:16,Actions:4,"Atty.":2,"open-handed":1,VeloBind:2,Huck:2,"post-Revolutionary":1,agreed:112,"large-denomination":22,artfully:6,docilely:6,Terral:2,weekly:776,fear:44,Genossenschafts:2,postulates:4,nearer:777,Sekisui:2,postulated:14,studded:17,local:3,"not-yet-married":1,plazas:4,"agree.":39,"symptom-free":1,monuments:4,Platzer:2,massacre:25,Champagnes:4,burglars:4,misbranded:1,"post-attack":1,Providing:8,manye:1,differential:3,nonracial:1,ITEL:2,leviathan:3,avoidable:1,ascertain:39,Sevigli:2,Draco:2,Kueneke:2,Einhorn:2,predictive:1,Philco:2,"State-controlled":1,Branching:2,Friedenwald:2,"longer-lived":1,"pigeon-holed":1,Bowls:2,buzzed:16,"non-cyclical":1,luminous:1,Orben:2,Galatians:28,drawling:8,droughts:4,favor:24,boughs:4,Affect:39,yellerish:1,bought:32,Foerster:2,Conception:2,opening:27,"Smith-Kline":2,Hokey:1,Vector:2,"fast-firing":1,Jury:11,Pretoria:11,Retrieval:2,Kemper:2,Mets:74,Peladeau:2,Metz:2,theoreticians:4,"natural-foods":4,Meta:2,"non-British":1,tactical:1,unclear:1,Lila:2,Harriman:2,environments:4,Thieves:4,Lonsdale:2,connotes:20,Lily:2,unclean:1,Shoettle:2,occured:16,Mendes:2,choosier:12,Mendez:2,reservations:4,"No-Cal":2,"symbolic-sounding":1,Guild:2,bedded:17,Pothier:2,dressers:4,pageants:4,tangible:1,Ennis:2,Porsches:28,verbenas:4,admonishments:4,"management-led":3,fearful:1,Concludes:20,Preyss:2,"black-crowned":1,ringing:55,Miner:2,Abernathys:28,Sunlight:2,thum:53,"co-edited":1,Troup:2,gyroscopes:4,"weak-kneed":1,Trout:2,pilgrimages:4,"twin-engined":1,PROPOSED:16,"eight-week":1,subcontract:520,waitresses:4,Wishing:8,geographical:1,largest:380,"Communist-inspired":1,Insights:28,clamors:20,Billikens:2,"hunting-gear":1,Purdue:2,conceived:45,"Axa-Midi":2,throngs:4,laborious:1,conceives:20,"PLO-backed":1,Janizsewski:2,undertakes:20,Kopcke:2,DuCharme:2,banging:55,catastrophically:6,"medium-duty":1,StatesWest:192,undertaken:17,decliners:4,excessive:1,Deliver:39,"once-vast":1,reincorporated:17,Romo:2,Engrg:2,underperforming:492,Weeks:113,envisaged:32,"z-Not":6,"post-Vietnam":1,uncommonly:6,arresting:30,arylesterases:4,Sacrestia:2,Genel:2,jars:4,"more-powerful":12,astrological:1,MacWhorter:2,"high-leverage":1,Lubkin:2,"Adios-On":2,blueprints:18,frighteningly:6,envisages:20,facial:1,Schumacher:2,press:24,Ethernet:2,countervailing:13,Zurn:2,"truck-parts":4,Tangible:1,Paranormal:2,Kenyon:2,wonders:18,Sue:2,Amdec:2,"spot-news":4,Sun:11,Sum:2,flagrant:1,expositions:4,Saicheua:2,Suu:2,Sut:2,Sur:280,vicarious:1,synchotron:1,"Nike-Zeus":2,"text-ordered":1,breakthroughs:4,Sponsors:4,staccato:80,dipoles:4,vesting:8,Energized:17,Andee:2,"Penna.":64,Jewel:2,Andel:2,Andes:111,Darlow:2,Remove:39,"item-veto":82,ECPA:2,Ellamae:2,"non-Hispanic":1,inboards:4,Americana:646,Americano:2,"Sheller-Globe":2,Stigmata:4,"dial-a-banker":1,Hepker:2,Portrait:22,Pointer:2,Pointes:2,converging:8,Morgan:11,"previous-month":1,Juan:2,"corporate-bond":1,"F-series":778,weather:44,promise:44,evoking:8,unrifled:1,"iron-clad":1,Lightstone:2,fawning:13,"CH-47D":2,egalitarian:1,transfer:44,Invitations:4,Amy:2,Brinsley:2,Stoic:40,resists:20,Amp:2,Amt:64,Prominent:1,chalky:1,hilar:1,Gunton:2,Turandot:2,assail:39,Bangladesh:2,Fantasia:2,Consumer:11,JoAnn:2,distract:39,catching:55,infusions:4,sympathizing:8,"government-ordered":1,carborundum:1,Horten:2,sheered:16,"Shanghai-born":1,Soichiro:2,duplicative:1,Corby:2,Cortland:2,Wines:2,Brundtland:2,curtained:1,Lufthansa:11,COPE:39,Merion:2,incredibly:6,"hot-pink":1,shredded:249,"Torrid-Mighty":2,Future:129,"agrarian-reform":1,perfectionists:4,exchangers:4,"pre-Punic":1,coupling:55,Omni:2,Lavaughn:2,seceding:8,Orders:57,Bogart:2,"smoke-filled":1,HIGHEST:51,Assurances:74,"life-death":1,YORK:2,unscientific:1,writings:4,finessed:32,Killers:28,Leaping:8,Abbas:2,rocketing:8,Sundance:2,ornate:1,conjuring:8,Woodwards:2,conjure:42,Tiles:4,herpetologists:4,"bank-holding":450,homemakers:4,"corporate-tax":1,swivel:104,Riegger:2,deli:4,"test-fired":17,preceeded:17,Mayberry:2,synthesizers:4,"seven-eighths":152,uncertain:97,differentiated:81,prize:779,Publique:2,"Tele-Communications":74,Piccolino:2,"tax-exempt":1,implanting:8,specialties:4,coolers:4,Desperate:1,"green-brown":1,"eye-popping":1,Evidently:6,Screw:2,charter:22,BEI:2,Lubberlanders:4,BEA:2,"Kelly\\/David":2,stiffens:20,"pro-Communist":66,icebergs:4,charted:17,shrugging:8,sterile:1,BET:2,hilariously:6,"country...":102,Appeal:376,ruthless:1,Boley:2,"dollar-cost":3,decry:42,OmniBank:2,Poltava:2,Hooper:2,"Bedford-Stuyvesant...":102,Presidential:66,Goverman:2,"off-again":1,intentioned:1,Church:11,interdependent:1,Varviso:2,strewn:17,shareowners:4,sloshed:16,"Gas-reactor":1,Elman:2,"sale-purchases":4,Choosing:8,Rognoni:2,Alternative:66,Goliath:2,Compared:17,divide:182,Frist:64,warrantless:1,Gatlinburg:2,Reznichenko:2,Skeptics:123,cheating:21,"best-selling":186,Slate:2,Varity:11,"non-Tories":4,"five-person":1,highflying:1,CarCool:2,Stepanovich:2,Calves:4,"snap-on":1,relay:182,relax:42,Softsoap:2,Halma:2,tying:8,pontifical:1,epicyclical:1,unaffiliated:1,orney:1,famed:7,afar:6,Pursewarden:2,Enchaine:2,Richardot:2,fames:4,Golub:2,Cardiovascular:2,DPW:2,vanities:4,DPT:2,DPS:2,newsweekly:6,"co-pilot":19,organized:45,Briar:2,dragons:4,Brian:2,Bike:2,DPC:2,Daze:2,McClelland:2,McCurdy:2,Lloyds:2,Benoit:2,"nitrogen-mustard":1,"Eagle-Picher":2,cheetal:1,shored:17,envied:16,"fiber-coupled":1,Rattigan:2,quips:72,destined:17,chums:4,Petersen:2,obscuring:8,Ormat:2,effective:344,Rensselaerwyck:2,"well-ruled":1,luring:8,snowballs:18,specks:4,Another:89,"always-present":1,repatriated:17,Kenilworth:2,squint:33,evocations:4,Monterrey:2,Cuisinarts:28,Sigurd:2,USAir:11,CHALLENGED:17,OFFERED:780,CBOE:2,vary:149,Brew:2,Ruffians:4,CBOT:2,Decades:4,"bread-and-butter":1,"well-received":1,PARTNERS:56,"all-exclusive":1,lovingly:6,McDougall:2,directional:1,Offered:157,bewteen:127,matured:32,hidden:14,glorify:42,Volvo:2,slicing:8,wholesalers:4,DuComb:2,"non-absorbent":1,"hyped-up":1,structural:1,APS:2,APV:2,APT:2,LaLonde:2,API:2,APM:2,"Thirty-three":2,interfering:8,Seidel:2,distillers:4,Labothe:2,Balogh:2,blinded:17,Byrum:2,Alastor:2,Dexatrim:2,Lefebvre:2,waive:39,Godfrey:2,phenolic:22,Almagest:2,Garanti:2,University:11,Secesh:2,Frisco:2,Notarius:2,alert:279,knit:781,Erdolversorgungs:2,"tie-ins":91,enlist:39,"his\\/her":12,Carolingian:1,bated:1,Delbert:2,Yamaguchi:2,waists:4,"mid-priced":1,Ponzi:2,"selection-rejection":1,Gurria:2,adepts:4,Yoknapatawpha:2,"loss-making":1,Postelle:2,wash:205,instruct:42,Rall:2,Cullowhee:2,"Hesse-Darmstadt":2,POLITICS:4,Stringer:2,Proctor:2,Vauxhill:2,Muggeridge:2,"two-bits":4,"R-6th":2,touting:8,listed:45,blossoms:4,underlie:149,"mid-fifties":4,listen:42,predictably:6,predictable:1,hayfields:4,"MIPS-based":1,Beautiful:66,Give:39,outlaw:63,halogens:4,"one-twentieth":3,Feess:2,seminars:4,Poussin:2,Attitudes:4,"Irish-Soviet":1,Jarrodsville:2,Angelo:2,PENCIL:2,Gradually:6,Angell:2,Bilanz:2,entail:42,privvy:1,Sumter:2,Angela:2,"Wis.":2,"side-stepping":1,"non-AMT":1,Mnuchin:2,Goloven:2,Angels:41,Williams:2,Flexural:1,"ex-Gov":2,concrete:3,Conlin:2,nagged:16,Schrage:2,"Angel\\":2,agressive:1,Russo:2,"Selway-Swift":2,Guglielmo:2,Wise:40,miscalculated:32,Stevric:2,doin:8,"Direct-mail":1,ipso:64,trapping:55,Dyer:2,undamaged:1,infidel:1,regulative:1,Ragavan:2,rollickingly:6,Meshulam:2,"kingdom-wide":1,departing:8,magisterially:6,Astrodome:2,Cockerel:2,SCHWAB:2,soluble:1,Confessions:41,Battenkill:2,shuffling:55,cousins:4,wasting:5,unreassuringly:6,Scandalios:2,stropping:8,Scrambling:8,Millicom:2,"Woman\\/McCall":2,Sweating:8,sniping:21,ELSINORE:2,kittenish:1,Taviani:2,Labor:11,Teletrac:2,"on-board":1,Completions:4,"off-farm":1,altruistically:6,Galen:2,flanked:32,Aricaras:28,Bottling:2,blew:16,Adrar:2,mandatory:3,fair:34,Hustead:2,Crawfordsville:2,exhanges:4,Daer:2,bled:16,faim:64,essayists:4,Craddock:2,Shelter:47,hunker:39,Convocation:47,Cusa:2,unalterable:1,Peugeot:2,ooze:25,invigorated:17,Clarion:2,Hessians:57,lefthanders:4,Reproduction:2,Horsham:2,angling:55,Capello:2,conclusions:4,Patients:57,Stratford:59,"up-front":1,dents:4,Leche:2,federalism:22,Aberdeen:2,vain:97,Pelto:2,Axelrod:2,Telegraph:2,Peltz:2,Holidays:4,EXPANDS:20,BPD:2,penalize:42,contestants:4,Kindertotenlieder:64,provincially:6,breathlessly:6,startled:45,Deadwood:2,Hewlett:2,Flowers:41,Pipeline:2,Vida:2,"Stuart-James":2,Confederations:28,harangues:18,Mothers:41,Waban:2,"Spanish-speaking":1,"fast-forward":1,moneys:4,harangued:16,pandering:8,paralegals:4,Boulet:2,Boulez:2,diverted:54,"phobic-like":1,ferreted:32,Peterhouse:2,"gray-beard":1,harvesting:21,skirts:18,biotech:3,Gainers:113,McGovern:2,"gas-gathering":13,FHA:2,Ealy:2,obeying:8,Domokous:2,Capitan:2,Capital:11,aqueducts:4,FHP:2,trusted:45,Topping:8,Killingsworth:2,Ulyate:2,Understandably:6,cumulative:1,Uncommon:1,haphazard:1,washouts:4,fairly:6,Intech:2,Mandhata:2,tops:18,hackneyed:1,Matsing:2,Khomeni:2,Acala:2,"H2Owner":2,SENIOR:1,"different-color":1,rescinded:54,Dorgen:2,Brazelton:2,"off-exchange":3,opinions:4,Russell:2,givin:8,"already-identified":1,Notebooks:113,disguise:95,financially:6,uncombed:14,Rebates:4,"market-style":1,Discours:2,campaign:25,bijouterie:64,Lautenberg:2,"middle-of-the-road":1,gooshey:1,"St.":11,DAMAGES:4,Apart:150,abashed:1,casually:6,Trinitarian:2,possible:97,firmer:299,Alamo:11,barnacles:4,Emilio:2,Byrd:2,firmed:32,Grass:2,Lords:41,Sheremetyevo:2,"new-found":1,seaside:3,prepositioning:1,steps:18,Lorde:2,bruited:17,bonkers:1,Mmes:28,macabre:1,broadcasters:4,"specially-designated":1,equestrian:1,Ihor:2,attendees:4,for:782,Dunton:2,fog:25,Tapley:2,Armenia:2,"H.R.":2,foh:127,colles:64,Lifestyle:2,"dollar\\":1,Garbutt:2,"By-word":1,unfixed:249,Burrillville:2,Czarship:2,Macon:2,insets:4,boycotts:4,dollars:4,citizens:4,turbinates:4,"Slo-Flo":2,makersa:4,AG:2,homesteads:4,rebut:39,"extra-literary":1,shopkeepers:4,Airgas:2,Fairfield:2,presenters:4,problematical:1,AF:2,spores:4,Cress:2,Crest:2,uneventfully:6,Silent:2,unambiguous:1,"Governor-General":2,Approached:17,Sabaneta:2,Elvis:2,Itsuo:2,"stock-purchase":1,"one-time":1,Sauter:2,"late-payment":22,Approaches:4,"ill-starred":1,physicists:4,"step-by-step":1,call:551,"benefits-services":1,halls:4,"million-unit":1,therefrom:6,manufacturers:4,Column:47,Tillery:2,demographically:6,shrilly:6,Bullion:2,udon:64,Lyubov:2,"once-promising":1,Tallarico:2,circumstantial:1,Lundy:2,ceteras:64,"cut-down":1,Whoever:76,"Waldorf-Astoria":2,Engineering:11,Prab:2,Honiss:2,lays:72,palm:25,Enrique:2,"Amsterdam-Rotterdam":2,looms:72,proved:85,"S.J.":2,Informal:1,drovers:4,fattened:54,proven:14,crumble:39,soothe:39,proves:20,Bakker:2,"Ab1,040":2,Knoll:2,McDaniel:2,protested:32,Leichtman:2,curiae:64,"school-leaving":1,conferring:8,Ojibwa:2,developers:4,"Pork-barrel":1,directionally:6,McNamar:2,maimed:1,"anti-wrinkling":1,"toned-down":1,Ranke:2,Englander:2,"asbestos-removal":22,Yemenis:28,Brought:17,Datapoint:2,"thyroxine-binding":1,Reporting:2,STORES:74,Stressed:17,Yusen:2,jarring:30,forage:22,Edisto:2,"RCA-Victor":2,"Market-if-touched":1,"core-jacket":1,suspending:8,"de-facto":1,Patricof:2,Jumping:783,shouldda:784,Iken:2,platitudes:4,Yusaku:2,Appointed:17,Mitsukoshi:2,cheap:34,"two-way":1,"merchandise-trade":1,ergotropic:1,"cornflake-size":1,Bosley:2,"pressure-sensing":1,trod:17,Bosler:2,Overwhelming:1,tear:95,Kali:33,unscripted:1,"Lamy-Lutti":2,team:44,inscribed:45,outdrew:16,prevent:42,"no-win":1,"side-stepped":32,"soft-spoken":1,"U.M.C.I.A.":2,educate:39,trop:64,Poppea:64,Afford:39,"three-door":1,Haverhill:2,reminiscent:3,necrotic:1,freaks:4,"L.A.":2,True:785,Trud:2,"pre-reform":1,reread:786,palindromes:4,cribbing:8,"memory-expansion":1,Warned:16,Traditionalists:28,Selectives:28,muskets:4,Namibian:1,assassinating:8,crumbles:20,bunkered:17,vitiates:20,thereunder:6,"four-inch":1,crumbled:112,"Prize-winning":1,love:787,bloods:4,Lie:128,"D.D.S.":2,bloody:1,Friedrich:2,qualified:48,consderations:4,"once-indomitable":1,traversing:8,Ranging:8,Limbo:2,cherishes:20,positive:3,"marketing-data":4,tightly:6,imaginations:4,cherished:81,wondering:55,"German-French":1,Balmy:1,introducing:8,"``":133,Syferd:2,Knogo:2,"half-digested":1,odious:1,visual:1,degrade:39,LDI:2,Blackwell:2,honey:788,DISTRICT:1,Conreid:2,"Istel-type":1,nether:789,values:18,"toll-free":1,"write-downs":91,Federal:40,catheters:4,"currency-market":1,Galahad:2,"Drug-Treatment":1,Wha:79,"A\\":1,fatherly:1,grosses:20,Liz:2,fps:4,grossed:16,"pro-growth":1,"four-to-one":6,Why:790,"five-year":1,"rubber-stamped":1,Sausalito:2,Herrington:2,mortally:6,spot:139,Pyzhyanov:2,applications:4,misshapen:1,Chiller:2,"Greek-born":1,Magadan:2,acceptances:4,filthy:1,shockingly:6,disagreeable:1,supersonic:1,"News\\/Retrieval":2,freestylers:4,"razor-edged":1,"Ciba-Geigy\\":1,Teleport:2,Wrath:47,FICOs:4,hiring:55,maneuvered:32,Inflate:39,"multi-million-dollar":1,spewings:4,"mini-post":1,Direction:11,solace:78,protoplasmic:1,cleanest:51,Forney:2,"value-boosting":1,Hispanics:65,Whitney:2,clothiers:4,Pitchers:4,Cahoon:2,embezzling:8,subordinates:18,Folly:11,Maximum:40,Farouk:2,epithets:4,Raceway:11,subordinated:81,Gadwani:2,joked:16,"foreign-trade":3,crushers:4,Pecos:2,"magnetic-tape":3,Bermuda:129,Heresy:2,compulsives:4,NET:1,Vanguardia:2,Jos:2,brags:72,reveled:16,Joy:11,Copie:2,collisions:4,contained:112,Joe:2,"better-than-thou":1,Detecting:8,Ivies:28,Jon:2,Places:57,Placer:2,"near-perfect":1,Mixed:98,Skippy:2,Averages:113,liberally:6,disguised:45,jetliners:4,Consent:2,collapsing:8,acutely:6,disguises:72,bothersome:1,Declinations:4,misused:54,Heath:2,Synthetic:66,Wordsworth:2,"walk-in":1,Lately:150,tooted:16,chubby:1,potted:7,"on-budget":1,sayed:16,Gains:4,Jamieson:2,indicate:42,microscopical:1,typing:21,"full-banded":1,Repeal:25,Pascale:2,Orangeburg:2,Katzenstein:2,blazon:39,Litchfield:2,tuneful:1,meddling:55,Torrid:2,Appeals:41,simmered:54,Torrio:2,Isadora:2,photographic:1,Isadore:2,storehouses:4,"quake-relief":1,"Integra-A":2,Zalles:2,Alf:2,Cavett:2,HOMESTAKE:2,"too-rapid":1,Oratory:2,nicer:12,"Congregational-Baptist":2,SALES:123,Ala:2,"L.A":2,Unsecured:1,Balinese:2,MacArthur:2,Jewish:66,Servive:2,"peace-keeping":22,Kleenex:2,WORKERS:57,Smurfit:2,McGinty:2,Daytonas:2,pagers:4,Ungrateful:1,maneuvering:27,Defoe:2,Montserrat:2,microwaves:4,indentured:17,Separately:150,"direct-line":1,microwaved:17,myne:404,Trainer:2,bads:4,stilts:4,Ormstedt:2,Merit:2,crooked:1,bade:16,Trained:17,"rim-fires":91,forecasters:4,"mini-supercomputers":4,walking:9,Nines:28,Lateran:2,Lateral:2,synchronous:1,Ferenc:2,lettered:16,Gelman:2,Huntsman:2,"Heel-Betty":2,Krishnaists:4,Balkanized:1,entreaties:4,posted:112,Bluebird:2,Westview:2,Juarez:2,surfaced:32,infallible:3,Geraghty:2,intermixed:16,LeCompte:2,maniacal:1,Cohn:2,Linsey:2,bombs:4,"COLGATE-PALMOLIVE":2,masseuses:4,WXRK:2,Dashwood:2,"All-American":2,Biggest:705,Cumbancheros:2,Olivetti:2,"cash-raising":3,enlightening:30,wielding:8,bootleg:3,"broadcast-and-cable":1,testimonials:4,Quad:2,teens:91,presage:42,Debora:2,inappropriately:6,McLean:2,unpremeditated:1,Directors:56,reigns:20,Tolentino:2,Directory:2,undermine:42,Gisors:2,Kalison:2,twotiered:1,Schnacke:2,nomias:57,"bare-armed":1,WWL:2,walkers:4,Virgilia:2,guesstimates:4,Sudier:2,Deus:64,throttled:17,Reames:2,vacation:78,"seven-year-old":1,needlessly:6,"Caravaggio.":2,daylong:1,"start-up":719,Depew:2,mischarges:4,"Matra-Harris":2,Birth:2,Ellwood:2,rooftops:4,"pass-through":1,Greatest:705,felling:8,ALII:2,"Chicago-Montreal":2,Grains:57,Quantum:2,perpetuate:42,"MX-6":2,Jihong:2,"O-B":2,"hard-edged":1,reliefs:4,"RISC-based":1,Machado:2,graceful:1,"Istiqlal-sponsored":1,Rios:2,Cedars:28,Macrophages:4,Thaxters:28,coconuts:4,Granther:2,"war-like":1,decertified:17,askin:8,oceanographic:1,Spoon:2,Eakle:2,bulletproof:1,Iron:11,"Test-preparation":1,"McCann-Erickson":2,psychiatrists:4,Fleisher:216,veering:8,vacant:1,pacing:5,dancelike:1,retrace:39,Cuddihy:2,Abolitionists:4,Incarnation:2,truculent:1,exaggerating:8,"pay-cable":3,Abend:2,snarled:16,Proceeding:8,Markets:41,underline:39,"much-smaller":1,Intertan:2,prominently:6,SKIDDED:16,Harvest:2,Decision:11,skies:4,Dammit:405,"Shak.":2,DeForest:2,retract:39,Peck:2,fringed:14,fossils:4,"action-oriented":1,Synergistics:2,GLITTERS:20,Artillery:47,souvenirs:4,undergirded:16,"four-games-to-one":1,slings:4,grouping:21,Zur:64,picnickers:4,thinke:358,Sloan:2,playin:8,racial:1,thinks:20,belched:16,"pollen-producing":8,authenticate:33,dimensions:4,Flannagan:2,"last-place":1,"two-year":1,"pre-18th-century":1,Gershman:2,stroking:21,"First-half":1,Planning:11,Valladolid:2,"ink-jet":1,"retail-based":1,Ruby:2,"Saint-Geours":2,"armored-vehicle":1,leaned:32,destroys:20,"home-buying":3,Neece:2,Thatcherism:2,Albertville:2,Sammye:2,spotlights:20,Stunned:17,"off-beat":1,realignments:4,dibs:4,Radius:2,practicable:1,"ASSOCIATION-COLLEGE":2,gesturing:8,"stressed-out":1,infielders:4,fundraising:55,flawed:7,image:25,woodcutters:4,dour:1,Least:51,"new-share":1,freaked:17,Feralloys:2,fritters:4,SHOPPE:2,"tie-breaking":1,"Ait-Laoussine":2,Empty:66,Lease:11,reinvigorated:17,bookcases:4,"Hans-Peter":2,worshippers:4,Demler:2,Reunification:47,Gompachi:2,hookers:4,Harro:106,EUROP:2,mandates:18,Mahal:2,Mahan:2,Vosges:111,Harry:2,antiquated:1,Caufield:2,oversoft:3,"VAX\\":2,"design-side":1,"sang-froid":64,flatteringly:6,unwaivering:8,Seminar:2,sackless:1,ignorant:1,"well-molded":1,hobbies:4,Outfielder:11,"fifty-fifty":1,Sapio:2,Scoring:2,beaming:30,Payroll:2,Bancaire:2,Tandem:2,Linsley:2,administers:20,MacDougall:2,"near-luxury":1,Kurdish:1,Wickersham:2,lendable:1,enrolled:45,"near-by":677,"Sino-U.S.":66,Sandberg:2,restorers:4,"Short-sellers":113,gastric:1,Cici:2,Chengdu:2,"Korean-U.S.":2,"Party.":2,gravitates:20,BRING:39,restricted:81,original:3,Lefty:2,Caesar:2,"index-futures":176,"bran-processing":1,Transamerica:2,improperly:6,content:70,Ayob:2,Bietnar:2,Laws:123,endogenous:1,undeserved:1,puzzled:81,Rhona:2,crestfallen:1,candid:1,"Twenty-year-old":1,scapegoats:4,predominately:6,"price-supporting":1,cunningly:6,Piet:2,ceding:8,Durney:2,LOOM:20,"gold-mining":3,confederates:4,nonsystematic:1,Ismail:2,facsimile:22,Vita:2,Claridge:2,penalties:4,Acoustical:1,canvass:25,turning:5,situated:17,"two-and-a-half":1,Ballestre:2,"semi-skilled":1,Caesarean:1,TransCanada:2,excitatory:1,"Toronto-Dominion":2,Callaway:2,semifinalists:4,microchip:22,contrast:44,Tracing:8,Compromises:4,Crescott:2,hours:18,smartest:51,Calvary:2,irrespective:6,Bickford:2,yellowed:17,phrasings:4,"still-mammoth":1,Lyons:2,reactionaries:4,iuvabit:64,"Palestine-General":2,skyrocket:39,pick:95,undersize:1,smuggle:39,"multiple-use":1,"Marne-la-Vallee":2,unaggressive:1,rattlesnakes:4,marriages:4,excellently:6,indoors:163,Servatius:2,Lacey:2,Introducing:8,ridding:8,Marushita:2,"one-half-point":3,Balkan:40,implore:39,freest:51,pitching:55,recouping:8,sanitaire:64,reminiscing:8,inferential:1,Cruickshank:2,"no-good":1,tightfisted:1,nonbanking:1,Eisler:2,"casino-hotel":791,"super-charged":1,Ladbroke:2,cunning:3,Cheese:2,keeping:55,apportion:39,science:22,Fathers:41,Bornholm:2,gesticulating:8,Omnicom:2,betties:4,professions:4,Conference:11,Dardalla:2,Hassenberg:2,gallop:25,poetizing:8,"anti-fungal":1,STET:2,sense:24,Mutsch:2,Shintaro:2,dazzle:39,interconnect:25,Misunderstanding:55,Tacit:2,monopolistic:1,"A.A.":11,Caisse:2,unattended:1,wiles:4,aplenty:97,Snead:2,Tacloban:2,Soundview:2,Swiss:198,evaluations:4,purled:32,Bottega:2,Bongo:2,Arbs:4,Zacharias:2,premonitions:4,Steinkrauss:2,Arby:11,Gaechinger:2,wrench:63,deafening:30,reshape:39,Bastin:2,"Okla.":2,geographic:1,Multiples:28,crouchin:1,radios:4,"Torrid-Adios":2,Castparts:2,"network-services":1,TRIPS:4,Benjamin:2,Hiltons:28,unimposing:1,Kims:111,polarizing:8,grade:25,Brookline:2,Nichols:2,Anyhow:150,"pool...":102,propose:42,"big-budget":1,Overly:6,Alsthom:2,skipper:25,misuse:44,Hime:2,nighted:1,stewed:249,"Christmas-like":1,always:6,IPO:11,IPM:2,Aftershocks:4,experiencing:8,Sounds:20,errata:4,"thimble-sized":1,Destinations:4,status:80,Bryn:2,"m&a":1,NGL:2,throwin:55,"high-living":1,"Watkins-Johnson":2,bouquets:4,twitched:16,repressive:1,silky:1,tipsy:1,Manning:2,sparingly:6,SunGard:2,"single-A2":1,holstered:112,Movie:11,misses:72,race:25,Filtertek:2,Astronomy:47,"hard-pressed":1,attentions:4,"stock-margin":1,"single-A\\":47,reformulated:14,trite:1,premediated:1,Dugdale:2,Maude:2,"pro-sealed-records":1,"well-nigh":6,Inspection:2,prefab:1,bumped:32,Wanger:2,rack:44,Cathay:2,w:127,bumper:617,volumetrically:6,delicate:1,"pay-hike":1,gazed:16,Winery:2,emblazoned:17,shantytowns:4,number:44,twisted:81,murmured:16,guar:1,ethereal:1,"Revenue-short":1,numbed:17,Corruption:47,"black-figured":1,Sprinkle:39,"R.A.F.":2,heads:18,Paperweight:2,boating:21,threatening:30,heady:1,Auger:2,fruitfully:6,"Rayburn-Johnson":2,relies:20,"sun-kissed":1,Milano:2,Allegany:2,"Jane\\":2,Stannard:2,Nightshade:2,conjunctions:4,Gambit:2,grace:44,Grabski:2,Hercule:2,critically:6,Shortcuts:4,freighters:4,Toyo:2,"Warner-Chilcott":2,tablespoonfuls:4,determined:45,Atomic:40,KEY:1,Toys:557,IndoSuez:2,Kasriel:2,remembers:20,"hi-graders":4,livers:4,Redfield:2,Projected:17,vitally:6,Crude:10,Stoneware:1,mawkish:1,Suggestions:4,basics:4,Aboff:2,Club:11,Pramual:2,Poltawa:2,commemorates:20,bovines:4,Murville:2,commemorated:54,play:182,Mokae:2,relied:118,yaws:4,Caere:2,yawn:25,Octavia:2,plan:505,Jervase:2,defections:4,"foreign-affairs":4,"Cheerios-brand":1,Redhook:2,tensioning:8,Laidlaw:2,researchers:4,"self-managing":1,smocks:4,strutted:16,Carolinas:41,Explain:39,interceptors:4,Ralphs:2,"C.J.":2,"aluminum-makers":4,hipper:12,impact:25,Conferees:4,Labe:2,Decimus:2,stockholders:4,Rhyme:39,"cut-glass":1,Harrah:2,failed:112,fugual:1,Jelinski:2,"medical-benefits":4,"conservative-communist":1,"five-star":1,Patriot:2,Pascagoula:2,Kunz:2,Frazee:2,Primo:2,impregnable:1,Rectangular:1,Niobe:39,Cilcorp:11,closely:6,Vale:2,Hearts:111,AUDITS:4,Frazer:2,COTTON:47,Kahan:2,Rabbits:4,Help:63,Chapelles:28,stirling:1,Held:54,"lower-volume":1,tottering:13,inductees:4,Helm:2,Hell:792,overdrawn:1,Graves:2,Adrienne:2,Cyber:2,booklists:4,geologic:1,backstitch:25,Zeitgeist:2,Akita:2,muted:45,Advocate:2,hatcheries:4,Lauderdale:2,Drell:2,Florido:2,Cambria:2,Enzymatic:1,intolerant:1,Florida:2,Against:124,selectively:6,Scholarship:47,Bostonians:28,Hayne:2,agriculteurs:64,"no-walls-no-doors":1,phosphorous:1,Kapnek:2,Vigreux:2,"floor-to-ceiling":1,"multi-colored":1,soddies:4,Nina:2,shortsighted:1,"Most-recommended":1,Wrestlemania:2,Alokut:2,smashing:261,corresponds:20,Lounge:11,bayed:32,"all-around":1,Gibson:11,Robbins:2,Macy:2,Dwarfing:8,Mace:2,Hartmarx:2,Jennison:2,Hintz:2,assassinated:54,Mack:2,Quezon:2,Hints:4,firm:70,Otradovec:2,"high-pitched":1,fire:25,equestrians:4,Concert:2,"all-time":1,"next-to-last":1,roustabouts:4,"Debt-free":1,Reinaldo:2,"un-advertisers":4,dotting:55,Strategy:47,Armond:2,mots:64,Sunflowers:4,Pertschuk:2,vanish:149,Armonk:2,funny:1,choking:5,SESCO:2,elevated:45,"market-sensitive":1,"pressure-measuring":1,Morimoto:2,ledgers:4,Bluff:2,"longer-run":1,Segnar:2,elevates:20,Bierbower:2,smokable:1,Salive:2,expediting:8,"Kimbell-Diamond":2,leapt:16,leaps:18,Ishihara:2,focal:1,recent:1,canned:7,whaddya:79,visualizations:4,Ibsen:2,cognoscenti:4,DARPA:2,Petroliam:2,plagues:20,"open-year":1,moonlike:1,"small-capitalization":1,Coulson:2,"anti-drug":3,"co-ordinated":1,pillars:4,hues:4,Yuzuru:2,outcasts:4,Numb:1,clutches:18,demands:18,Impasse:2,teleconferences:4,"Executive-branch":1,clutched:32,Probus:2,pouncing:8,Daily:294,pertinent:1,parliamentarians:4,"empty-shelved":1,underway:218,shimmered:16,CRIMINAL:1,"late-day":1,Motoyuki:2,Burmah:2,irresistibly:6,Burman:2,Coyotes:4,unfazed:14,Hydraulic:40,Hawksley:2,indigent:1,irresistible:1,abandon:182,soirees:4,Sufficient:1,"sub-Christian":1,jokingly:6,prosecuted:54,Vacuum:11,"jumping-off":1,Lubriderm:2,Loon:2,Antonia:2,Szuros:2,Loom:2,Look:793,Rosalie:2,STUDENTS:4,interpreters:4,Colossus:2,Antonin:2,Antonio:2,Cervantes:2,Pinellas:2,tidal:1,by:475,Loop:11,glorying:8,discontented:1,"data\\":1,Espenhain:2,Papasan:2,"sub-markets":4,"stock-selection":1,forgave:16,"book-breaking":1,hatched:54,"non-swimmers":4,Hertz:2,fitfully:6,glumly:6,dubiously:6,plainest:51,Pickard:2,doubters:4,"bare-footed":1,Pollock:2,primarily:6,Bosco:2,Bosch:2,Shantou:2,chide:42,shillings:4,"life-bettering":1,"knee-jerk":97,Bernie:2,Giacometti:2,byzantine:1,polytonal:1,relaxed:81,buttery:1,"construction-related":1,archaic:1,link:44,Trite:1,Turnpike:2,line:486,Seasonally:6,Caryl:2,relaxes:20,gizmos:4,Bhutto:2,Jeff:2,thickeners:4,Buena:2,MEN:91,MEI:2,horned:1,"below-investment":1,MET:16,skis:4,seekingly:6,NonProfit:2,"industry-supported":1,Birdwhistell:2,Kellner:2,nationalist:3,defined:81,"more-than-$":84,"anti-pesticide":1,Crop:2,"non-pathogenic":1,"rate-slashing":1,Manhattan:2,defines:20,phantom:794,Comair:2,"electronic-trading":3,Mulford:2,ILLINOIS:2,"Litman\\/Gregory":2,Ownership:11,conditioners:4,swirl:25,sails:18,"European-American":2,"all-weather":1,"Abbe-Direct":2,Mambo:2,robots:4,proclamations:4,mealy:1,bodily:97,meals:4,hells:4,tailored:14,Hoak:2,Xuanping:2,metabolize:39,reconditioning:8,Hoag:2,Aegis:2,"Dong-A":2,hello:175,"Leninism-Marxism":2,Guardia:2,code:25,guzzles:20,sorrier:12,Contemplating:229,Nissans:28,renown:25,Construcciones:2,mercenaries:4,guzzled:16,Giuffrida:2,"Civil-rights":152,grandly:6,"non-monopolistic":1,Cares:20,McAllister:2,Step:269,Sanatorium:2,dislike:44,"Beaux-Arts":2,moot:1,Racketeer:2,Truckee:2,Noonan:2,Glucksman:2,jist:6,Varani:2,Lagoon:2,BANKS:57,Regardless:6,"second-round":1,atonally:6,recit:64,Hagen:2,"Ste.":2,Hager:2,Directly:6,Extreme:66,logistics:4,disordered:7,besieging:8,Scully:2,"Boy/NNP...":102,Dreadnought:2,munitions:4,incidentally:6,umpteenth:1,vintages:4,"price-reform":1,Provenza:2,inpatients:4,"B\\/T":2,twins:4,proffer:39,Bodenheim:2,Verbindungstechnik:2,unmask:39,led:506,eminently:6,les:64,let:373,lex:64,Nofzinger:2,Commonwealth:11,"right-to-lifers":4,"dried-out":1,"non-strategic":1,Himmler:2,impressionist:22,residents:4,Elbaz:2,Fiddlesticks:4,"Anglo-Saxon":40,Britannic:1,Britannia:2,complying:8,Distributed:17,Propertius:2,boxy:1,sensitize:39,"Year-ago":1,Falconry:2,Bretherick:2,standing:5,"half-aloud":6,pawn:25,Seagram:2,recalling:55,Borneo:2,Vanderbilt:2,doubt:486,Pignatelli:2,"hot-buttons":4,Merchandise:2,confiscate:39,Westin:2,Noskova:2,queerer:12,occurred:32,approached:32,deregulate:63,Rogues:28,winches:4,Interfinancial:2,CAC:2,Rifles:4,DISTRESSFUL:1,Heartburn:2,endearments:4,reproduce:39,Midco:2,Linsenberg:2,drill:25,"whodunnit-style":1,Haberle:2,wearing:8,streamed:32,bent:626,DOLLARS:28,Banawans:28,transpired:54,Cato:2,Cats:2,Catt:2,bend:63,Catz:2,"five-hundred-dollar":1,Korneyeva:2,"tune-in":1,Claytor:2,Clayton:2,Nationalcar:2,McGill:11,Prieska:2,"good-living":1,Rental:40,"value-problems":4,aspiring:13,Araskog:2,await:42,tactually:6,"Ximenez-Vargas":2,"WCRS\\/Boston":2,intraepithelial:1,weevils:4,prawns:4,Community:11,acquitted:54,allot:39,allow:42,Raisa:2,Regina:2,Raise:216,Regine:2,"Toulouse-Lautrec":2,Vientiane:2,"fine-tooth":1,snafus:4,Flumenophobe:2,Match:11,"once-distinct":1,Secretariat:11,cycads:4,Slenczynka:2,Liberace:2,"heart-rending":1,Traficant:2,Blamed:17,"co-sponsor":25,designs:18,Coudert:2,Feverishly:6,Senshukai:2,"yen-denominated":1,Soliz:2,earthlings:4,Melanesian:2,mysteries:4,Cristo:2,irks:20,draftees:4,sufficiently:6,delightful:1,Arkansas:113,hoodwinked:17,scants:20,"models-on-the-way-up":1,Paperin:2,habitually:6,"broad-appeal":1,Macneff:2,decays:20,Marum:2,banal:1,Multnomah:2,bad:34,Genentech:11,mafias:4,subdivisions:4,Giuliani:2,bunches:4,"money-saving":3,reformist:22,oblong:1,APPLIED:2,Statesman:2,Grunnfeu:2,Misbegotten:2,incalculable:1,ban:44,ignominious:1,dismantled:54,secants:4,looting:21,retooling:55,latches:20,Summerfolk:2,Sammartini:2,dismantles:20,shucks:795,latched:54,"J.W.":2,Changyi:2,endowments:4,blown:17,Maccabee:2,Cleve:2,privies:4,BAY:2,victimless:1,Stabilizing:8,blows:18,Donnell:2,Peeping:2,Ryzhkov:2,Lazarus:2,"Lintas:Campbell-Ewald":2,Shearn:2,"world-amid":127,adopts:20,Evangelical:66,"Inquisitor-General":2,"co-op":47,Xiaoping:2,opalescent:1,"non-authoritative":1,subliterary:1,Sector:2,Daiei:2,colleagues:4,Classical:2,Livshitz:2,tortured:81,Kilduff:2,briefing:21,misunderstand:39,kissings:4,"yrs.":4,Boom:2,stopovers:4,Bosque:2,Synod:2,Toornstra:2,heeds:20,Tobishima:2,adjunct:22,"sharp-limbed":1,"pre-conditions":4,Mayland:2,equaling:8,Mississippians:4,bloodsucking:8,Greece:2,carcasses:4,socializing:8,"British-Dutch":1,"un-American":1,industryas:4,ignited:32,latecomers:4,unscramble:39,"self-reinsure":39,Demery:2,Checked:17,"pre-1967":1,"pre-1960":1,Morristown:2,bikes:4,Turnaround:11,Under:124,Independence:11,resells:20,Spraying:8,squirreled:17,enamelled:1,softens:20,Tracks:57,Gloomy:1,finger:25,flinch:39,exchanged:54,Rommel:2,move:24,meditative:1,Whether:124,Linvure:2,exchanges:18,committees:18,"five-story":1,Danvers:2,SLTI:2,stomachwise:6,"F.G.":2,"power-driven":1,rein:63,"four-wood":1,anomie:64,temporarily:6,anomic:1,C:796,Handbook:47,generational:1,forepaws:4,"crystal-lattice":3,Feebly:6,"book-burning":1,Mellanby:2,Cadwalader:2,DeVillars:2,Korotich:2,Lazard:2,Lazare:2,"environmental-impact":1,Intriguing:1,"two-day-old":1,aspires:20,grasp:95,gnomes:4,historians:4,restrictions:4,figured:85,"five-fold":1,Mikado:2,"heretofore-accepted":1,Centennial:2,Shayne:2,"cold-war":1,adjusted:81,hinterlands:4,Alceste:2,Greenpeace:2,Hanoi:2,revamp:63,migrant:3,Pratap:2,Bruhn:2,Garry:2,crafted:54,Passos:2,Interagency:2,"neocortical-hypothalamic":1,Vivien:2,quotas:4,"Franklin-Trout":2,Vivier:2,Clozaril:2,recurring:8,"U.S-based":1,Lukas:2,"junk-bonds":4,"fine-boned":1,toothless:1,emphaticize:39,Wilder:2,Presidents:92,"Heel-Kaola":2,"poured-in-place":17,Choctaw:2,"Hanover-Supermarket":2,Lancome:2,Tire:11,globigii:4,Panorama:2,surprisingly:6,sentencings:4,Sort:25,Badly:6,"long-line":1,Menendez:2,Sore:1,Sutcliffe:2,Paints:2,Handling:8,Tipton:2,Imprisoned:17,elicits:20,paving:8,dust:44,Ardito:2,"light-hearted":1,nurtured:32,discounted:81,disrupted:81,"single-malt":1,confronted:54,unceasingly:6,Schoch:2,command:24,Phrase:2,Blocked:17,bananas:4,rambled:16,LaserWriter:2,repressers:4,Equivalents:4,Monitoring:21,rambles:20,Myers:2,afflicted:14,Wearing:229,LaMacchia:2,residential:1,"anti-productive":1,sickened:45,Eduard:2,Wieland:2,innocents:4,"U.S.-donated":1,concretistic:1,"flat-panel":1,magnify:39,Reginald:2,Lavoisier:2,Syed:2,Norwegians:28,"heart-stopping":1,Booker:2,Lauer:2,Secomerica:2,susceptibilities:4,accelerating:797,becomin:8,Gelles:2,Geller:2,"war-torn":1,"reform-minded":1,Westwood:2,landscapers:4,replacement:22,"rumor-happy":1,shuttling:8,Guaranteed:798,unaudited:1,Acton:2,"recession-resistant":1,Comptroller:11,transport:24,agriproducts:4,avoid:347,"environmental-services":4,apprehended:17,InvesTech:2,gummed:17,Gives:20,Hanauer:2,stags:4,Pence:2,Gelb:2,Geld:2,shortchanging:8,Gell:2,Refill:39,stage:24,sister:22,Boliden:2,"recession-sensitive":1,Sacheverell:2,Yosi:2,Calgene:2,Shelley:11,diabolical:1,Chaves:2,Carder:2,Rosella:2,Pedro:2,Roselle:2,HansGeorg:2,booed:16,Hagerty:2,flailing:8,borers:4,Comus:2,"federal-formula":1,Pavlovsky:2,disaffected:1,"British-based":1,"Perzio-Biroli":2,"savings-deposit":1,Sudikoff:2,"Tylenol-tampering":1,"data-transmission":3,Gentiles:28,justifying:8,Hambros:2,"Lanvin-owned":1,imbibe:39,pretax:3,naturally:6,funnel:63,Weld:2,Interestingly:6,Well:799,assassins:4,Welt:87,"quasi-folk":1,Orix:2,Telescope:2,Goldwin:2,smooth:82,Hebron:2,Orin:2,Ottauquechee:2,"on-and-off":1,"discount-toy":1,coiffed:1,Mandolin:2,recognize:42,orbit:25,"R.I":2,Clinical:40,FEMA:2,"six-count":1,mushroom:24,Whitehall:11,CL:2,"non-accruing":1,Volume:47,PETS:4,Fagan:2,"four-cents-a-share":1,"three-body":1,quarts:4,Covent:2,woes:18,Merited:1,Timony:2,Chronometer:2,"uranium-recovery":1,South:566,consisently:6,Girard:2,Unice:2,gearboxes:4,forthrightly:6,Unico:2,"Wm.":2,"Dowex-2-chloride":47,"extra-thick":1,questionnaires:4,rural:1,Komori:2,Overwhelmed:17,"well-drilled":1,Parretti:2,Lucretius:2,"million-and-counting":1,Lodge:2,Cascaded:17,"co-sponsored":85,Pressman:2,Watch:169,PHILADELPHIA:2,CV:2,"heavy-truck":19,Changing:30,Martyrs:2,restock:39,"DMB&B\\/International":1,optimists:4,Reasoner:2,"here...":102,"D.s":111,wagons:4,Szolds:111,bewildered:14,Lifecodes:28,"D.C":2,Attic:40,Sangetsu:2,Sufi:1,"D.K":2,indices:4,Spahn:2,vacuous:1,"pre-vision":1,diverting:8,occasioned:17,Golda:2,Staniszkis:2,Collins:11,"letter-writing":1,Generating:2,Churchyard:2,"self-sufficient":3,Feringa:2,Merner:2,above:800,churches:4,counters:18,Cosmopulos:2,sinkt:64,sinks:20,"low-crime":1,delicto:64,"H.P.R.":2,delicti:64,"Jean-Claude":2,McGrath:2,Emcee:2,studs:4,"movie-like":1,balance:419,Burkes:111,Labrador:2,"pre-marital":1,study:24,Lambarene:2,"STAR-STUDDED":1,Hush:235,Delmont:2,Husk:2,"fifth-least":1,"most-respected":51,"think-alike":1,Nac:2,"Time-Life":2,Legislation:47,Figone:2,cheats:20,Katmandu:2,glance:25,auditing:21,"highly-confident":1,Cornona:2,Drugs:92,chooses:20,"well-trained":1,circonscriptions:4,supercolliding:8,Steiners:28,renovations:4,fractions:4,Horatio:2,Jonquieres:2,traceable:1,"Robusta-producing":1,reign:24,escapist:1,Gould:2,continual:1,Krasnow:2,EUMMELIHS:2,bunnies:4,permits:72,"bomb-detection":1,"Rios-embryos":4,Nap:2,immutable:1,"communist-led":1,Atrium:2,"export-promotion":1,Laufenberg:2,Marxist:66,bureaucraticized:1,Barbaud:2,Arfeen:2,"thatched-roof":1,Stuckert:2,Marxism:2,Hogan:2,sweethearts:4,aerated:17,Purdew:2,photocopy:39,Heidelberg:2,Corlopam:2,aerates:20,boats:4,REACHED:2,ordinary:3,fudge:95,"radio-show":1,RBSPr:2,classifying:8,Dylan:11,lotteries:4,Establishing:8,"Anglo-Irish":1,overdressed:1,Entwhistle:2,chilled:81,"last-second":1,Dryfoos:2,supermarkets:4,green:104,remonstrate:39,MegEcon:2,Wilmot:2,twelvefold:1,devote:42,consent:25,jabs:4,Huichol:2,Hazy:2,resonable:1,crimping:8,Nonsmokers:2,ASCAP:2,DeLuca:2,refectories:4,Finish:39,videotapes:4,somewhere:43,"air-conditioned":1,Volcker:2,Judge:128,precipitate:63,Encare:2,interpretive:1,then:591,Mergens:2,affected:801,thei:53,locusts:4,amenable:1,"tire-making":3,Periodic:1,clogging:8,thet:802,ther:803,moneyed:1,gallows:19,relishes:72,subpenas:4,JUDICIARY:2,grows:20,Sforzt:2,seedlings:4,Armada:2,Vaclav:2,Rainbow:2,Zipperstein:2,COURTS:4,list:24,crimes:4,cabanas:4,Bevmark:2,cascading:30,retied:16,Biographical:2,pigments:4,Myth:2,dialects:4,"buy-backs":4,"Neiman-Marcus":2,"bacteria-based":1,Eritrean:66,Jakarta:11,"pool-owners":4,Contradictions:2,sliding:30,disagreements:4,"W.F.":2,marketwise:6,lawless:1,depots:4,"drug-free":1,deceptive:1,Massage:47,incorporates:20,unfulfilled:1,recovering:8,Certification:2,Tappets:4,Rothman:2,Determined:17,aborning:6,incorporated:81,"self-conceited":1,JAPAN:2,"student-athletes":4,"re-examining":8,Mediobanca:2,crooning:8,AIDS:2,Nestor:2,Samper:2,adventitious:1,Jaycees:28,"self-policing":1,Yokich:2,plentiful:1,airs:18,Nintendo:11,airy:1,inflate:39,warded:17,Judgment:2,"copper-producing":1,Clarcor:2,B:804,Imposed:17,Hiroyuki:2,Rockville:2,Cinnaminson:2,FREEZE:39,exhilarating:1,"surface-active":1,Improprieties:4,Sadakane:2,"short-to-medium":1,Algemene:2,Dravo:2,Advisory:129,Set:805,glorified:14,Suresh:2,Advisors:41,Trittico:64,Sex:47,binds:20,"black-bearded":1,Sea:11,Sen:2,solely:6,Downers:2,manned:103,laboriously:6,shoals:4,stooooomp:39,"Occupational-Urgent":2,Newcomb:2,"Arnell\\/Bickford":2,Finot:2,Rosser:2,subduing:8,toursists:4,pianissimos:4,Brookfield:2,Liming:2,Bakersfield:2,Meat:11,Eamonn:2,Conran:2,Boni:2,Bonn:11,BRAMALEA:2,Conrac:2,nutritive:1,Vision:2,Bond:11,Lindy:2,"Bourke-White":2,Monetta:2,neighborhoods:4,emasculated:16,producin:8,Lauderhill:2,accounted:32,briskly:6,renting:55,subtly:6,Peduzzi:2,eminent:1,Amclyde:2,subtle:1,blotting:8,alluded:32,Janeiro:2,Eiffel:2,Wastewater:2,ConAgra:2,"German-speaking":1,Ebrahim:2,musta:190,"Hoffmann-La":2,do:806,"seven-digit":1,intersect:42,Peepy:2,di:87,"Republican-governor\\":1,Hopson:2,dd:16,Souphanouvong:2,da:11,protectively:6,Grinsfelder:2,statutorily:6,"side-step":33,du:87,UJB:2,Tordella:2,Corry:2,irregularities:4,Carrara:2,"large-business":1,bondholdings:4,Rockport:2,"limited-substitution":1,PANDA:2,squeezed:54,triumphed:32,ANGELES:2,Murrin:2,depends:20,Orissa:2,Toalster:2,Askin:2,jocose:1,Coulas:2,sourcing:21,"lightning-fast":1,tainted:471,props:4,Caldera:2,Ratcliff:2,Minden:2,accord:486,downgrades:4,Feelings:4,Doria:2,Doric:1,Cochrane:2,Abrupt:1,Teraoka:2,"I.B.M.":2,packages:18,downgraded:32,Doris:113,scribbling:8,"added:``":133,penurious:1,parried:16,Custer:2,Kofanes:4,coy:1,"open-collared":1,Navy:11,unverifiable:1,Langton:2,Ratliff:2,con:807,"Forty-second":1,Initial:1,Alamogordo:2,Board:144,"TV-production":1,polynomial:22,beheaded:16,jays:4,broadens:20,petty:1,"five-column":1,buffets:4,"margin-the":808,corollaries:4,nonverbally:6,"print-out":1,"search-and-seizure":1,Wedbush:2,Riverboat:2,"injury-prone":1,surreptitious:1,"Long-term":66,"Fin-syn":1,naval:1,convening:55,MAJOR:1,chorines:4,"trigger-happy":1,"high-up":1,"anti-cigarette":1,"non-ideological":1,Worcester:2,"iodide-concentrating":1,Immigrant:1,Bettencourt:2,OFFICIALS:4,vernal:1,voice:24,overtaking:8,JAILED:17,encyclopedias:4,Wallenberg:2,Rubio:2,Rubin:2,Kizzie:2,Rubik:2,"Disk\\/Trend":2,recurrent:1,plated:17,utopias:4,Canny:2,"E.R.":2,"Thai-Cambodian":1,bifocal:1,Frick:2,Alisarda:2,evil:3,Spinola:2,pubs:4,CRESTMONT:2,elucidative:1,Austins:28,Minh:2,Clarice:2,CalComp:2,thy:809,Ishii:2,AAb:2,Mind:260,Mine:810,Ming:2,the:811,Mint:11,Pete:2,Fanuc:2,Wellcome:2,Storyteller:11,"printing-systems":4,Pets:4,"Non-callable":1,"cross-border":1,"T.J.":2,Ballwin:2,hills:4,"cost-conscious":1,reuniting:8,hilly:1,passive:3,"anti-Communists":28,cranberries:4,Barclay:2,orzae:4,"behind-the-scenes":1,Wagon:2,mocked:54,ashore:218,"million-to-$":84,Athlete:2,apostates:4,caps:18,barge:44,Gerard:2,"commission...":102,Niedermaier:2,Amabile:2,Grocer:2,"gas-cooled":1,Northland:47,Styka:2,antique:3,warily:6,"once-prestigious":1,productions:4,constables:4,Bisiewicz:2,"one-percentage":1,Poker:47,Relationship:2,ransacked:54,purple:3,bullyboys:4,"poor-mouth":1,"black-balled":17,effeminate:1,Wilpers:2,Voiture:2,"Fel-Pro":2,Chairs:4,confluent:1,angering:8,Place:128,gangsterish:1,"Packwood-Roth":2,Eileen:2,Renzas:2,routings:4,Baim:2,writers:4,"Democratic-led":1,"Westinghouse-Mitsubishi":2,Verreau:2,Cut:216,Kelleher:2,Cup:11,pays:20,Dadaism:2,Snecma:2,"back-to-back":1,Cub:2,formidable:642,Maryann:2,renovating:8,workbooks:4,"counter-efforts":4,wailed:32,USOM:2,Existentialism:2,unchanging:1,"Jackson-Vanick":1,causative:1,fight:44,Chiuchow:2,"firm...":102,accordingly:6,"pre-register":39,CuK:1,Carberry:2,Barnabas:2,"interest-rate":22,sagging:101,Weinbach:2,Stacked:1,"president\\/public":1,Impose:39,Aqua:2,guppies:4,"wood-encased":1,prepayments:4,Woven:17,Armuelles:2,strongrooms:4,Ferreira:2,Fairness:11,Punching:8,Tarkeshian:2,"City-type":1,mails:4,"non-traders":4,MCC:2,paragraphs:4,"bell-ringing":1,Malta:2,evidence:78,Steppel:2,Valin:2,newlyweds:4,PageMaker:2,Gustafsson:2,disputable:1,"bourgeois-bashing":1,"system-specific":1,presumes:20,Running:210,interested:103,Asteroidal:1,"pro-rated":1,Trucks:57,Mask:2,Kornfield:2,polite:1,mightily:6,Airline:11,MCV:2,Bankler:2,"two-to-three":1,Lumumba:2,"Haut-Brion":2,Safi:2,doctrinally:6,Masu:2,TRANSAMERICA:2,Sandalwood:2,Safe:40,wakeful:1,"drop-off":22,"medical-leave":1,Elephant:11,Maughan:2,Maugham:2,rectangles:4,lactating:8,"non-amortizing":1,honoring:8,Lupatkin:2,"health-oriented":1,outplayed:16,Dominick:2,atrophied:17,Dominici:2,Hedge:2,presumed:81,Westside:2,"Mercedes-Benzes":65,Dominica:2,Winterhalder:2,alumnae:4,Economique:2,Recapitulation:2,"bone-weary":1,aldermen:4,blase:3,Tascher:2,microprocessors:4,Zycher:2,federalized:1,blast:25,"pull-down":1,Middlebury:2,bring:42,basophilic:1,Fricke:2,Global:40,Slivka:2,liposomes:4,"Friday-the-13th":3,Hondas:65,distasteful:1,Firestone:11,Quotable:2,Euroissues:4,McCann:2,niggardly:1,Campeau:11,acrimonious:1,"materials-related":1,Lederer:2,Notable:40,rapeseeds:4,TIPS:4,Notably:6,generalpurpose:1,WORLDLY:1,satisfy:42,collateral:22,Snatchers:28,interfacial:1,Benny:2,Guarana:2,Delegate:2,Sunnyvale:2,Saud:2,Benno:2,hoops:4,"no-new-tax":1,Saul:2,Lobsenz:2,Portwatchers:28,Antolini:2,eke:39,Cynthia:2,vibrating:8,exiting:8,"anti-Sandinista":1,Greenhill:2,"airline-financed":1,matrimonial:1,computerrelated:1,hiking:55,Nitze:2,"T.W.":2,Angry:66,Kellmer:2,Mackey:2,"anti-Semitism":326,rarely:6,Caucus:2,senile:1,ASLACTON:2,Washizu:2,Shalom:87,"well-trampled":1,conspire:149,Dharma:2,Huntz:2,Shalov:2,jabberings:4,Sturge:2,Kuttner:2,"high-octane":1,Brill:2,labeled:54,Underlying:30,slumbering:8,lubricant:22,"Ninety-Eight":2,spy:25,centenarians:4,subsidies:4,fortunes:4,"canned-foods":152,baddebt:1,"union-management":1,distinguishable:1,"hull-first":6,productive:1,bankrupt:255,"evil-looking":1,Howsabout:6,nowhere:43,Lyaki:2,allowable:1,Disquisition:2,BankTexas:2,CANCER:2,"Tupelev-144":2,"glass-strewn":1,averted:54,brazen:82,"non-trade-related":1,Cavalier:2,flourish:182,Donohoo:2,Quietly:6,nationalistic:1,explicit:1,Rumania:2,rather:400,progressively:6,Tambrands:2,"Crest-Colgate":1,Polyconomics:2,idiosyncratic:1,bumptious:1,Che:2,Chi:2,forfeit:63,affectingly:6,spurning:8,Nika:2,Chu:2,Swartz:2,Divers:2,"air-to-air":1,Sympathy:47,hungrier:12,acknowledge:149,terminations:4,Greenall:2,reaping:8,inflicted:32,Chemicals:41,suffocate:39,Lockhart:2,Avon:11,Grace:11,Atkins:2,centenary:1,Vishwanath:2,Kutak:2,fling:25,natured:1,Registrations:4,equidistant:1,cascaded:16,highyield:1,wont:1,equalizers:4,streaks:4,concerti:4,victuals:4,"five-judge":1,phonic:1,ceremonially:6,redactions:4,handsomer:12,entirely:6,concerts:4,poetically:6,significantly:6,Maricopa:2,provocateurs:4,Swed:2,Hepatitis:2,Kamel:2,fires:18,Hurter:2,ubiquitous:1,Caroline:11,"Chip-o":2,FINAL:1,"third-worst":1,Carolina:2,unsupportable:1,Journey:2,receiving:55,viable:1,inevitably:6,Creston:2,Callas:2,"five-mile":1,Hafif:2,proofread:16,"rights-of-way":1,Ervin:2,Callan:2,Grannon:2,Urging:2,waxy:1,milestones:4,Sibaral:2,Ramfis:2,"privatization-consulting":1,shouders:4,Gaspard:2,palaces:4,Cooperative:2,"passenger-miles":4,"flat-headed":1,Rated:615,striking:13,Aguirre:2,omitted:54,comprised:54,Rates:123,"low-sulfur":1,comprises:20,smelters:4,size:24,Kristol:2,Burry:2,categorical:1,callous:1,households:4,"government-leaked":1,Burro:2,Defying:8,"cost-effective":1,RACKS:4,mostly:218,Cominform:2,Unseasonably:6,expanse:22,Feshbach:2,Cretaceous:40,"social-political-economical":1,"post-Barre":1,lunched:17,CRA:2,receptionists:4,Rockabye:2,"start-ups":4,fruity:1,anatomic:1,lunches:4,intrauterine:1,Fernald:2,anastomotic:1,Kohlberg:2,MOVES:20,Waffen:2,BBDO:2,Combined:615,anger:78,insatiable:1,Branchburg:2,Sprite:2,Ingram:2,veteran:22,"S.A":2,Pasoan:2,shore:479,Blame:39,Olsen:2,Legitimate:1,translatorfor:759,INTERBANK:812,palazzi:91,"four-speed":1,takeaways:4,Forensic:2,"tax-supported":1,hostelries:4,plainer:12,undertakings:4,spraining:8,"death-locked":1,"newly-scrubbed":1,encased:16,Letitia:2,pokeneu:64,GLASNOST:87,wreaked:32,conservatively:6,Engles:2,Engler:2,Weldwood:40,"good-night":1,Northeast:129,Querecho:2,foaming:21,"A.M":150,"Machine-tool":1,octagonal:1,"middle-market":1,Turnock:2,Incredibly:6,"deep-pocket":1,prepositional:1,Shakya:2,DNX:2,Mahzeer:2,Tassel:2,sufficent:1,ENTEL:2,Ahmad:2,"back-to-school":1,Cudmore:2,breeches:4,"capital-boosting":1,"red-frocked":1,Florentine:40,"bid-wanted":1,Bellwood:2,Estimates:4,Knutz:2,Inaugural:129,Supercomputers:28,Knute:2,Location:11,Markowitz:2,nonstandard:1,concern:24,Bolsheviks:41,Reactionary:117,"Johnson-Merck":2,seekers:4,justifies:20,justified:471,"anti-Colmer":1,thirtieth:1,"S.p":2,connoisseurs:4,Stenton:2,"micro-electronic":1,BERNARD:2,"free-standing":1,"fawn-colored":1,attaches:20,talented:1,"drug-fighting":1,Wholesalers:4,"eight-inch":1,Wassily:2,Interair:2,"fresh-faced":1,autions:4,"AIDS-drug":1,comes:72,inkblots:4,Torpetius:2,occluded:17,"double-A-minus":10,Isgur:2,COB:2,repackaging:8,COM:2,Leader:2,Vencor:2,Mutuelles:2,punishes:20,"agreed-to":1,"wall-to-wall":1,punished:17,Known:17,diclosed:17,reprice:39,Claiborne:2,Leval:2,stems:72,scrupulously:6,KTXL:2,TELV:2,"two-system":1,expropriated:1,Afif:2,unbelievably:6,Faulder:2,editorial:22,"R.N.":2,"U.S.based":1,exercisable:1,"CO.":2,Shahrabani:2,"H.G.":2,soil:25,Fenn:2,UNFLUORIDATED:1,Charge:128,"specialist-credit":1,hens:4,Mingus:2,"court-ordered":1,Chart:47,Charm:2,coworkers:4,Wildhack:2,Nassau:2,"moth-eaten":17,document:44,contouring:8,Carlta:2,edifying:1,"Mid-Continent":2,Lorenz:2,Harvie:2,Reaganites:28,Longfellow:2,mentally:282,Gadhafi:2,traps:18,"over-hand":1,Campus:11,Hillstrom:2,toadies:4,Nilsen:2,Playhouse:2,Bluthenzweig:2,"A330-300s":4,Izvestia:2,PARK:47,"SEVEN-UP":2,Ameritas:2,EPO:2,civilized:7,PARS:2,storming:8,Tractebel:2,speed:25,EPC:2,EPA:2,Sterling:11,desktop:22,Toshiyuki:2,gloating:8,Othon:2,mournful:1,hover:42,frown:33,wheelbases:4,Eclipse:11,absorptive:1,usefully:6,Celtics:111,"pre-Freudian":1,Hez:11,lads:4,Shop:128,QuesTech:2,Shot:17,pounds:18,"slower-than-anticipated":1,Squatting:229,"Gates-Warren":2,Shoe:2,"white-washed":1,dirtier:12,Suntrust:2,Nobrega:11,Before:316,meringues:4,homicides:4,densest:51,Wholesome:1,Steinbecks:28,Elavil:2,"auto-repair":1,perverse:1,Zeme:2,"white-majority":1,"junk-mail":22,Ai:813,Interface:2,Ainus:28,necessitating:8,IPOs:41,Wooded:1,"post-surgery":1,Wooden:1,Tinseltown:2,meets:72,"mini-Prohibition":2,underselling:8,interrogators:4,reexamine:39,"S.A.":2,Bookshop:2,chop:63,Solutions:65,"over-corrected":16,"tweety-bird":1,deranged:7,folklike:1,researching:8,protests:18,Schmidlin:2,fruitlessly:6,reipublicae:64,bathtubs:4,renovate:39,electrosurgical:1,tilted:112,Meeting:210,Ulrich:2,actuarially:6,"Moon-faced":1,Lyceum:2,Wachovia:2,Hellinger:2,"cold-blooded":1,"A.I.R.":2,"four-mile":1,Fending:8,Olathe:2,Prestige:47,immaculate:1,overpaid:45,Simak:2,immemorial:1,curiously:6,McKnight:2,Simai:2,caryatides:4,"bad-news":3,hire:95,Theorists:4,"proof-of-purchases":4,"art-filled":1,dabbling:8,bucked:32,popularize:39,Moise:2,momentarily:6,describe:42,moved:32,aftershocks:4,bawled:16,precrash:1,Lennie:2,"L.J.":2,Citic:40,moves:18,judicially:6,Jake:11,administered:54,foothills:4,Heinbockel:2,intercontinental:1,Fascists:28,evenings:4,relegating:8,polar:1,Dogberry:2,overreact:42,overreach:39,Estates:2,torches:4,laudatory:1,resealed:17,connotations:4,"turf-hungry":1,Untouchables:28,dedifferentiated:1,Spalsbury:2,Exchangeable:2,"Investment-grade":1,doubted:32,stringy:1,Academically:6,strings:18,Pepperell:2,Internationalist:2,Fetzer:2,Frankel:2,"Exxon-owned":1,Domeier:2,Wayland:2,Capri:2,inflating:8,Moses:113,batches:4,referring:8,trudging:8,Hodosh:2,substantively:6,solicit:42,"high-fiber":1,clerics:4,nodes:4,subtleties:4,Aysshom:2,clairaudiently:6,clubbed:249,robes:4,parry:39,matriculated:54,enciphered:17,robed:17,Enzo:2,organizationally:6,"first-eight":1,Kline:2,mild:1,Knead:39,Breakfast:47,Esteban:2,Seidman:11,Hobson:2,"Nimbus-7":2,opting:8,nearing:8,Inasmuch:6,Cerise:2,"family-centered":1,AVON:2,Latin:209,Ayala:2,Tolley:2,Dalbar:2,fractional:1,blundered:32,Alltel:2,moisturizers:4,flocculated:17,strong:97,"Italian-style":1,addictions:4,ultra:1,colored:7,"twice-a-day":1,Tommie:2,Itself:53,victimized:14,unharmonious:1,Bohemians:28,Parish:2,Warfield:2,hogs:4,chunky:1,"pro-neutralist":1,chunks:4,Schnabelian:1,spawned:32,minifying:8,Benchley:2,Brooding:116,Automobiles:57,userfriendly:1,"Standard-Times":2,polyps:4,abridged:17,"bio-medical":1,Kochaneks:28,abridges:20,rangelands:4,broke:814,browned:17,underwrites:20,hurry:24,Literary:40,Cautions:28,"stone-gray":1,"addle-brained":1,Freudian:66,Chatterji:2,subtends:20,Easterbrook:2,"compound-engine":1,thumped:16,spontaneous:1,Inflows:4,"wine-dark":1,"high-density":1,pushes:72,courtesies:4,Galbani:2,pushed:32,lacks:20,Paos:28,"arteriolar-pulmonary":1,chops:4,ratified:32,foreseen:17,foresees:20,"Foreign-registered":1,biopharmaceutical:1,Kouji:2,ratifies:20,centimeters:4,unearthly:1,"heavy-electrical-goods":1,rapists:4,fy:33,Pansies:4,Blank:2,dwarfed:54,screenwriters:4,Conseco:2,"pre-primary":1,outdistanced:32,Syria:2,WFAA:2,"co-authored":54,"Stressed-out":1,Kopstein:2,PUBLISHING:47,frictions:4,laminate:22,Deer:401,bugs:18,"lesser-rank":12,slacking:8,colonels:4,Sometime:6,"one-word":1,scaring:8,Deed:2,"A.R.A.":2,"Grisha-class":1,Sandwiched:17,GHR:2,GHS:2,rhinos:4,cyclists:4,auburn:1,Birkelund:2,perceptive:1,Sandwiches:4,"Neb.-based":1,staunch:82,atrun:1,Arseny:2,"co-chairmen":4,environmentally:6,"fog-free":1,FII:2,Habsburg:2,Bankverein:2,"Bee-Hunter":2,Keep:216,"I.W.":2,Moods:2,"pretty-good-rated":1,Kreditkasse:2,Reichmann:2,"much-craved":1,seminarians:4,chartings:4,Palmetto:2,offensives:4,sweeping:5,intranasal:1,"C-17":11,trailed:32,Loans:123,transplanting:8,"s.r.l.":2,Bovenzi:2,Hickman:2,Gayle:2,"abortion-rights":152,pamper:39,nein:64,Falcons:57,thirteenth:3,Zelda:2,bickering:21,Peaceful:1,taunted:32,bikers:4,"expense-paid":1,juniors:4,"blue-chip":117,Sinai:2,"half-way":97,Ledford:2,"pouty-looking":1,"in-plant":1,inert:1,protruding:8,dirt:22,Butowsky:2,Grey:2,Campground:2,base:205,dire:642,Webern:2,bash:25,Godot:2,liquidities:4,uprooted:45,"spot-television":1,Josephine:2,sheiks:4,Dixons:2,Disputado:2,scouts:4,Disputada:2,Faraday:2,Lexus:2,"Bang-Jensen":2,partnerships:4,knots:4,Mecca:2,Watanabe:2,Panther:2,quarreled:32,dabbing:8,Imo:2,elder:815,typefaces:4,legitimating:8,"Durable-goods":1,"odds-on":1,Samford:2,Orestes:2,airborne:1,Steinbeck:2,"light-reflecting":1,Ghez:2,Delta:129,ladylike:1,storm:44,bullwhackers:4,"two-hit":1,Vaska:2,CULPA:2,Oddly:6,flatters:20,cartridges:4,Patricelli:2,Lancashire:2,viaducts:4,Feldene:2,kindly:218,performers:4,Matthies:2,impersonal:1,McClellan:2,Serafin:2,"dealer-led":1,kindle:39,Rossini:2,Elisa:2,newborns:4,deciding:30,Fossett:2,WBZ:2,Douglas:2,Current:66,substantial:1,"post-1997":1,Stoecker:2,"CAPITAL-GAINS":2,Wolkind:2,Fendi:2,Sutro:2,Vineyards:57,CoastAmerica:2,"unique-ingrown-screwedup":1,Kennan:2,quote:95,Installing:8,exempted:54,BEAM:2,"under-funded":1,eaten:17,Guyana:2,hallucinatory:1,Remic:40,"short-cutting":1,"mineral-rich":1,aberrations:4,Muzak:2,Quizzical:2,crudities:4,luckily:6,Wolfgang:2,blend:24,Yavapai:2,Fulke:2,Bartha:2,Norris:2,aglimmering:8,Thirdly:6,Squires:2,Wyden:2,Nalcor:2,DEAL:2,Shahn:2,Sailors:4,"aflatoxin-related":1,Traffic:11,central:3,"C.C.N.Y.":2,believeth:20,Scholey:2,Revisited:2,upstanding:1,meanwhile:43,famous:176,Ditmars:2,during:127,DEAE:2,"half-drunk":1,wheezes:4,PerkinElmer:2,"left-wing":1,Fletch:2,faxing:8,"E&P":2,"E&J":2,Telford:2,wheezed:16,"mis-reading":8,"once-powerful":1,reminisced:32,"expanding-profit":1,undergoes:20,Stoops:2,nostalgically:6,plough:39,Verne:2,reminisces:20,descriptions:4,Taif:2,Belletch:2,Neither:816,deploying:8,Subroto:2,Parc:2,Park:128,wop:39,shipsets:4,"marine-shipping":1,Part:47,McLauchlan:2,assistants:4,piss:39,catalogs:18,"FDA-approved":1,notoriously:6,Despina:2,appetites:4,"precision-materials":4,"nut-like":1,stairways:4,poorer:136,readying:8,useable:1,adores:20,"grief-stricken":1,Satisfied:17,"wage-floor":1,Genzyme:2,adored:32,"anti-inflation":1,Huxtable:2,buzz:70,Studwell:2,unrelenting:1,Certainly:6,Dickman:2,Prucker:2,awnings:4,Reeboks:28,"body-numbing":1,fixedrate:3,Sterba:2,Melancholy:1,victimizes:20,forseeable:1,Grannies:28,HNSX:2,mockingly:6,wait:95,travelrestrictions:4,partly:6,"Reichmann-controlled":1,packs:18,"higher-level":1,Diehl:2,doggedly:6,Basket:2,"corporate-finance":3,Pfeiffer:2,"child-abuse":22,mumbling:8,overran:16,Dona:2,Alacrity:2,INDIAN:1,Done:17,Dong:2,"Soft-Sell":1,transcripts:4,"most-active":186,Issues:56,herein:6,geologists:4,rulers:4,"race-based":1,PennCorp:2,Nidal:2,Ruiz:2,"debt-financed":1,salons:4,clerical:3,anymore:6,belong:392,Alert:2,unfenced:1,shackle:39,Silk:2,Sill:2,Shine:2,Philippoff:2,Shing:2,optic:1,anorthic:1,Shinn:2,Publications:111,"H.S.":2,haunting:450,Robinowitz:2,Shiny:2,Klipstein:2,"mega-crashes":4,jogs:20,underlies:20,chronicles:72,clears:20,Fang:2,"unco-operative":1,Salazar:2,"pseudo-questions":4,Aloha:2,quarters:4,Fans:4,Pamela:2,pyrotechnic:1,useful:1,Lindamood:2,panaceas:4,Harel:2,throaty:1,Rorschach:2,"yttrium-containing":1,canisters:4,throats:4,"Brown-Forman":2,daylights:4,Koppers:2,"S.O.B":2,Handlers:113,evaluate:42,Beatlemania:47,tiring:8,enthusiastically:6,Billy:2,Hittner:2,Eppner:2,"co-chaired":14,Ruoff:2,tinkered:17,moire:1,Shikotan:2,signal:44,resorted:17,actives:4,"linen-covered":1,minced:17,Schiff:2,wombs:4,"major-medical":1,outnumber:33,showgrounds:4,"ultra-thin":1,Martineau:2,trendy:1,transversely:6,Greenback:2,beneficially:6,dialyzed:54,pounding:55,NWA:2,Disposition:2,pushers:4,Kredietbank:2,hypocritical:1,pfennigs:4,Outgoing:1,rebates:4,Aetna:11,dilating:8,Fudosan:2,rebated:17,pitchers:4,abroad:6,Rhodesia:2,Impediments:2,PASOK:2,"grease-removal":1,Scudder:2,Catherine:2,trucking:21,Chateauvallon:2,"tax-avoidance":3,Domitian:2,Leale:2,Rolnick:2,seeing:8,baboons:4,shipshape:1,quasisports:4,"two-seaters":176,birches:4,ensue:42,Their:35,Boursault:2,conscientious:1,Quebecor:2,"Brady-type":1,Vitale:2,caressed:16,Composite:129,"small-company":22,besieged:14,Portman:2,caresses:18,Vitaly:2,Toit:2,confessing:8,"disaster-recovery":3,hummocks:4,Severs:2,pedestals:4,"Attorneys-at-Large":2,Severe:66,"gas-tax-increasing":1,"earlier-expressed":1,Severa:2,"college-bound":1,ceremonies:4,Rufenacht:2,clubhouses:4,Casson:2,circuits:18,chromed:1,Svenska:2,Brit:2,heterogeneous:1,"d-Percent":817,Wagg:2,"Stop-limit":1,adults:4,Stormy:2,"do-or-die":1,Tate:2,willed:32,Tata:2,languishing:30,sharing:55,seethe:42,oxidized:1,Above:818,"Minpeco-Manufacturers":28,"four-lane":1,Calculating:8,politicians:4,enquired:16,tits:4,forge:95,Hammacher:2,Gerry:2,Panetta:2,"co-sponsors":4,revamped:45,Lovenberg:2,Powicke:2,Cheval:2,clenched:103,perishables:4,heats:20,Geiger:11,clenches:20,Unger:2,Watkins:2,Lars:2,mores:4,Zeffirelli:2,Lara:2,"price-slashing":3,Swadesh:2,Lark:2,instrumentally:6,Combat:2,Alcan:2,arid:1,ripened:32,Hallador:2,relocated:32,fly:182,"P&C":2,"products...":102,"P&G":640,portfolios:4,"Two-thirds":4,Muong:2,squeaked:16,"P&S":2,Chica:2,enslaved:17,frigates:4,polymeric:1,Chico:2,multipleuser:1,insuperable:1,Bodmer:2,"non-equity":1,flickered:32,unexciting:1,insuperably:6,deleting:8,dilute:83,howls:18,Teaching:268,vilified:17,experiment:24,ARRIVED:16,selecting:55,"self-defeating":1,";":819,Winfrey:2,Swift:2,saps:20,GOLDEN:2,melancholy:22,focuses:72,Cunningham:2,Kerrville:2,Greer:2,Debating:2,Sagos:4,Greek:40,Green:129,Volumes:123,"artificial-heart":1,Greed:47,spellers:4,noisily:6,bites:18,"Jean-Louis":2,antecedents:4,Emory:2,Hindu:11,juries:4,pariahs:4,Kirk:2,"highly-leveraged":1,Utopian:40,filde:17,Kira:2,"N-no":106,Harmless:1,Explaining:8,REMEMBER:39,"R-Warren":2,"vs.":820,Taxable:2,reregulate:39,Ruberg:2,simpliciter:64,reflects:20,stirups:4,optimizing:8,McWhinney:2,imprisons:20,Denmark:11,gardened:16,darting:8,Calhoun:2,Skylark:2,Claire:2,"S-K-I":2,"six-inch":1,LARGEST:51,inattentive:1,Leisure:11,arched:103,Khrushchev:2,videodiscs:4,UCLA:2,Esplanade:2,Choreographed:17,arches:18,infinitesimal:1,"Baltimore-based":1,Defenders:4,TRUCK:2,Grunberg:2,Heidegger:2,Quelle:2,escapes:18,escaped:32,Damon:2,"color-printing":1,Homemade:157,suds:91,darkening:8,cots:4,boasting:8,jails:4,NHL:2,semitropical:1,NHI:2,Camino:2,neurotic:1,solidifying:8,located:81,Gord:2,Gore:2,Urich:2,elliptical:1,Coriolanus:2,deplore:39,Lobby:2,Philips:113,cobwebs:4,furiously:6,billows:4,colonnaded:1,"lift-ticket":3,chiefs:4,Blackberry:2,Lifetime:11,spelling:21,hasher:215,flagrantly:6,flashier:12,Eigen:2,SAME:1,corral:25,Accudyne:2,crematoriums:4,"LONG-TERM":1,"fund-research":3,Keidanren:2,bathing:21,Addington:2,Cycling:2,Brandeis:2,Gonzales:2,Carnevale:2,Smith:2,"higher-paying":1,"less-developed":200,brittle:1,subversive:1,Paperwork:2,"e-In":127,"consumer-goods":4,Athanassiades:2,"Anti-Communist":66,Luis:2,Eyke:2,sardonically:6,Schulman:2,"Aaa-ee":106,"administration-Fed":1,Margolis:2,Miami:2,Pyo:2,Brother:2,Confair:2,modernistic:1,"watch-spring":1,"parent-teacher":1,Celsius:2,mode:80,engraves:20,Administrators:111,"paid-for":127,prorated:17,inverted:7,climatic:1,Spatial:1,Avenues:2,secretly:6,criminally:6,"Fence-line":1,Bebear:2,"pre-Sterling":1,Proust:2,underpinned:54,Beginning:210,Rosalyn:2,influent:3,achievements:4,reacts:20,"stepped-up":1,diagonal:1,Substantive:2,"Not-Held":2,drowning:8,route:821,diminished:81,relentless:1,keen:104,keel:25,Aspencade:2,diminishes:20,Lamb:11,Reckitt:2,incarnate:82,Lama:2,succeeds:20,"zero-sum":1,Nipe:2,decribed:16,forego:42,Lamm:2,Massell:2,filigree:3,"sucker-rolling":1,Lamy:2,Nipp:2,Mobilia:2,Slavic:40,Peerless:2,Slavin:2,perinatally:6,prouder:68,unambiguously:6,circulate:42,lighters:4,earmarked:291,Searles:2,synergistic:1,herself:53,Combellack:2,photograph:25,spurn:149,"English-dialogue":1,"two...":102,buggers:4,spurt:78,providing:822,supplanting:8,Rumford:2,Information:11,Guderian:2,gratingly:6,dogmatically:6,"government-supported":1,Highlights:4,dewdrops:4,beefs:20,thereto:6,"p.m":823,beefy:1,"prior-review":1,"hot-dipped":1,"Coffee-House":2,sprinkles:20,unadulterated:1,Photos:4,sprinkled:32,gunned:54,Underwriting:21,Cotman:2,adieu:64,Unamused:1,Bremner:2,disgorge:39,"little-publicized":1,Sharkey:2,resplendent:1,liturgical:1,"flip-flopped":1,crossroading:8,sippers:4,Heidi:2,"olive-green":1,Toomey:2,gentleladies:4,Eastate:2,Loney:2,Expects:18,blurt:78,proceedings:4,propels:20,"profit-taking":824,Cioffi:2,Jorndt:2,Provincial:40,Matt:2,Mascarita:2,Matz:2,unfathomable:1,reclaiming:8,Math:11,envy:24,"transfer-pricing":1,idiocies:4,hadd:17,"re-evaluate":347,Brauer:2,Dinsa:2,equivalents:4,slows:72,crumbling:30,Oestreich:2,FiberCom:2,Hague:2,desecrated:17,"drug-approval":1,marvels:18,Domicilium:2,"anti-crime":1,wincing:8,parlors:4,Jerseyite:2,Takaezu:2,Uncontrolled:1,Diana:2,preach:42,Driving:229,burying:8,capitalists:4,Jenkins:2,SBCI:2,forgo:42,unearth:39,cents:4,Protective:1,Sosuke:2,joys:4,"high-gloss":1,correctly:6,lug:63,lui:64,flicks:4,sold:54,Beaufort:2,nutritious:1,barreling:8,munching:8,"Cuban-American":2,Petrograd:2,foreshadow:42,squads:4,disproportionately:6,"Home-keeping":1,pilgrims:4,interpretations:4,Belzbergs:28,Devereux:2,disobeyed:54,Jihad:2,Mazilo:2,"lobster-backed":1,habitual:1,CIA:2,Karolinerna:2,betrayed:54,temperamental:1,cohere:39,crystalline:1,alternates:72,Garber:2,disintegrate:39,"computer-systems":4,"N.F.":2,"Indo-German":2,Careful:1,darkling:1,Meador:2,"Cuban-assisted":1,Ignazio:2,Sandinista:40,kicks:72,boxcars:4,"Duty-Free":2,novel:22,"principal-only":1,Unsinkable:2,wth:127,Elbe:2,Elba:2,resident:22,CIT:2,"WNYC-FM":2,despues:64,Pushkin:2,Briggs:2,Hinduism:2,lambs:4,Hinduish:1,Lobl:2,Melamine:1,PPG:2,"consumer-credit":3,operas:4,Underneath:325,chants:4,PPP:11,"high-interest-rate":1,Containers:111,haranguing:8,Exocet:2,Uniate:2,absorb:42,"raw-sugar":1,recommendatons:4,Freeway:2,Families:57,"sore-ridden":1,"stay-at-home":1,Whittington:2,energized:17,Wallingford:2,Wieslawa:2,i:825,modeled:45,"long-rumored":1,"home-acquisition":1,flexing:8,Heywood:2,energizes:20,Remembrance:47,"]*":826,jurisconsults:4,Provinces:74,Peaceable:40,accurate:1,resiliently:6,Sunday:2,"office-supplies":4,"low-level":1,altruists:4,bequests:4,surfaces:18,Helmut:2,extends:20,Beaux:2,"W.H.":2,intimated:32,"AFRICAN-AMERICAN":1,"open-face":1,"Winston-Salem":2,"pro-cut":1,"avant-garde":3,rebelliously:6,reproducibilities:4,"labor-management":3,prominent:1,Priddy:2,alternatively:6,"assault-weapons":1,LAMBERT:2,"low-maintenance":1,Tranportation:2,"full-on":1,Roxani:2,"Wheeling-Pittsburgh":2,"drug-infested":1,cognate:1,ZENITH:2,Wagner:2,Curragh:2,liking:21,Shahal:2,Larkin:2,"imitation-caning":1,Monsieur:87,sweepingly:6,Killer:2,ROY:2,"increasing-rate":1,fretted:16,"computer-and-semiconductor":1,"over-occupied":1,exerpts:4,"Houston-area":1,Measurement:11,"processed-meat":1,"life-style":22,"Soloviev-Sedoi":2,sinister:1,Ages:41,recognized:81,epitomize:42,recognizes:20,Agee:2,"U.K.-based":1,Tobin:2,enacts:20,squarefoot:1,"Democratic-sounding":1,congregate:39,"particularistic-seeming":1,Dukes:111,backups:4,"lower-priority":1,Sarti:2,rejoice:149,Zhang:2,mastermind:25,canting:1,noticed:112,Holzman:2,notices:18,unexamined:1,mucked:17,Edelson:2,Navistar:2,Drifts:123,escrow:22,prophecies:4,hierarchical:1,spigots:4,ho:106,ha:106,modifiers:4,Appalachian:2,Luang:2,Rapids:74,Merieux:11,"show-offy":1,Gillis:2,offstage:218,Dodds:2,Smirnoff:2,twise:6,affectionate:1,redeems:20,Springdale:2,urns:4,"M\\*A\\*S\\*H":2,twist:24,lobes:4,Bankers:41,vociferously:6,"discount...":102,Shall:487,Paynes:28,Byzantium:2,Shale:2,Fridays:41,crummy:1,fledgling:22,disposing:8,Parichy:2,Euroflics:28,expressible:1,Rests:20,COKE:11,gradations:4,insults:4,inescapably:6,handymen:4,Oberhausen:2,pathways:4,"precise-sounding":1,curbed:54,Andromache:2,Avianca:2,RTC:2,Harken:2,Betting:116,"Georgia-based":1,Clairol:2,Proposition:11,"floor-level":1,Blendax:2,Oncogene:2,zillions:4,dynamic:3,Outpatient:47,straws:4,"mental-health":3,neoplasia:64,"reunion-Halloween":1,Hombrecher:2,Descendants:4,remodeled:32,Parenthood:11,"yield-hungry":1,Addict:11,"executive-only":1,nourishes:20,Sulzberger:2,Tulane:2,downstream:218,desirable:1,railways:4,Wilks:2,entitlements:4,nourished:14,reforms:4,Wilke:2,"low-key":1,"hit-and-miss":1,molesting:8,Tillet:2,"first-term":1,companies:4,correct:240,LaRiviere:2,mopped:32,McCanna:2,Goering:2,RTZ:2,reshuffling:55,Occupation:2,worriers:4,Joann:2,Shupe:2,"form-creating":1,"gray-backs":4,lavender:3,orifices:4,"anti-smoking":1,Poles:41,Agreements:4,neo:1,spouses:4,chemcial:1,shamefacedly:6,Mosbacher:2,Pewabic:2,Kinkaid:2,Put:827,new:1,net:104,harbors:18,healthily:6,unasked:1,screams:18,filbert:1,Burbank:2,Federated:2,"price-cutting":22,interpret:42,remittances:4,"three-piece":1,Correction:47,piroghi:4,floorboards:4,speeded:32,"seed-pods":4,adolescents:4,reschedulable:1,Claus:2,"revenue-raising":3,possessing:8,"Bennett-Bloom":2,spurted:32,busses:4,Romain:2,counts:18,Offshore:40,"chest-swelling":1,ratty:1,Subpoenas:4,Wilkins:2,"IRS-HHS":1,recommend:42,"N.J.":2,Johanna:2,type:25,"made-up":1,Trent:2,Manet:2,posting:55,Raitt:2,DiMaggio:2,"shoulder-high":1,surrealistic:1,rimless:1,Nordic:1,McKim:2,sped:32,Bombardier:2,Eiji:2,sizzled:16,suggestive:1,Petrini:2,ONEZIE:2,sizzles:20,Montvale:2,"better-selling":1,stagnated:16,blips:4,Keynesians:28,Illustrations:123,Tillie:2,Tankers:4,Habeas:64,Edmond:2,"CBS-TV":2,Chimie:2,EEOC:2,poltically:6,Laurance:2,McGhie:2,skindive:39,reconciled:17,Rill:2,Howell:2,Ebensburg:11,reconciles:20,"national-treasure":1,loyalists:4,Regius:2,riffing:8,Werther:2,Loughman:2,citrated:17,Fialkow:2,pianos:4,ensnare:39,Brook:2,Comprecin:2,Laurence:2,Simonds:2,Hitlers:28,"one-quarter":22,"fun-loving":1,"Anti-Semitic":1,Helen:2,surcharges:4,Pamour:2,Vidal:2,ghouls:4,Oxy:2,Alternatively:6,"price-to-earnings":1,academics:4,bankroll:42,Battelle:2,aborted:103,indulge:42,Toros:2,"high-capacity":1,"pollution-control":3,Economists:56,"palm-fringed":1,Cariaga:2,musicians:4,Pettigrew:2,faraway:1,"non-violently":6,Dataquest:2,acoustic:1,calibrations:4,interministerial:1,sonatas:4,Couve:2,"Police-man":2,Glasnost:64,escrowed:17,caustic:1,exigencies:4,dawn:25,publically:6,Dorsch:2,Goodwin:2,Litigants:4,"ever-expanding":1,unromantic:1,surprise:479,sluggish:1,"thirty-mile":1,Antitrust:40,"hangers-on":4,telescoped:17,Watertown:2,bestow:39,cement:25,Planes:4,telescopes:4,Sarmi:2,Criticism:47,Lucien:2,Gumpel:2,"red-rimmed":1,messages:4,"wry-faced":1,Ukrainians:28,Sandinistas:41,liquids:4,diggers:4,Bowlers:28,"second-guessing":21,enrollees:4,economists:4,Stadiums:4,workingmen:4,Frondel:2,"Lincoln-Mercury":2,BroadBeach:2,synthesize:39,Wainwright:2,Morarji:2,"NASA-Air":2,girls:4,Claude:2,overstating:8,"non-drug":1,monicker:12,Valium:2,exposures:4,dilated:17,Boucher:2,escort:25,dramatized:17,Corners:28,"Mid-State":2,objecting:8,dramatizes:20,Discs:2,"No.3":1,dilates:20,stocking:55,firehouses:4,soonest:51,legalize:42,Gifford:2,"N.M.":2,threadbare:1,thills:4,coltish:1,Heumann:2,extorting:8,Roleplaying:21,Canaveral:2,Compiegne:2,impotent:1,hebephrenic:1,sneered:16,Kakuei:2,Algerian:66,Refunds:4,buggies:4,Trotter:2,cassettes:4,Comex:2,Comet:2,Lalaurie:2,exonerate:39,Comer:2,Bakhtiari:2,pointe:64,"W-2s":4,medical:1,impudently:6,Philippine:66,unmated:17,Diaghilev:2,digress:39,points:18,falconers:4,paterollers:4,pointy:1,doves:4,"Gold-oriented":1,incoherently:6,Samson:2,"well-publicized":1,thirds:4,"wide-shouldered":1,judges:18,Byelorussia:2,Angellism:2,undoubtedly:6,insecticides:4,Visual:1,judged:54,palisades:4,Prexy:2,Greedily:6,Explosions:4,Pembroke:2,"third*":51,Sperandeo:2,"seventy-odd":1,"super-fast":1,smug:1,Organization:11,Palestinians:28,Johnstone:2,"out...":102,fields:18,repealing:8,Miraflores:2,Anatoly:2,Anatole:2,Sacre:2,attest:42,Bello:2,Sogo:2,Belli:2,zoned:17,Belle:2,Bella:2,"contract-drilling":21,zones:4,Debbie:2,Patrimony:2,Butler:2,Rexinger:2,Macropathological:2,Bells:41,pebbles:4,Bearman:2,Biology:2,Run:128,Rum:2,scrap:70,Hassenfelt:2,"Petro-Canada":2,Rus:2,sorts:4,"drug-sensing":1,Toshimitsu:2,dumber:12,laureates:4,"G.W.":2,"wedge-shaped":1,carnivorous:1,uncreative:1,excavate:39,"earthquake-stricken":1,unusally:6,Moreton:2,opportunities:4,MARCHED:16,Brush:128,Amerada:2,Mayhap:6,vex:33,Machinery:11,"tightest-fitting":51,Cuyahoga:2,Petroleum:11,whisper:25,ballparks:4,BULL:2,springs:18,speedily:6,Papermate:2,"easy-to-spot":1,brassy:1,Claimants:28,proceeded:32,"missile-engineering":1,formalizes:20,cuttings:4,glamorized:17,"fog-enshrouded":1,"taxi-ways":4,Ratcliffe:2,"X-ray":22,Sentencing:21,Wyckoff:2,formalized:7,Sandhills:2,"non-Communist":1,Georgia:2,Hands:46,"re-runs":4,strictures:4,Yang:2,"Lars-Erik":2,Chappell:2,demobilizing:8,shovels:4,tank:25,Turkmenia:2,homebound:1,tans:4,chilling:30,Corrigan:2,metropolitan:3,"Thompson-CSF":2,semper:64,"alternative-fueled":1,encamped:17,Lyme:11,sequined:1,shame:25,Southdown:2,hardscrabble:1,Jenks:2,clinging:8,Gear:11,cools:20,Tornado:2,"non-Indian":1,"away-from-home":1,sidelined:14,cooly:6,forklifts:4,"chin-wagging":1,sidelines:4,"IMF-approved":1,Stalinism:2,discriminatory:1,Framingham:2,blandly:6,Faust:2,jealous:1,Builders:41,Kerich:2,romp:78,unemotional:1,Bantus:28,SunTrust:2,entanglements:4,De:87,Kaitaia:2,Defamation:2,rebellions:4,Kohut:2,Raich:2,Leadbetter:2,"new-styled":1,"biggest-selling":1,Unhappily:6,balletic:1,catalytic:1,satisfactions:4,"low-to-no-fat":1,Weak:1,"more-pressing":1,Wear:216,Chancery:2,designate:520,opt:42,Ligget:2,unfitting:1,ducts:4,"recession-oriented":1,depicts:20,Onegin:2,"technology-related":1,"money-making":3,Barker:2,Brawls:4,Keihin:2,"Anglo-Protestant":1,"over-optimistic":1,"post-hurricane":1,"working-class":3,assimilating:8,Chevrolet:11,swab:39,meekest:51,"W.Va":2,sprawl:24,"Pay-Per-View":2,total:255,tracked:45,undisturbed:1,Nobody:47,oleophobic:1,Soucy:2,flounder:39,beget:42,Souci:2,Dunne:2,pupates:20,unwholesome:1,divining:8,Rodeo:11,"land-idling":1,"far-ranging":1,astir:1,denuded:17,DECstation:2,Motorcars:28,Cheat:2,Innesfree:2,metrical:1,Cheap:1,Austria:2,"office-products":4,azure:1,islands:18,boors:4,"long-canceled":1,gloss:182,castanets:4,SUN:2,"odd-looking":1,Gruberova:2,containable:1,Draft:2,Guigal:2,supremely:6,rant:33,"soft-shoe":1,unseal:39,"Feng-hsiung":2,"host-specific":1,Paschi:2,"not-too-distant":1,Bebey:2,Brockman:2,Fortman:2,unseat:39,fork:25,"Rte.":2,form:205,Assume:39,"year-long":1,"Eighty-seventh":2,Carmack:2,fore:163,penned:54,syndicate:25,Biochemical:2,Felec:2,Chatha:2,Joon:2,fort:25,Maguires:28,dollops:4,occupancies:4,DeGroot:2,temper:25,delete:39,Publishing:11,exerting:8,shim:39,Kell:2,Romanian:1,Walbridge:2,Forebearing:2,revitalize:39,ship:24,pernicious:1,Tipasa:2,Starch:11,"far-away":1,"butadiene-emulsions":4,Stennis:2,digital:1,Paget:2,hangin:8,Pages:111,alleviates:20,Chemex:2,Vous:64,felt:32,fell:828,exported:54,authorities:4,Hund:64,Moravcsik:2,Eastchester:2,blushing:8,Devitt:2,Second:829,"month-to-month":1,Throat:2,"Black-and-white":1,"gay-bashing":1,aftertax:3,precipices:4,primed:81,Minwax:2,"Torrio-Capone":1,Susumu:2,primes:4,"medium-haul":1,targeted:45,Nederlanden:2,Hitler:830,misread:16,"U.LLO":2,Horsehead:2,Mechanisms:28,editors:4,Ridley:2,unruffled:1,marks:18,Cardoso:2,"smoke-choked":1,Atlanta:2,Easton:2,Chieftains:2,ballooning:21,PipeLines:74,scarcest:51,"one-dumbbell":1,penniless:1,"bed-hopped":16,"silver-blue":1,Plus:831,Athabascan:2,"three-day":1,rebelling:8,Medecine:2,travels:72,Tabit:2,brownish:1,Unsuccessful:1,Collier:2,putains:64,Bankshares:28,Viruscan:2,shave:95,"stock-watch":1,draping:8,"Detroit-based":1,"commercial-industrial":1,soured:112,Tuxapoka:2,Beverages:130,Spenser:2,landslides:4,Trofeo:2,Ferrer:2,waggled:16,"hand-to-hand":3,Tess:2,"Rodney-The":2,growls:20,Colonus:2,"lash-up":1,detest:149,vestibules:4,hummed:32,Chateau:2,environs:4,Sleeping:321,forages:4,"contingency-fee":1,rediscover:39,SKIRTS:2,genuinely:6,Makoto:2,rheumatic:1,colloquial:1,councilors:4,enticements:4,testily:6,modus:64,Bolar:2,Reichmanns:111,Frawley:2,Lanes:4,troops:4,Freiburghouse:2,Hacche:2,insides:4,insider:22,Allowing:8,thru:773,Finerman:2,effectinge:8,outweighs:20,PRIMERICA:2,Ben:2,dissembling:8,Bel:11,Fromstein:2,Bea:2,Orlando:2,Bee:2,Bey:2,rigid:1,Processed:157,Bew:2,capturing:8,"eight-member":1,walled:7,transferral:1,inertial:1,"new-house":1,incarcerated:17,Prosecutorial:1,grained:1,crazy:1,monoclinic:1,"egg-sized":1,Sandusky:2,"Democratic-sponsored":1,overzealous:1,remanded:32,HAL:2,Sweepstakes:2,"cause-and-effect":1,inflows:4,Apocalyptic:40,wheezing:30,inundated:14,range:832,agonizing:1,scornfully:6,swore:16,sworn:14,grok:42,Eichler:2,Bodenseewerk:2,HAD:16,misrepresented:32,Trifari:2,praiseworthy:1,COMPUTER:47,Apaches:28,relinquish:42,aimless:1,outline:44,facile:1,Brinkman:2,ionized:14,jail:25,sitcoms:4,Hama:2,Hamm:2,trichloroacetic:1,"walkie-talkies":4,rabbi:19,pointed:112,"Hills-Hollywood":1,marshmallows:4,consolidating:30,"Administration-insured":1,Resting:8,Applebaum:2,encompasses:20,Weckel:2,encompassed:54,folkish:1,Galligan:2,Purchase:11,mismatches:4,Urbana:2,"industry-financed":1,Shu:2,"Boston-area":1,Shy:66,Spengler:2,heedless:1,Bowsher:2,mismatched:17,Shh:106,bullshit:25,Mittag:2,Rotonda:2,Weekend:11,Rotondo:2,peered:32,Woong:2,disproving:8,Resignedly:6,"speculative-grade":1,Split:17,preaching:833,Biondi:2,helmeted:1,rosettes:4,Laredo:2,torrents:4,"d-NAV":2,inventories:4,Medicus:2,intermarket:3,Schweicker:2,imperative:3,Omsk:2,unifying:30,Hambrecht:2,Judi:2,Cicero:2,Newmont:2,hefty:1,mechanisms:4,Jude:2,walnuts:4,Tumor:2,Judy:2,finishing:5,Stony:2,nufs:4,App:2,Apt:1,Elder:2,Hapgood:2,Enersen:2,Ape:2,Eric:2,dwelling:21,question:44,"weekly-average":3,ICBMs:28,Stardel:2,Pankowski:2,"D.N.":2,Masaryk:2,carry:182,unpublished:1,oohs:795,Stackup:2,evermounting:8,Posh:1,unduly:6,psychotic:1,entertainers:4,Polytechnic:2,Stiritz:2,Post:11,continuous:1,"buy-now":1,salarymen:4,"cavity-fighting":1,Floradora:2,Berkely:2,"once-cozy":1,infiltrate:39,"Tele1st":2,Ridiculing:8,Pascataqua:2,"cross-connect":1,browning:8,Tenderloin:2,"full-fledged":1,knives:4,gigantic:1,"lowest-priced":1,camouflaged:14,Rankings:4,briefs:4,reaccelerate:39,pulping:8,Celebes:28,Minerals:41,abdomens:4,Rulers:28,metalized:17,rupturing:8,rehearsals:4,firehoops:4,"case-hardened":1,creatively:6,Inventors:4,Wickliffe:2,Name:269,tallies:4,"semi-professional":1,paid:834,paie:39,ordinates:4,rigidly:6,"corporate-entertainment":1,pair:315,Toscanini:2,"NBC-owned":1,"weapons-systems":4,Pagliuca:2,Domina:87,"staff-cutting":8,Domino:2,Windmere:2,Marmon:2,Franklin:74,BART:2,"sandy-haired":1,Basie:2,Peapack:2,curled:32,Woollcott:2,"worker-owned":1,Ephron:2,"re-create":39,black:104,defenders:4,Fisher:2,Epicurus:2,"Walinsky-Rubinstein":2,"pro-life":1,"PG&E":2,"West-Point":2,BNP:2,"tamper-resistant":1,BNL:2,unethical:1,Tateishi:2,Jewelers:111,encroached:16,Tougher:12,Jewelery:2,Ullman:2,Folsom:2,Eicher:2,Toccata:2,"Druggan-Lake":2,communicated:54,Killebrew:2,Cavalry:11,Heitschmidt:2,Beechnut:2,Credibility:47,eighteenth:1,blurred:81,doings:4,Cloudcroft:2,Taney:2,Screwed:1,Lysle:2,whooosh:1,Perfumes:28,Messner:2,patronized:54,Pray:2,machetes:4,pump:95,chews:4,Bernet:2,Navajo:2,Berner:2,Basic:835,HEAVY:1,loped:16,Oats:836,scanning:21,couplets:4,Impersonal:1,handbooks:4,Calabrese:2,lopes:20,je:64,Pechora:2,tug:25,dates:18,parentheses:4,Pritzkers:41,Melodious:1,"Cho-Liang":2,"bald-faced":1,multicolor:1,dated:81,"stone-blind":1,dwellers:4,Employment:11,rehabilitated:17,Burgeoning:8,extendibles:4,Mistsubishi:2,Dominus:2,cancel:63,Wasserstein:2,Basin:2,tiniest:51,CASE:11,Urge:39,cervical:1,Prevot:2,analogies:4,certify:39,Escudome:2,unconsolidated:103,"tone-generating":1,Reporters:57,ranches:4,borders:18,Waterman:2,corduroys:4,Saxons:113,offered:837,Gottfried:2,"self-respecting":1,Condominium:2,Sprouted:17,vents:4,Sansome:2,Braintree:2,"Campeau-owned":1,Marshall:2,yearling:1,compile:39,terrestial:1,Sloane:2,antipathies:4,"paper-and-crayon":1,margin:22,Leser:2,McCutchen:2,Gutermann:2,"wish-lists":4,Petery:2,Amounts:4,Carrington:2,sincere:1,"expensive-to-produce":1,Caskey:2,Peters:2,Petronas:2,baths:18,Valencia:2,"single-minded":1,Plant:11,Gliedman:2,vagaries:4,Plans:838,Lakshmipura:2,"ultra-right":1,Napolitan:2,Tonka:2,Plane:11,afflicts:20,Plano:2,Hewitt:2,Plank:39,"buy-outs":4,SciMed:839,Salvador:2,independents:4,Humanism:2,Drawers:4,Humanist:2,"stop-overs":4,Patil:2,Maritain:2,drain:24,Rene:2,Coats:130,"pressure-formed":1,Renk:2,Reno:2,Waggoner:2,Misubishi:2,Rent:11,Britto:2,Britta:2,Burkette:2,amazed:45,breakfasts:4,lumbered:16,"wheat-growing":1,"Eliot-or-Martin":840,laudably:6,Gabelli:2,abstractors:4,"property-price":1,Ingham:2,trespasses:4,"out-reaching":1,Although:127,eviscerate:39,"self-energizing":1,Glow:2,newsmen:4,"price-determination":1,dissected:32,Faulknerian:1,venues:4,Jeanene:2,Ups:20,Henney:2,terrorize:39,"Kayabashi-san":2,Uncomfortably:6,Collagen:2,macrocrystals:4,Curiae:64,thighs:4,dictating:55,"civil-liberties":4,Stinky:2,dole:182,Kravitz:2,"a-coming":8,Schutz:2,booming:13,Kenton:2,gapped:16,Rake:47,Medea:2,"MD-80s":4,"tailor-made":1,unitized:17,lunar:1,"low-lifes":4,"earnings-limit":1,USDA:2,seconds:4,IOUs:4,snivelings:4,Bashing:8,"government-imposed":1,drums:4,Horner:2,Dionysus:2,refers:20,"Sci-Med":2,Hornet:2,stations:4,"Jee-sus":106,soulmates:4,meaning:21,Trade:11,Suspecting:8,metaphors:4,shunts:4,"base-wage":1,decimated:54,Poachers:4,"point-blank":1,Getrudis:2,Tenders:4,Wetzel:2,pharmaceutical:3,"Second-tier":1,"higher-grade":1,handcuffed:17,Masius:2,iambic:1,passports:4,"non-political":1,sorrel:3,Hovis:2,"fast-track":1,Duty:11,Sistemas:2,drills:18,"passenger-loading":1,Frazzano:2,Outraged:1,"non-Jews":4,netting:8,organize:42,Alamos:2,diffusers:4,Stenexport:2,"Milan-based":1,"force-level":1,Valen:2,garrulous:1,importing:55,Prescription:2,neurotransmitters:4,Djakarta:2,Springfield:2,Benet:2,Daggs:2,Benes:2,"Vale\\":127,Wrangling:8,"Montreal-based":1,hybrid:3,"Blue-chips":4,Dienbienphu:2,raucously:6,Petrocorp:2,privatized:45,shelter:25,durations:4,colicky:1,brandy:25,Biosciences:2,democratize:39,brands:18,RECEIVED:32,Major:129,"local-government":1,disabilities:4,Culligan:2,Geologists:4,roams:20,"Nagorno-Karabakh":2,looped:16,"long-haul":3,"fly-by-night":1,invariable:1,"Bears-Cleveland":2,bravest:51,talky:1,"anti-Communist":1,invariably:6,talks:18,Deducting:8,Kellar:2,BONDS:4,"Adios-Direct":2,"field-flattening":1,"on-ramps":4,chucking:8,Leuzzi:2,Westchester:2,Indecon:2,Glick:2,Yellowknife:2,carefree:1,Standards:111,fall:24,Recherches:64,Adella:2,Yamatane:2,Araby:2,alien:3,neurological:1,dispel:39,"grand-jury":22,Arabs:65,Sowell:2,windy:1,retargeting:8,"brewing-assets":4,"controlled-circulation":1,romping:8,economically:6,"species-dependent":1,Shotguns:4,Only:218,"congressional-item":1,misrepresent:39,Malpede:2,stood:32,Awarding:8,stoop:182,traineeships:4,outgoing:13,"cross-striations":4,ingratiate:39,Patti:2,inconsiderable:1,operating:5,"fifth-generation":1,Patty:2,prosecutors:4,"Chicago-style":1,Bromwich:2,milky:1,Colleen:2,narrow:82,milks:72,"nose-to-nose":1,"Y-Teen":2,Lighthouse:2,"self-imposed":1,Sandlund:2,armed:14,Tariffs:111,bountyhunters:4,suspensions:4,"doll-sized":1,arctic:1,"ex-truck":1,Alumina:2,quashing:8,Fraumeni:2,"much-needed":1,Vienot:2,patrolmen:4,FMR:2,Nimitz:2,admissions:4,Lizhi:2,controlling:5,FMI:2,Rudkoebing:2,projective:1,Harcourt:2,FMC:2,dey:53,Shrontz:2,der:841,des:87,Byron:2,dei:87,del:842,"head-in-the-clouds":1,den:47,ProCyte:2,strategies:4,tows:4,def:3,wails:4,purchases:18,dandy:1,Rilke:2,"sound-alike":1,galleries:4,Aldo:2,Schwarzwaldklinik:2,purchased:81,KCRA:2,Injury:11,Alda:2,"Kerkorian-owned":1,maturing:8,"EC-made":1,drained:54,"sec.":19,automatic:3,unclothed:1,Vinegar:2,"big-risk":1,Subdivision:2,"Hip-pocket":1,revolutionizing:8,blacker:12,surfactants:4,Eurobonds:57,disquieting:1,"red-cheeked":1,Collecting:2,Protectionist:1,Dillon:2,Shivering:8,Rhythmic:1,Dillow:2,nonshifters:4,foretell:39,Candice:2,"H.W.":2,pay:843,pleasure:70,"four-wheel-drive":22,Jazz:11,stains:18,remade:844,"Richmond-Watson":2,Demoiselles:2,lats:4,iodinated:17,FLYING:8,Covitz:2,handheld:1,late:97,Quest:2,jostled:16,dolls:4,seeking:8,Barbarians:2,"Reagan-like":1,Vatican:40,unauthentic:1,Cruzan:2,"too-large":1,"right-hand":1,Siedenburg:2,boisterous:1,harboring:8,Edmonton:2,Hmmm:106,Skase:2,dumbbells:4,Strictly:6,foxes:4,deployable:1,Waiting:229,Plaumann:2,"antibody-making":1,dignitaries:4,Wires:4,funding:845,Rathbone:2,projected:81,"hundred-odd":1,"sub-Saharan":66,"KC-135s":4,Bushell:2,stewards:4,arclike:1,pathetic:1,propfans:4,pleasant:1,melodies:4,Arkabutla:2,"Tax-exempt":1,Rumack:2,dribbled:16,MVestment:2,"co-operated":16,"six-months":4,lotions:4,"Over-50":1,"co-operates":20,Rover:2,"FH-77B":2,Syndrome:2,netted:32,waged:54,"non-volatile":1,Participants:4,Lithe:1,Ethan:2,gripping:30,wages:4,wager:25,modish:1,"joint-venture":3,"near-at-hand":1,Algeria:2,SAATCHI:2,"Anti-dumping":1,construct:42,obligatory:1,paint:44,Pyxis:2,Durkheim:2,STERLING:2,Modifications:4,Deltec:2,needle:25,defused:17,jaggedly:6,"anti-China":1,gruesome:1,stirs:20,Microphones:4,Thiebaud:2,b:846,Berland:2,"three-day-old":1,Commercializing:8,spirited:7,tensionless:1,bohemian:1,polishing:537,Tabernacle:2,"U.S.-dominated":1,Ito:2,Henrietta:2,concludes:20,confirms:20,paths:4,providers:4,escapades:4,trip:25,assails:20,aniseikonic:1,Derwin:2,Mayoral:1,Constantinople:2,Aventino:2,"bull-sessions":4,townhouses:4,Amityville:2,Greenmoss:2,Revolutionary:2,"N-acetylcysteine":2,bottle:25,"most-strident":1,uncommunicative:1,Eriskay:2,Governor:11,inexact:1,"single-premium":1,significant:1,farces:4,kiddies:4,unavailable:1,"First-round":1,Egypt:2,Consistent:1,charitably:6,Levitt:2,charitable:1,cramped:1,"V-6-equipped":1,Robinson:2,founds:20,FLORIDA:2,carefully:6,Francois:2,Aleksei:2,"one-yen":1,Furlaud:2,rebuttals:4,worthy:1,"up-and-coming":1,Granges:113,Granger:2,Zbigniew:2,Coldwater:2,Maggetto:2,batted:32,sepulchred:17,"high-handed":1,hereabout:1,Janice:2,restart:39,Laenderbank:2,Saying:8,Rightly:6,"Campbell-Mithun-Esty":2,Lifting:8,Floridabanc:2,"six-month":1,Marion:2,supercede:33,"child-parent":1,improvisatory:1,animized:17,Create:39,"double-crosser":1,Linter:2,Chaos:2,arouse:42,"large-capitalization":3,Hinton:2,Lolly:2,feared:112,Witkin:2,"sleep-deprived":1,Requiem:2,LONGS:2,Indexing:21,Osborne:2,CTAs:4,Accepting:8,"ultra-fast":1,Monopoly:47,rubbin:8,Programming:11,Malinovsky:2,Unprovable:1,fripperies:4,Kolakowski:2,endows:20,Costello:2,Unexpected:1,journeyed:16,Buckman:2,LaBow:2,tightens:20,"share...":102,"Telford-made":1,"conversion-by-renovation":1,McGehee:2,Inventories:4,telegraphing:8,"best-laid":1,Temperature:47,dwindle:39,recycling:308,smother:39,newborn:1,Taber:2,Disney:2,Laicos:2,Gilley:2,dovetail:149,Gardiner:2,"life-of-contract":1,Edmunston:2,Gilles:2,Etablissements:2,secret:3,navigate:39,Bancorp:2,NEEDS:4,Rashid:2,Bally:2,priced:81,Kupcinet:2,Connaught:11,"AMR-Delta":2,"motion-picture":22,neckties:4,HEI:2,Feed:63,Kelseyville:2,thermoelectric:1,classifications:4,Charls:2,careers:4,Fees:57,fun:22,Clapp:2,irised:17,larger:136,Khan:2,"Price-Fleming":2,shapeless:1,Bismarck:11,Clandestine:1,encountered:54,"seven-volume":1,"November\\":1,ICBM:2,"at-bats":4,facetiously:6,Bleaching:8,"low-slung":1,emphasize:42,Follows:2,Jerritts:2,Filmakers:28,sapiens:1,countersued:32,heliports:4,newscasts:4,Adjust:39,Marinas:4,exerts:20,aggregate:3,Flight:11,considerately:6,Cutlass:2,shaded:45,rearm:39,halve:39,Toole:2,spent:85,unannounced:1,howe:293,rears:20,sulking:8,Tools:28,spend:42,Kumble:2,singlehandedly:6,resistive:1,Farnell:2,untrammeled:14,Cabana:2,"soft-headed":1,atomic:1,diaphragmic:1,Include:39,injuries:4,punted:16,GREW:16,Lavity:2,Jungho:2,GREY:2,"Sheraton-Dallas":2,regimented:14,impoverished:7,animosities:4,hates:72,luxury:22,adversaries:4,Loews:2,"Jiffy-Couch-a-Bed":2,rebound:24,jerked:32,Loewy:2,Loewe:2,expecially:6,messengers:4,Brierley:2,Classy:2,"Dali-esque":1,Loewi:2,Laudably:6,darling:22,besiegers:4,coarsened:17,moccasins:4,"Guber-Peter":2,Java:2,Athearn:2,MinisPort:2,inching:8,back:847,baci:4,samplings:4,"De-Kooning":2,sneakers:4,bogus:1,Unificationists:4,segregating:8,invade:42,resolutely:6,Bausch:2,lasted:32,mettlesome:1,Syndication:2,effusive:1,"most-admired":1,racetracks:4,newsprints:4,Motivated:17,Strippers:4,Buckles:2,Alvin:2,Voters:56,Forbidden:2,stockholdings:4,telegraphers:4,"bore\\":33,Photofinishing:2,Shares:56,Sharer:2,"Work-outs":4,Drybred:2,ministrations:4,"Hydra-matic":1,Buckley:2,Mehta:2,jockey:78,conduits:4,bores:18,pared:54,Unification:2,bored:81,Come:848,Tatian:2,"Aqua-Ban":2,Slavery:47,Mudge:2,Psalm:128,Bostitch:2,Risques:2,Norville:2,divans:4,Streets:74,Knudson:2,HAWLEY:2,skittish:1,"Mon-Goddess":2,engineering:21,secretions:4,"free-burning":1,denying:55,hydrous:1,commonest:51,dimmed:54,"Crafton-Preyer":2,Shelters:28,dimmer:248,Solvay:2,"toy-making":1,cartoonists:4,LeBaron:2,Cindy:2,Rupert:2,Comanche:2,Gus:11,voting:122,Gur:2,strolled:32,admiring:8,parrots:4,Roots:28,minors:4,Surprises:4,"satellite-TV":1,golfed:17,overly:6,turnarounds:4,"Corp.:8.30":2,Surprised:17,"company-wide":1,graves:4,graver:136,Business:11,peanut:22,Lucky:40,Kartalia:2,Siemens:2,chaps:4,Exchanges:4,graven:1,"low-boiling":1,ISTAT:2,Hoses:4,WRC:2,"product-inspection":1,Ptachia:2,furloughed:17,Hosea:2,assai:64,reverberate:39,"string-of-pearls":1,severely:6,staffs:18,respectful:1,Azucena:2,midterm:1,anachronistic:1,mottled:14,disbursements:4,choppy:1,optics:4,dimes:4,HANOVER:2,"first-degree":3,quakes:4,HANDICAPPED:17,egocentric:1,Ghadiali:2,nests:4,Anne:59,doctrines:4,unshelled:17,"good-faith":22,giving:55,worshipping:8,"Warner-Lambart":2,"Third-Quarter":3,rescheduling:55,eatings:4,Herford:2,"group-identities":4,Suggested:14,baring:8,Housewares:28,"corporate-image":1,"C.J.B.":2,Hussein:2,remark:25,Grammophon:2,stalks:18,biographies:4,McKibben:2,aromas:4,transpiring:8,rueful:1,birthed:17,"non-disabled":3,named:45,Oases:4,"Specific-Time":2,"Aerospace-Thomson":2,private:34,"factory-like":1,"shoulder-to-shoulder":1,names:18,Covell:2,staple:22,McKeever:2,Stancs:2,highrises:4,Martians:2,seamless:1,Analyzer:2,manufactures:72,oils:4,themselves:53,Lockheed:157,oily:1,assailed:54,Sampson:2,WHICH:447,"pre-Han":2,Relief:11,Espanol:2,arranging:8,"Australian-Chinese":1,harvest:44,extrapolated:17,Lordstown:2,"Calif.-based":1,Managers:56,Nationalist:66,crocked:1,"high-class":1,instantaneously:6,unreal:1,Nicolo:2,praise:24,unread:1,Nicole:2,prohibiting:8,proportions:4,reconstructed:103,Dogtown:2,PINDLING:2,justifications:4,Kerouac:2,Moline:2,maturities:4,daring:261,maitres:64,Clemenceau:2,"says.":20,"high-art":1,Proves:20,Dayan:2,buildings:4,"El-Sadr":2,specifications:4,Videotron:2,bothered:54,nullify:42,Cynwyd:2,frau:64,unmasks:20,Macrodantin:2,Orwell:2,Amca:2,Deployment:2,Maanen:2,"one-acter":1,"vehicle-marketing":1,Huffman:2,ignite:39,resurgent:1,Molly:2,Collor:2,"non-dividend-bearing":1,telephoning:55,Haruo:2,ALLIANCE:2,Buddha:2,Delco:2,industries:4,revived:54,le:849,lb:19,unstained:1,la:850,"closely-packed":1,lo:106,Cove:2,Gripped:17,Cutbush:2,Unfriendly:1,revives:20,extinguishers:4,criminal:3,spreading:8,Guinness:2,Porto:2,PepsiCola:2,Colton:2,questions:18,"budget-strapped":1,muddle:25,Porta:2,Filling:229,LPL:2,Kooten:2,mandate:25,Dynascan:2,Ports:113,strive:42,commmercial:1,Stonestown:2,"turn-out":1,Laurentian:2,"l.":851,handiest:51,Honfed:2,Slickers:28,"Weber-controlled":1,Spaghetti:2,Gorky:2,"clay-like":1,Balloon:11,restructured:45,shriveled:45,standardizing:8,"FDA-defined":1,attend:42,announces:20,Boardwalk:2,wholly:6,insolvent:3,Avondale:2,fondly:6,marvelled:16,Sholom:2,hedged:54,Kangas:2,Greener:12,Minnery:2,salami:91,confirmations:4,Kinsley:2,"Amoco-led":1,Iberian:40,bleed:42,Krzysztof:2,Kaixi:2,deprived:320,"poorer-quality":12,Ochs:2,overweening:1,volens:64,noncorrosive:1,Hanging:8,retain:42,retail:255,deprives:20,Nettleton:2,rudely:6,finest:51,"fancy-free":1,unnaturally:6,Modrow:2,notes:18,Administration:11,Carisbrook:2,Yeats:2,Unionized:17,alleys:4,foreclosures:4,Careers:4,miserably:6,"air-tickets":4,CDBG:2,Wives:41,Lippincott:2,"Street-inspired":1,messing:8,Farmland:2,galvanize:39,Stevenson:2,wildest:51,"Stoic-patristic":1,DeVille:2,highlands:4,"AZT-resistant":1,"Knox-like":1,Vogelstein:2,Universal:40,"co-production":22,Grevile:2,Burton:2,Bayne:2,"T-1000":2,Lovingly:6,teaspoonfuls:4,wakes:20,jinks:4,bisexual:1,tidy:1,allotments:4,comfortable:3,tide:25,comfortably:6,miserable:1,keener:12,Grammys:4,regenerates:20,Activities:74,saponins:4,Thousand:2,billiards:19,provokes:20,"corporate-coverage":1,unsettled:103,provoked:85,underlings:4,reciting:8,Sheridan:2,"less-toxic":1,Without:124,"once-dry":1,Becker:2,LOSES:20,Becket:2,"third-ranked":1,Jensen:2,Unified:2,Estuary:2,enthusiastic:1,Landesbank:2,Shoals:113,"Landrum-Griffin":2,callers:4,Gargantuan:1,Honolulu:2,improprieties:4,supported:81,postdoctoral:1,misclassified:17,Mengitsu:2,Divergent:1,reeling:8,Reviglio:2,ossify:39,loafers:4,VNR:2,WENT:16,Dieux:2,demonstators:4,"MC68030":2,"A.M.A":2,aforementioned:7,Combatting:8,Organizers:4,manhours:4,bedsprings:4,Bringing:116,Verey:2,Zones:4,Thaddeus:2,pertains:20,caches:4,hydrocarbons:4,conform:42,Area:11,Hurray:2,RATE:47,Siad:2,Ares:2,Justices:111,"tax-understatement":1,Siam:2,Hurrah:125,Hawaiian:209,"Commander-in-Chief...":102,literate:1,DeWitt:2,Wenberg:2,discounts:18,overestimates:20,"half-closed":1,Kenner:2,superior:3,junkies:4,"A.L.":2,implementing:8,UNIX:2,"Cities\\/ABC":2,Krakow:2,"non-objects":4,morphologic:1,fulfilled:54,assure:42,insidious:1,busted:103,Delicious:2,longhaired:1,overstaff:39,Tacoma:2,Sverdlovsk:2,Conscience:47,nonsuccessful:1,teasing:261,Refcorp:11,deckhands:4,Holiday:2,freeholders:4,Temple:11,pratfalls:4,pouring:8,Berlioz:2,Rewards:4,muddy:1,unstrung:1,"rocket-like":1,paratroops:4,chauffeurs:4,Acceptance:11,Center:129,"neck-and-neck":1,GERMAN:1,Marlon:2,airplanes:18,"capital-spending":3,Korneyev:2,Marlow:2,Centel:2,splits:18,"SELF-DESTROYED":17,drapers:4,Elderly:1,Ferrell:2,instigated:32,CHIPPING:8,backslapping:8,Farnham:2,permeate:39,Confidence:47,Tannhaeuser:2,audiocassettes:4,Shrum:2,Uniform:1,respected:81,Volstead:66,arabic:1,fusiform:1,"InfoCorp.":2,Astin:2,Eloise:2,"navy-blue":1,Hunter:144,defiant:1,Excelsior:2,brightened:32,McCabe:2,matinals:64,tumbling:55,"Rhythm-Wily":2,reshuffled:16,Bearings:2,"ground-handling":91,Convex:2,"visa-free":1,"man-hours":91,exceeds:20,hearest:33,Biotechnology:11,buttonholes:4,Caspi:2,retard:42,"Halva-Neubauer":2,Palmatier:2,procurement:22,nondemocratic:1,creators:4,Porres:2,fetal:1,tripods:4,"CW-capable":1,Hyundai:113,coasted:32,underlying:199,Averell:2,Makinac:2,Gamble:2,Brigade:2,Inquisition:11,republican:1,Montle:2,dilutive:1,Friday:2,nastier:12,Groggins:2,underscored:32,franking:21,"evidence...":102,Dearborn:2,"out-of-the-way":1,incarnations:4,petrochemical:22,"barbed-wire":3,judiciary:22,"HUD-subsidized":1,impugned:17,INTERNATIONAL:2,Fallen:40,Searby:2,Mauch:2,"two-seat":1,Nagrin:2,downplaying:8,Scale:2,Scala:2,interludes:4,holies:4,Pirandello:2,Scali:2,paternalistic:1,corroborate:42,infiltrated:54,Copley:2,Sheehan:2,supportive:1,frenetic:1,attactive:1,Lompoc:2,Maurine:2,Avions:2,wittingly:6,Xylogics:2,discorporate:82,Hearings:4,enviably:6,slight:794,puppeteers:4,hospitable:1,periodically:6,simples:4,simpler:136,Tilted:2,Weight:47,schmoozing:21,follies:4,thuds:4,Cheer:59,Gale:2,flaky:1,unidirectional:1,Gala:2,reincarcerated:17,"conducted...":102,"now-Rep":1,"pro-business":1,Pirrie:2,submits:20,demonstrable:1,demonstrably:6,"Free-trade":1,oughta:852,Foamed:2,Freshwater:2,Atra:2,Steinman:2,Evolving:8,Cellars:2,legends:4,Bailit:2,flustered:17,Uphoff:2,Chile:2,Child:11,Chili:11,Gutzon:2,GAMBLE:2,Chill:47,"two-by-fours":4,Ukranians:28,crutches:4,solicitors:4,"auction-fee":1,backstop:25,partially:6,wise:1,Wall:401,wish:256,variations:4,Walk:95,Walt:2,"Asher\\/Gould":2,whenever:293,Insurance:11,Desiring:8,penetrating:13,rabbits:4,brochures:4,Pulova:2,enlists:20,Instrument:2,unpicturesque:1,"finite-dimensional":1,Carruthers:2,mysteriously:6,Colombian:66,redder:136,Whipsawed:1,Turning:229,Storehouse:2,postmen:4,sleepwalking:55,"Leigh-Pemberton":2,traumatic:1,detractors:4,Farmaco:2,bundle:25,shrank:16,thumping:55,inboard:97,seismic:1,mediocrities:4,"Senate-House":40,hiked:32,Begelman:2,dispersants:4,Greekfest:2,Hoenemeyer:2,hikes:4,wryly:6,Myerson:2,baked:103,Seattlite:2,sufficed:16,"Louis-based":1,hats:4,Christophers:28,Continental:40,Dining:321,interprovincial:1,slogs:20,"thrice-monthly":1,hate:256,Isetan:2,thinnest:51,Tallchief:2,warred:16,Truffaut:2,Ledoux:2,efficaciously:6,iliac:1,honorable:3,Esmarch:2,missionary:3,Restaurants:46,Tunica:2,Templeton:2,vitriolic:1,Conway:2,Smerdyakov:2,Guarini:2,Bigger:12,pagodas:4,Director:11,AMCA:2,enjoy:42,"high-technological":1,strivings:4,Rapport:2,guardedly:6,scribbled:32,"resin-saturated":1,RESIGNATIONS:4,"flat-topped":1,ransack:39,shining:30,behooves:20,filibusters:4,Train:11,beaten:14,abides:20,Castleman:2,"inter-American":1,chambre:64,Chaplain:2,"A.L/NNP.S/NNP.A.C.":2,Made:853,"limited-partner":1,Sutpen:2,Filene:2,corralled:17,"beauty-care":1,Willett:2,morosely:6,SHEARSON:2,masseurs:4,Beatrice:11,"Remic-related":1,Furnishes:20,WON:33,mantic:1,Koh:2,Kok:2,ridiculed:17,resurrected:54,Kon:2,Koa:2,"M-1":11,Nicodemus:2,Technodyne:2,feelings:4,sorrows:4,viscera:4,Hakim:2,wars:4,"cholesterol-rich":1,Kos:2,"water-submersion":1,"quasi-tax":1,Circular:40,"spread-eagled":17,yellows:4,"B.S.":2,"Australia-wide":1,Thermedics:113,lessening:21,Instruments:41,sobered:54,raids:18,bragged:16,horseshoers:4,boomed:32,Ibias:2,Blume:2,Incidents:4,Gaspee:2,breaths:4,"real-time":1,robbing:8,Hacking:8,outdated:7,Salomon:11,Crazy:2,join:42,"pre-cooked":1,"self-regulating":1,clubby:1,entertained:54,joie:64,warn:42,McManus:2,OIF:2,shook:662,loosen:39,Paschal:2,generically:6,Musial:2,Lori:2,Lord:854,Lora:2,looser:12,collude:39,Sidhpur:2,traditionalists:4,Karlsruhe:2,"High-Tech":1,"Preparation-Inquirers":2,Paying:8,Grist:2,Caucasians:4,mess:24,Chesapeake:2,Disregarding:8,Chapman:11,demanding:30,mesh:24,Mamma:2,Unreported:1,biting:30,sparkles:20,mortgages:18,Sewage:2,risible:1,Etudes:2,gentlemanly:1,Avena:2,Varalli:2,spout:78,"criss-crossed":7,mucking:8,Greetings:113,"record-tying":1,"Yorkshire-based":1,unglued:1,flippers:4,monde:64,Shifte:2,Weiss:2,Kodyke:2,Hichens:2,comandancia:64,Urban:2,"conflict-ridden":1,Hero:11,Willkie:2,alveoli:4,Herb:2,Kelsey:2,exhibits:18,comprehend:39,"smaller-than-expected":1,Emerald:2,Hers:482,Hillerich:2,Continued:14,BIRDS:4,Branches:4,"Anti-Wrinkle":2,revelations:4,"new-issues":176,Haughton:2,persuaders:4,notified:54,vacillated:16,imperiously:6,Pankki:2,"dollar-denominated":1,"demand-supply":1,unlinked:1,"hawk-hunting":1,notifies:20,lacerations:4,geldings:4,"W&D":2,Lippman:11,winsome:1,combining:8,damped:386,Drafted:17,Pillsbury:2,overcame:16,Holz:2,Holy:40,fevers:4,stringed:1,Holt:11,washed:45,Agua:2,Institute:11,Ryusenji:2,unspectacular:1,Ginnie:2,Hole:11,Hold:42,underwrite:42,Holderbank:2,merchandising:21,slivered:17,"addiction-treatment":3,streamline:39,biological:3,Idje:2,Aragon:2,alarmingly:6,jubilant:1,Esselte:2,"soft-rock":1,Carre:2,blackmailing:8,TIME:47,Carry:2,Murderers:4,Darnell:2,Gennaro:2,trilled:16,Marcoses:28,Kehl:2,anchorages:4,priority:22,Bruges:2,Academy:2,Lindskog:2,Racie:2,"teacher-cadet":1,Racin:2,Afghan:10,Rebecca:2,"beat-up":1,Splendid:1,brushes:4,Ethocyn:2,Actually:6,Indulgers:4,ClothesTime:2,"Diego-based":66,"Ash-Can":2,Drye:2,Koji:2,Unix:2,LaWare:2,genders:4,Unit:47,lbs:4,Mitsuoka:2,staphylococcal:1,"New-Waver":2,Offutt:2,Estimating:8,McEachern:2,regulate:42,leafy:1,NBC:2,spade:779,unceasing:1,Pressler:2,"-":102,oriented:45,Yeager:2,retinoblastoma:80,"once-rich":1,cleft:855,Carbide:11,Omega:2,harped:16,"Davidowitz.":2,Rizzello:2,"one-thirty":6,cilia:4,mannerisms:4,Dairy:11,interjects:20,coin:25,unorthodox:1,"lb.":19,soupy:1,treats:72,bullied:32,soups:4,Rubenstein:2,flow:24,Goodison:2,orderly:34,reemerged:16,flog:39,untapped:1,Howley:2,"cortico-fugal":3,Koenig:2,Addiss:2,Neff:2,inspire:42,Scanlon:2,random:3,Ndola:2,"Joseph-Daniel":2,tacitly:6,substituting:8,Espana:2,Extremadura:2,Gollust:2,Simultaneously:6,Palcy:2,peasants:4,"soft-hearted":1,"anti-intellectualism":3,"Michelin\\":2,gods:4,Tribou:2,Netherlands:74,sunglasses:19,unassisted:1,Larger:12,Shades:2,goons:4,shutting:8,Shizue:2,interrogated:17,Quarter:47,Downham:2,spinoffs:4,"oil-based":1,Hildegard:2,Sancken:2,authorizations:4,twice:218,shots:4,"death-benefit":1,cufflinks:4,adapters:4,farther:381,duck:25,Caribbean:40,Pet:2,Pew:2,Per:127,resist:42,Pen:11,Pei:2,alkalis:4,Taurog:2,Pee:2,"Optic-Electronic":2,"rain-slick":1,Macedon:2,"double-glaze":39,McDermott:2,"Philippines-backed":1,Nagelvoort:2,slotted:17,"round-tipped":1,McVay:2,Shearman:2,deceptively:6,bashes:4,"one-parent":1,handwritten:1,BAHAMIAN:1,"million-ton":1,"husky-voiced":1,"fired...":102,"Buick-Oldsmobile-Cadillac":2,phoning:8,"Icelandic-speaking":1,aristocrats:4,nonfat:1,Revenues:123,"rabbit-test":1,blasted:32,indistinct:1,Whig:47,biologically:6,"inter-governmental":1,Arens:2,precipitous:1,"two-billion-Australian-dollar":1,participating:30,merging:55,"debt-to-equity":3,Whiz:2,rhetoricians:4,Whit:2,compilations:4,Makers:41,Whip:2,"Gro-Lites":28,Celgar:2,"J/NNP.A.C.":2,elfin:1,kwh:4,Bozicevich:2,epidemic:22,"student-physicists":4,herbaceous:1,intimal:1,viruses:4,maudlin:1,Putt:2,Katims:2,coalesced:17,beef:44,"open-mouthed":1,bikinis:4,Ebbutt:2,ropes:4,"tilt-top":1,Southern:129,been:856,Bertie:2,bees:4,miraculously:6,Bertin:2,roped:16,"dia.":22,Canestrani:2,Herold:2,davits:4,"anthropological-religious":1,Dingell:2,Carrion:2,"sweet-throated":1,Cain:2,Countach:2,Elie:2,berms:4,Wiesenthal:2,Educators:113,fallow:1,unchristian:1,Upped:17,PUBLIC:1,decanted:17,"Beghin-Say":2,"push-button":1,coupes:4,Wolder:2,Driskill:2,Eckart:2,Bush:2,"half-transparent":1,"bull-headed":1,ramifications:4,unservile:1,Quirinal:2,Jacqueline:2,"dull-gray":1,Camaret:2,Zimmerman:2,Eligio:2,inventors:4,unbearable:1,"non-biodegradable":1,riffs:4,"rose-pink":1,Morning:857,BCED:2,Kearton:2,"junior-philosophical":1,embarrassments:4,forceful:1,recalculations:4,werewolves:4,greatest:51,"business-to-business":3,shadowed:14,Sarah:2,PARKER:2,Saran:2,Gouge:39,Arabian:40,Pawleys:2,Constitution:11,"higher-margin":335,"U.S.-Japan":66,transgressed:16,Krakatoa:2,Astoria:2,Deriving:8,Figgie:2,retreat:25,technological:1,Crossair:2,anticoagulants:4,"lower-level":3,turquoise:3,"Notre-Dame":2,Pincus:2,Asimov:2,Teagarden:2,James:2,Taking:229,Diabetic:2,"non-financial":1,Owls:4,Hollander:2,Titles:28,racketeers:4,Vadies:2,sanitary:1,amok:6,Contrarily:6,mystically:6,specific:3,"sticky-fingered":1,Hackett:2,amor:64,Pasternack:2,"biomedical-products":4,Species:74,rustling:21,clubs:4,clawed:17,escape:182,Shays:2,"post-nuptial":1,Motherwell:2,"research-and-development":22,"Island-based":1,Insiders:4,Metronic:2,core:22,Subdued:1,Divorced:2,McCaffrey:2,Glasswork:2,Yacht:2,Lucius:2,Bambi:2,watchings:4,"cancer-related":1,Emperor:11,Vitro:2,surround:149,misleading:13,logistical:1,Machines:41,discharging:8,Pupils:4,"low-cost":3,JAMES:2,Bartlett:2,accommodate:42,Noschese:2,"Twentieth-Century":2,Martha:11,emigrate:42,tranquilizers:4,Marthe:2,rely:42,Selling:210,unaware:97,Cloth:2,scamper:33,nonthreatening:8,drowsed:17,Competing:8,Burghley:2,Olsson:2,Ambrose:2,"high-vitamin":1,Tune:2,"IranU.S":2,realer:12,Neuharth:2,"High-tech":3,Amusements:111,Interpretation:11,ROGERS:2,"slo-mo":1,Meaden:2,rankled:17,Domestic:66,Cotten:2,Bonnet:2,Cotter:2,Shippers:123,Bonner:2,bide:39,"Pro-forma":1,brightly:6,"F.L.":2,atypical:1,"second-most-conservative":1,"prisoners.":4,Carson:2,"voluntary-control":1,Lumpe:2,Begin:39,boobify:39,outstretched:17,no:858,na:859,commercials:4,nd:119,ne:64,Scarlatti:2,Patagonia:2,criminalized:1,"market-allocation":1,"quite-literal":1,Costa:860,reconsider:42,"insure...":102,impounded:17,trailers:4,Odakyu:2,Costs:4,corporations:4,dappled:1,parities:4,Geza:2,BANKAMERICA:2,"to-day":168,swarming:8,Zellers:2,plastically:6,"anxiety-free":1,Clothestime:2,"Franco-Irishman":2,Title:47,varying:30,unregulated:1,ACCOUNTS:57,PrudentialBache:2,reaccelerating:8,cathodes:4,Columbia:2,"geo-political":1,scrawny:1,reassemble:39,flanged:17,"Infocorp.":2,Anything:47,Centralia:2,Itoh:2,decreeing:8,sloppy:1,sowered:16,Viceroy:2,carting:8,Reels:28,"slow-baked":1,sighed:16,REVIEW:2,Vilaplana:2,inauspicious:1,intangibles:4,Rex:2,Rey:2,Schone:2,Tomkin:2,Rep:2,Rev:2,Ret:2,Culbertson:2,"bid-asked":1,Northwest:180,"Hard-Line":1,supertankers:4,Reg:2,Red:861,Lupton:2,Newsom:2,rerouting:8,Bruck:2,Bruce:2,Oedipus:2,noncontroversial:1,agrees:20,Hartwell:2,hairy:1,replays:4,Hopkins:2,"higher-than-expected":1,Laptev:2,accountable:1,twentieth:1,Amorim:2,Coldwell:2,houseboats:4,Sees:109,decadelong:1,united:834,ENTERPRISES:2,sharpening:55,descended:32,editorialists:4,Seen:17,weird:3,Caruso:2,Seek:31,Crutcher:2,washes:18,shelled:112,sevenfold:6,threes:4,Etzioni:2,smallish:1,concoct:39,Hostage:2,Differences:4,"Florican-My":2,Automation:2,wrongs:4,Foggs:2,"two-timing":1,Foggy:2,Slackened:17,Elizabethans:4,Tims:2,signboards:4,neared:32,demonized:17,Calling:8,Calabasas:2,Time:11,prefectural:1,Weidman:2,Pascutto:2,inhabit:33,Fredonia:2,Scania:2,German:10,humly:6,Teatro:2,Gorillas:113,fauna:91,Areas:4,coral:1,Polyanka:2,performer:22,"now-repentant":1,Skubal:2,McCarthyite:1,Uniqueness:2,theistic:1,slugging:8,performed:54,viewless:1,"government-operated":1,Moluccas:2,Scambio:2,harmed:54,infringements:4,Hormel:2,flavored:7,unutterably:6,epigrammatic:1,Prospects:4,Natalie:2,Natalia:2,unawares:6,Chinchon:2,peacemakers:4,"over-produce":39,"WD-40":2,Fortress:2,Machida:2,Fantastico:2,Guaranty:2,lemmas:4,overreached:16,infidels:4,Wyly:2,Batten:2,Unusual:66,"pressed-paper":1,"vinyl-products":4,"Journal\\":2,"stock-index":649,Ghana:11,abusers:4,cheerleaders:4,"company-arranged":1,varicolored:1,Burgher:2,Jianying:2,Journals:28,TPA:2,Riefenstahl:2,"Yamatake-Honeywell":2,Parisien:2,Maher:2,countrywide:1,TPS:2,Broughton:2,producing:5,"car-parts":1,Stephens:2,"Cal-Neva":2,Watches:4,possibilities:4,"Scotia-McLeod":2,nodding:30,Concordes:2,"association...":102,dabs:20,Worry:25,"a-Totals":568,Move:556,unproductive:1,Easily:6,"convention-goers":4,markups:4,approximates:20,gaps:4,begun:17,Leppard:2,approximated:81,"save-the-earth":1,adequately:6,splashy:1,Spielberg:2,costliest:51,Feyer:2,infuriated:32,profit:24,privatizations:4,Fike:2,dehydrated:7,attracted:54,delight:44,booby:3,commonwealths:4,"high-gain":1,technocrats:4,subzero:1,marries:20,impose:42,"high-tax":1,"deep-set":1,"Moscow-based":1,deliberated:16,"five-foot-wide":1,"deep-sea":1,unborn:3,Sinopoli:2,simplifies:20,buzzes:18,"pencil-and-sepia":1,incongruous:1,Sochi:2,Crozier:2,simplified:7,alike:218,Onstage:6,SEi:2,SET:16,Electrolux:2,SEE:33,SEC:2,Such:862,SEM:2,anesthetized:7,SEI:2,unfaltering:8,wax:25,"anti-ulcer":1,"Rent-A-Car":2,taketh:39,intrinsically:6,Clothes:57,Carney:2,Pantera:2,Sousa:2,require:42,Drunk:66,Drovers:4,CONCORDE:2,"blood-clotting":1,Roederer:2,"all-inclusive":1,"Atlanta-based":66,"J.NTT":2,thyrotrophic:1,and:863,mated:17,Clint:2,blitzing:8,pro:864,ani:1,"slick-headed":1,Aylesbury:2,Cline:2,commissioning:21,pry:39,Gildas:2,foundered:16,calisthenics:4,"Uh-huh":106,Lipstein:2,Famous:40,Goldang:106,Precinct:2,Kang:2,Fudomae:2,invasions:4,Customized:1,clatter:25,Hardis:2,Zachrisson:2,"computer-servicing":3,yelped:16,unwisely:6,peptides:4,seafarers:4,Cafeteria:2,perpetrated:54,"non-building":1,Renewal:2,applauding:8,Sakura:2,Cavallinis:4,"fish-processing":1,Raffaello:2,BUSY:1,toxicologists:4,piranha:19,overage:1,BUSH:2,explicitly:6,"close-mouthed":1,centrally:6,Shoichiro:2,outguess:39,begging:55,crude:22,microchannel:1,"high-quality":3,"Theo-Dur":2,Adalbert:2,Buchenwald:2,regarding:8,floods:4,preliminarily:6,Bailly:305,CELTICS:28,Cognex:11,"adventure-based":1,reveals:20,pummeled:32,Colonel:11,labors:18,innards:91,Mosher:2,sorest:51,Geva:2,catapulting:8,underpaid:103,"B.A.T":11,insuring:8,Jesuit:2,detect:42,gastronomes:4,Gagliardini:2,flop:24,belittled:1,"materials-handling":1,invokes:20,Texas:40,BLOCKBUSTER:2,Gilsbar:2,caucus:25,Lilian:2,"good-looking":1,painters:4,"Webster\\/Eagle":2,grieved:17,TODAY:2,Messa:280,"bite-sized":1,Sterile:2,Parkshore:2,Filmworks:2,stupidest:51,"non-crisis":1,Macwhyte:2,Rosencrants:2,Saracens:28,Investment:11,deported:54,Nott:2,checkbooks:4,"frequency-independent":1,"loose-leaf":1,Note:63,Wisman:2,Dupps:2,blasphemers:4,Lundeen:2,Crumlish:2,mezzo:22,Buy:865,Carlzon:2,Bus:47,computing:55,But:866,Slated:17,votive:1,"four-story":1,Slater:2,archrival:3,Bud:2,"non-alcohol":1,Grappely:2,robbed:54,"black-on-black":1,Farra:2,"Communist-designed":1,Anacomp:2,Cursing:8,Divide:39,Indentical:1,Cents:113,embodying:8,Bradsher:2,Crusade:11,Interleaf:2,"still-punishing":1,prescriptive:1,Slow:82,crusades:4,"clerk-turned":1,yachtsmen:4,hurting:8,"CRAF-Cassini":2,crusaded:17,converts:18,whimpering:8,Hidden:14,pruning:55,Bonnell:2,perhaps:6,Protesters:4,farmhands:4,Excuse:39,Heinhold:2,"takeover-related":1,agitated:32,events:4,TRIMMING:8,applaud:149,Signal:2,retrograde:1,"W.M.":2,devoid:1,prospered:54,smatterings:4,arose:16,changing:5,"high-paying":1,Langner:2,implements:18,gibes:4,modes:4,Bedminster:2,purposeful:1,Sonates:28,melodramatic:1,Bucking:8,model:204,United:98,softwood:1,Nawbo:2,Unitel:2,stiffnecked:1,clot:25,entrusting:8,laminating:8,perilous:1,Lombard:2,Bam:106,Jobs:130,MacPherson:2,Zurek:2,poises:4,"textile-trade":1,prettily:6,engulfed:54,poised:45,CONFRONTATIONS:4,Amendment:11,Rosenblatt:2,Virginian:2,Lili:2,Terrible:2,"mini-cars":4,predetermined:17,Runkel:2,Alito:2,glitches:4,Hingorani:2,Nikolai:2,standstill:3,Kellwood:2,"ill-timed":1,Subjects:4,Grimaldi:2,Gunmen:4,upside:277,Lister:2,Symms:2,"Million-dollar":1,Tizard:2,Tatsuhara:2,pacific:1,unhocked:17,Afrikaaner:2,Listed:14,bylaws:4,Pechman:2,Safeguards:4,Listen:216,Sully:2,Danish:66,colloidal:1,Invite:59,prolific:1,"non-energy":1,shirtless:1,Appian:2,legal:1,Blowers:4,"above-water":1,provides:20,"chapel-like":1,"extra-musical":1,terrifies:20,Zama:2,"white-collar":1,Hakuhodo:2,"multi-column":1,weirdest:51,"ethanol-powered":1,LaGow:2,"fit-looking":1,rearranging:8,Korda:2,zealous:1,"good-til-canceled":1,waded:32,Costley:2,"Small-lot":1,wasteful:1,"top-tier":1,speculates:20,Lovington:2,Inject:39,Saxon:40,speculated:32,sloshing:8,refinements:4,"Red-prone":1,Luxor:2,Assam:2,Bachelor:2,Mifepristone:2,"outward-looking":1,Letter:11,"Conservative-Communist":1,unpolished:1,"Princeton\\":40,UEP:2,Assab:2,Comfort:11,illuminated:81,Cowboy:47,"A.A.U.":2,illuminates:20,swathed:17,Heidenstam:2,Assign:39,"L.P.V":2,Boal:2,mortals:4,Okuma:2,turbines:4,Boaz:2,preside:39,WEST:2,"zinc-consuming":1,Boat:11,remedies:4,Vasotec:2,tubercular:1,Pharmacia:2,headwaters:4,clamshells:4,"pudding-faced":1,Finnsburg:2,amours:64,stumbled:32,Criminal:40,miscarriages:4,idiot:3,"post-split":1,McQueen:2,Armentieres:2,regents:4,kerchiefed:1,stumbles:72,Cleaver:2,Viroqua:2,"tax-aided":1,Tougas:2,includes:20,Tyrannosaurus:2,Miro:2,bounded:45,included:112,includee:33,applicators:4,Bagneaux:2,Rosman:2,"based.":17,bilateral:1,invest:42,uglier:12,"wayward-looking":1,curvy:1,Tancred:2,ensuring:8,Lauritz:2,Rowell:2,Juneau:2,Analog:2,confers:20,Lumina:2,Wigglesworth:2,Noon:2,remedied:17,scattered:45,seals:18,Parents:56,Mareham:2,Minot:2,voids:20,Minor:2,Eluard:2,Nederland:2,"H&Q":2,"Lind-Waldock":2,subjected:17,"H&R":2,safeties:4,"burger-heavy":1,Construction:47,Soren:2,belonging:55,Nogales:2,Airedales:28,bubbled:54,Pomicino:2,Dillingham:2,Southon:2,worst:867,hatching:21,jacketed:7,bubbles:18,wilting:8,learners:4,Joshua:2,Enthusiasts:4,Momentarily:6,Melamed:2,Fixit:2,Germain:2,Nonperforming:13,undone:14,MasterCard:2,Rackmil:2,"exit-load":1,Filmed:17,grateful:1,"built-in":3,tee:78,Rashomon:2,Oversized:1,Seminario:2,"Well-stretched":1,"I.C.H":2,offsets:72,ovarian:1,Mick:2,Camarillo:2,Mich:2,Mice:4,Helion:2,Folgers:2,midrange:3,Australians:57,communicable:1,eventuate:33,underwiters:4,foreshortened:17,absurdist:3,EC:2,"law-unto-itself":1,directions:4,bulls:4,increments:4,diming:55,"barrier-free":1,deities:4,"gray-blue":1,"Cranston-Mitchell":2,Congolese:40,options:4,Style:11,Avrett:2,Videoway:2,tablecloths:4,snug:1,snub:39,Nigeria:2,"Open-end":1,USACafes:74,Chiggers:4,Montedison:11,watchmen:4,Baseball:47,"MUST-SIGN":1,"market-jarring":1,Melling:2,Sicilians:4,Manville:2,El:2,thus:6,Mines:41,pectorals:4,Fleet:11,Steeves:2,Ek:2,"ability...":102,Westerns:4,Mideast:129,smoggiest:51,Darlin:2,precociously:6,refractive:1,protestors:4,vaguer:12,Tomorrow:669,enfant:64,epics:4,Uranium:11,Microwave:2,coerce:39,UDAG:2,hourlong:1,thud:25,Higgins:2,breaking:5,"satellite-launching":3,Docherty:2,extinguished:17,"floor-length":1,SOVIET:66,"hundred-and-fifty":1,tonnages:4,Broberg:2,pertained:33,Scandia:2,preoccupy:33,panoramic:1,absentmindedly:6,numb:1,CACI:2,Ake:2,"non-literary":1,INSURERS:4,Tegner:2,cooperatives:4,Lieberthal:2,Marvelous:1,barbs:4,"bridge-lending":1,Eccles:2,"dollar-yen":1,proverbial:1,"thought-out":1,interpersonal:1,Alternating:8,flounce:33,unleashing:55,Stein:2,susceptible:3,Dental:2,"co-ordinate":39,acoustical:1,Heyman:2,might:852,alter:392,Veslefrikk:2,"easy-going":1,Badlands:4,"intensive-care":3,"barrel-chested":1,FOILED:16,Metallgesellschaft:11,"three-year-old":3,Westheimer:2,unreasoning:1,Cohodes:2,nephews:4,Gauntlett:2,Phoenicians:4,ODDITIES:4,athletics:4,hammering:55,Tiphook:2,"then-City":1,formulate:39,recapitulate:39,Sporto:2,Pile:2,"age-bias":1,"sliver-like":1,braided:7,Funston:2,discrete:1,Tigers:74,Practice:11,Tigert:2,imploring:8,eyeteeth:4,solvent:3,ersatz:1,blaring:8,mountainously:6,alleviating:8,Littlefield:2,"Webster\\":2,generate:42,Kirgizia:2,thrown:17,"down-home":1,scratchy:1,Dietary:1,NEWSPAPERS:57,throws:20,Paulah:2,Embarcaderothe:2,flood:44,linking:55,Longtime:3,blank:590,bland:1,Playhouses:2,Mondschein:2,Cavaliers:4,swart:1,HOTEL:2,AIMO:2,Cavaliere:2,Yaohan:2,"on-site":1,Packages:4,"three-story":1,attendants:4,"highly-touted":1,Heisbourg:2,Whiteboard:2,imprinted:17,Malin:2,Malik:2,Malia:2,uncut:1,rigidities:4,dispensed:54,impersonally:6,Talbot:2,skylarking:8,dispenses:20,uniforms:4,"non-priority":1,strengthen:42,Newkirk:2,Jovi:2,Ebury:2,Nagasaki:2,rugs:4,heightening:55,Hilboldt:2,"freight-hauling":1,febrile:1,middlemen:4,Ordnance:2,added:85,beribboned:1,Nachmany:2,Assyrian:2,"odd-sounding":1,Kuvin:2,enduring:30,"well-chronicled":1,Zeiger:2,value:24,mineral:22,visrhanik:64,Bourassa:2,devalue:39,retardants:4,"pay-and-benefit":1,Chevrolets:28,Interpublic:2,Reynolds:2,institutions:402,stones:4,"white-topped":1,Dartmouth:2,Keating:2,awakens:20,"post-game":1,deserts:18,securing:8,heavily:6,Waymire:2,abiding:1,Galindez:2,transcendental:1,"Chong-sik":2,"D.S.":2,clarifying:8,"Brig.":2,"tariff-free":1,Stiff:1,Value:11,Alone:150,Miullo:2,Incorporated:157,industrywide:97,beards:4,Carausius:2,"environmentalist-developer":1,Olympia:2,Olympic:209,Bern:2,"Phillippe-Francois":2,Riccardo:2,macropathological:1,"western-style":1,marinas:4,Digges:2,treeless:1,"Also...":102,sustainable:1,"blood-filled":1,Networks:46,"seven-day":1,"life-long":1,Aromatiques:2,Plays:868,injecting:8,reverberations:4,Playa:2,"fine-drawn":1,Rooseveltian:1,jettisoning:8,crunching:8,druggists:4,Faustus:2,Zorro:2,Magurno:2,"fat-soluble":1,Mitsotakis:2,recently:6,"more-established":12,"one-penny":1,Hammack:2,rarer:12,stereos:4,Horry:2,lyrical:1,bronze:22,AND:596,ANF:2,ANB:2,ANC:2,ANN:2,breakin:8,Harco:2,ritualized:17,Farms:74,Volpe:2,ANP:2,"company-managed":1,ANZ:2,flies:72,Fabricius:2,ranchers:4,reasons:18,Quintana:2,Willis:2,flied:16,McHenry:2,pH:11,Willie:2,roaring:5,Stomach:11,"blue-uniformed":1,dug:32,Computerized:1,ecologists:4,Pincian:2,Massenet:2,"convertible-bond":1,togs:4,maneuverings:4,Operationally:6,condoms:4,apocalyptics:4,coerced:45,Gastronomie:2,bachelors:4,writeoffs:4,intercepts:4,Bigfoot:2,"anti-Moscow":1,drunkenly:6,Rafi:2,enriching:8,"trumped-up":1,Sinatra:2,Bacharach:2,"cross-subsidies":4,SHUN:33,Raft:47,INS:2,"Co.":77,chauffeur:25,aged:869,coerces:20,"Intra-European":1,"arch-rival":3,intrinsic:1,reasserts:20,"Allied-Signal":2,Cop:2,Cow:11,Cox:2,unspoken:1,usually:6,Coe:2,Sokol:2,Com:2,Con:129,earmark:39,Jelenic:2,"Lintas:New":2,dancing:21,Brittany:2,INA:2,Wartburgs:28,Reinforcements:4,Examples:4,riffle:39,steeled:17,abilities:4,Helmuth:2,altruistic:1,Shtern:2,Permanent:1,Bernhard:2,ORDER:2,Mynheer:2,gems:4,loading:21,Front:129,build:870,Alto:2,deadened:17,"supply-side":3,Alta:2,lovin:1,toothpastes:4,anthems:4,Pakistan:2,Wharf:2,Weitzel:2,Colony:11,ASK:2,safest:51,jelled:16,Mondays:41,"Macmillan\\/McGraw-Hill":2,Within:127,Galleria:2,understood:54,Avowed:1,Deaver:2,EDI:2,"tumor-suppressing":1,unreimbursed:17,gradually:6,"Vermont-Slauson":2,roundly:6,tends:20,"university-trained":1,fragments:18,Staring:8,Bogacheva:2,bookshelves:4,Epp:2,tinker:39,Eph:2,Proponents:123,unhusked:17,Rumasa:2,NYSE:2,Beddall:2,Prospective:1,mingled:112,"Senate-passed":1,stricken:14,mingles:20,Keough:2,minibars:4,doltish:1,Simon:2,Feversham:2,Midland:2,exhaustively:6,"charge-card":1,OPEC:2,"he-goes-or-I-go":1,OPEN:1,Sub:2,Murilo:2,conceivably:6,Nobuyuki:2,Farren:2,"Haagen-Dazs":2,"bottled-water":3,"inter-plant":1,fast:871,"ward-personnel":4,vendors:4,Brownings:2,conceivable:1,Barfield:2,melodic:1,Bryan:2,"nnuolapertar-it-vuh-karti-birifw":64,Corolla:2,Malaysian:1,applicable:1,forbidding:30,"Twenty-second":40,Contribution:2,Suh:2,groupings:4,gravitating:8,fries:4,interventionist:1,Brumley:2,fried:7,Equitec:11,Psychologists:4,Filmdom:2,"freight-rate":1,Donohue:2,Lecture:2,Establishment:11,"stand-ins":4,scrutinized:54,overseeing:8,scrutinizes:20,Airless:1,"non-deductible":1,Mises:2,Miser:2,vaulting:261,"Green-labeled":1,Freebies:4,Windle:2,Pitt:2,"time-shares":4,"frozen-foods":4,"low-grossing":1,suffers:20,Hooks:2,"OPA-LOCKA":2,Amram:2,sufferd:17,Peeking:8,"war-ridden":1,BROADCASTING:2,severable:1,Adcock:2,issued:45,Darby:2,besetting:8,Hitting:55,Pita:2,"PC-magazine":1,"Chavanne-Ketin":2,tumours:4,"top-to-bottom":1,issues:18,Marvin:2,peering:8,dissidents:4,Catalog:11,Noxell:2,Joint:2,Marvis:2,concomitantly:6,CASES:4,waiters:4,Crisp:2,graphic:1,gins:4,"product-related":1,Gorney:2,Enjoy:39,Dubnow:2,Emerging:872,Loveless:2,Competition:47,"Anti-abortion":1,Cofide:2,"Y-regions":4,Barsacs:28,FFA:2,Hill:2,Weisner:2,folds:18,"R.C.":2,flaunts:20,WYSE:2,protrude:39,Mme:2,growers:4,"Bermuda-registered":1,Zion:2,Tucked:17,"RCA\\/Ariola":2,RICHMOND:2,"Cornell-Dubilier":2,Licenses:2,"Soviet-supplied":1,refilled:17,counterarguments:4,Knopf:2,MORGAN:2,desires:18,Cuddles:2,Missoula:2,desired:45,"H.H.":2,bugeyed:1,sexy:1,ghilianii:64,"Ind.-based":1,Confederation:2,Lorna:2,Yasutomi:2,Lorne:2,CBI:2,CBO:2,CBS:2,Shrubs:4,"olive-flushed":1,locutions:4,celebrants:4,"High-level":1,continuities:4,chaste:1,disposals:4,"more-entrenched":1,leguminous:1,"upper-middle-class":1,lodging:21,boasts:20,fed:508,Indianapolis:113,Females:28,Hua:2,Hub:2,"&":873,storekeepers:4,Hun:2,Rotelli:2,Hut:2,few:337,depicted:54,fer:127,swaggered:32,bitterly:6,Hux:2,Huy:2,commiserating:8,sort:584,journalists:4,sore:3,lidless:1,Keerist:106,"hand-knit":1,nixed:16,augment:42,foppish:1,terroristic:1,misfits:4,Hartselle:2,Rifenburgh:2,Replogle:2,"lower-class":1,Hattiesburg:2,impedes:20,distractions:4,proprietary:3,Kathleen:2,"Non-Proliferation":2,dripping:8,Pinned:17,pragmatists:4,Matchbox:2,Details:123,IRAN:2,scrounging:8,Hackman:2,galls:4,Williamson:2,"Lexington-based":1,memorize:42,SKILLED:1,carries:72,"age-specific":1,"Grande-Bretagne":280,dismissing:8,Americans:474,grudgingly:6,"ever-present":1,Mohammad:2,LaBonte:2,puppets:4,Virology:2,unforgivable:1,barricades:4,grovelike:1,desecrates:20,PAUL:2,gluts:4,Letters:56,fuming:8,sillier:12,heroics:4,SIGNAL:25,swearinge:8,"Sun-3\\/50":2,Selassie:2,gardenias:4,"nit-picky":1,dirtiest:51,looks:132,flapped:16,indignantly:6,"Braddock-against-the-Indians":2,boosts:18,"intra-company":1,linguistics:4,Longshoremen:57,"double-deck":82,Kershbaum:2,ships:18,Callable:1,primordial:1,AmBrit:2,"kick-starting":8,"indispensable...":102,Hugoton:2,orthodox:3,Cooperatives:2,indexing:191,"movie-quality":1,Aztec:1,Berlack:2,negligent:1,tiptoeing:8,emerald:3,nurturing:8,Steffens:2,"insurance-reform":3,Nabokov:2,unwarrantable:1,Llosa:2,"capacity-controlled":1,"all-over":127,unpredictable:1,Michio:2,Darien:2,Weekly:40,"market-weighted":1,Consumers:92,Bonaparte:2,"most-sold":1,Geddes:74,Rumanian:1,Playmates:28,Rinat:2,Donahue:2,WNYC:2,Torts:2,tabloid:22,loquacious:1,integrates:20,Brechtian:1,redefined:16,thrifty:1,performs:20,integrated:14,despairing:13,thrifts:4,rewrote:16,Megarians:28,This:89,Poong:2,"recession-free":1,Shippey:2,Vogtle:2,Thin:66,IRAs:874,overtake:42,"gray-flannel":3,"DRI\\/McGraw-Hill":2,navies:4,uproot:39,phrased:54,"commercial-jetliner":1,Decanting:8,Sashimi:64,codifying:8,nasaled:16,Financo:11,salutary:1,Increased:14,retreats:4,Increases:18,Coates:2,Edwardes:2,Palermo:2,Limitation:2,"medium-term":1,"blind-folded":1,slides:18,Vaseretic:2,regards:72,Taliesin:2,Unitika:2,Italiana:2,beamed:17,"cash-flush":1,"kelly\\":2,Edition:2,patients:4,Italians:65,grander:136,Capping:8,Bergen:2,Thrifty:40,unaccountable:1,Sirota:2,"PaineWebber-involved":1,provdied:16,"low-heeled":1,Revolving:8,unremittingly:6,levelled:17,unaccountably:6,Relieved:1,etes:64,olfactory:1,Duane:2,towboats:4,"contrary-to-reality":1,Thrifts:4,Appendixes:4,combat:315,"plague-sized":1,Shepperd:2,Delchamps:2,Moshe:2,Proximate:1,discourage:42,refreshing:13,Spycket:2,Prague:2,visiting:30,looked:32,"two-engine":1,undimmed:17,Salyer:2,Zigarlick:2,"Ore.-based":1,insulators:4,Melinda:2,automated:48,Centaur:2,brutalized:14,Coordinated:17,Document:2,Invercon:2,spurring:8,Shut:216,"anti-personality":1,mugs:4,McCartin:2,Shuz:2,Gatoil:2,Shun:2,undermining:8,Shui:2,spun:54,prosecute:39,Loraine:2,Willings:2,"well-springs":1,"B-As":124,Regulative:1,inheres:20,spur:182,"father-and-son":1,"less-than-diffident":1,CONELRAD:2,"Nissho-Iwai":2,futuristic:1,Ratings:57,shedding:55,ServiceMaster:2,fossilized:1,Shensi:2,Kal:2,Cabrera:2,Merc:11,invulnerable:1,"M.L.":2,"Cleveland-based":1,Govern:39,torpedo:63,environmentalists:4,thoroughfares:4,vanishing:8,Camrys:28,Cairns:2,Toufexis:2,Marskmen:2,disenfranchised:17,Fredericton:2,ploys:4,"high-echelon":1,subscribe:42,"due-diligence":1,"physician-owned":1,coddle:33,Posner:2,Officially:150,Regrets:20,hypermarkets:4,amigo:64,provinces:4,Pacta:64,Perrin:2,intimidating:30,tutor:25,shims:4,Cennini:2,proudest:51,Cennino:2,alkaloids:4,Islamabad:2,meritorious:1,"Trim-your-own-franks":39,Imre:2,overproducers:4,Richardson:2,Saloon:2,Flory:2,"pool-equipped":1,eyelashes:4,Force:164,Deaths:113,persevered:16,Takashima:2,Wait:260,"capital-gains-tax":1,Skolkau:2,Barstow:2,baldish:1,maladaptive:1,imprudently:6,brandished:16,kneaded:17,"units-Texas":2,Ladgham:2,Huntsville:2,Taxation:11,clinked:16,cross:875,brandishes:20,Delinquency:11,residing:8,Vue:2,"ultra-low-tar":1,"anti-war":1,"Computer-guided":1,"Fascio-Communist":1,incredible:1,Pierre:2,fighting:9,SPORTS:4,Moral:40,Moran:2,"inter-office":1,unbridled:1,cried:32,dressings:4,Kingstown:2,"high-rise":3,"home-care":3,Insilco:2,replenish:39,cries:18,"leveraged-buy-out":3,Argentina:11,Argentine:66,Tracers:74,"clock-stopped":17,Overweight:1,capabilities:4,"son-of-exchange":1,lymphocytes:4,"stop-motion":3,Appert:2,Nujoma:2,HUNTING:21,Populares:2,T:47,presume:42,raincoats:4,Marylanders:28,underwrote:876,"black-tie":1,Elephants:4,Mersa:2,raffish:1,rituals:4,"Co-operative":2,Kirghiz:2,Rottger:2,Section:47,unsuccessful:1,Barrington:2,Affirmative:1,cutters:4,Bellows:2,STODGY:1,bossed:17,manipulations:4,courtyards:4,bosses:4,Moriarty:2,"Matchbook-sized":1,conveyed:32,fray:25,gentians:4,Changyong:2,Generalizations:4,furtive:1,perspectives:4,Kendall:2,"smaller-capital":1,Autodesk:2,urged:32,Boggs:2,perks:4,vocationally:6,"low-back":1,perky:1,urges:72,Yippies:28,kinda:6,Palamara:2,besmirched:16,Takoma:2,negate:39,"Employee-owned":1,Upon:124,groomed:17,continental:1,preapproved:17,Ramsey:2,"commercial-products":1,Condition:47,Ginning:2,"Chrysler-Plymouth":2,triggered:45,Seahorse:2,tinged:17,thievin:8,Yuppies:4,Kanaday:2,Stops:2,Miscellany:2,Sills:2,ComputerWorld:2,WIC:2,"altitude-azimuth-mounted":1,Panam:2,infants:4,Oceanography:2,humbling:1,"stuck-up":1,Site:2,Kimba:2,Physicists:4,Berrigan:2,sympathizers:4,Wiedemann:2,"budget-reconciliation":3,downtalking:1,Potowomut:2,Fuji:113,Islamic:40,other:3,Desk:2,ventilating:21,Dese:2,Fontainbleau:2,Rothamsted:2,CenTrust:2,contacting:8,sloping:30,inherently:6,"non-military":1,Komatsu:2,earthly:1,"Messerschmitt-Boelkow-Blohm":2,"Smaller-stock":12,Draconian:1,upwards:877,Abingdon:2,Ditch:11,"all-nighters":4,resublimed:17,Roswell:2,"well-oriented":1,Dorenzo:2,Livery:1,pods:4,Kensetsu:2,"PARS-Datas":2,"white-walled":1,Artkino:2,Does:109,Olympics:41,ringlets:4,vassals:4,Spectators:4,Rayle:2,Sewell:2,sputter:42,immature:1,meadows:4,Beantown:2,oceans:4,Eberly:2,Charitable:1,"sideline-business":1,leisurely:97,stabbed:32,interlocking:30,JNR:2,disturb:42,Palache:2,Bacon:2,"new-issue":3,persisted:32,wavered:16,Paul:2,Convair:2,Rachel:129,specially:6,"Off-Track":2,eclipsed:32,sailed:32,loathing:21,McQuillan:2,enroute:6,jocular:1,Boise:2,"sales.":4,Olivares:2,"truck-building":3,fossil:3,resilient:1,cull:42,"mid-watch":1,Lovering:2,GRP:2,Gadsden:2,Munoz:2,GRX:2,atoms:4,GRE:2,cart:24,ACCOUNTING:47,Stephanie:2,eclipses:4,Nurseries:28,cyclical:1,Crossland:2,elaborate:83,"gene-copying":1,"Rul.":2,"anti-Semitic":1,"Kee-reist":106,replace:42,smolders:20,beneficiaries:4,IFAR:2,unanswered:1,anions:4,PROMOTION:2,Gabele:2,"USF&G":2,Porch:11,Diprivan:2,pompons:4,coordinators:4,strike:44,marchers:4,Recent:1,cutbacks:4,"Hart-Scott":2,hereby:6,Rule:11,EXPENSES:4,"focused-factory":1,reversible:1,Cathryn:2,Doskocil:2,Chinook:2,"already-sizable":1,Widow:47,Selman:2,flicking:8,Synbiotics:2,Imports:56,"contract-steering":1,rulings:4,Professors:2,Beebe:2,shelve:39,"WNYW-TV":2,"brand-name":117,omelets:4,"Socialist-led":1,leotards:4,Franny:2,Easier:136,Dreisers:28,groaned:16,dignifies:20,feature:205,Maritime:2,dignified:14,primping:8,Hydroxides:4,minimized:54,adoptions:4,reassess:63,Bailard:2,LIFETIME:2,minimizes:20,unselfish:1,"first-strike":1,Bananas:4,"glow-in-the-dark":1,"would-be":3,fictional:1,nymphs:4,orally:6,infertile:1,overhauls:18,stockpiled:17,Bryner:2,"loss-expense":1,Ludwin:2,stockpiles:18,Ludwig:2,Commies:65,Told:54,"exit-poll":3,Guofeng:2,VLSI:2,fairest:51,heretofore:6,charmers:4,fanciest:51,Barber:11,Rowse:2,Palsy:2,YALE:2,"put-upon":1,Beresford:2,"better-safe-than":1,mispriced:16,AutoWorld:2,RULERS:4,Danforth:2,interrupt:42,"man-made":1,mimicking:8,PROPERTIES:28,Habitat:2,Siedlungs:2,"Yank-oriented":1,Gustavus:2,Hackney:2,shrewder:12,"two-bit":1,"one-hour":1,Millions:4,"pre-``":133,reputedly:6,archetypes:4,Superstation:2,Winner:2,"long-running":1,Schroer:2,unlawfully:6,"raw-materials":152,tragicomic:3,McCovey:2,AGIP:2,Foreseeing:8,Huber:2,Burnison:2,"for-profit":1,Hubel:2,"Stuttgart-based":1,differentiates:20,Josiah:2,Prebon:2,Word:11,Amcast:2,Extension:11,Sifco:2,rateable:1,Work:787,threatened:45,Worn:17,attributions:4,sunbonnets:4,tinkled:16,crowned:17,obstructing:8,"incentive-buoyed":1,enormous:1,eared:1,Separate:1,tempting:1,Gianni:87,"government-orchestrated":1,symbolize:42,appreciable:1,CSC:2,Chihuahua:2,steroids:4,Tasurinchi:2,Harbert:2,vitro:147,procreate:39,glassy:1,infringed:32,"Hama-style":1,"open-market":3,"promise...":102,lawsuits:4,"think-tanks":1,perturbations:4,"clot-reducing":1,"earthquake-ravaged":1,unplowed:1,Backbends:4,REPORTED:17,rectified:17,supertitles:4,defaulted:112,wod:190,"Adm.":2,requesters:4,durin:773,krautheads:4,Abramson:2,Mohandas:2,skimmed:32,Volgograd:2,issuable:1,Weigle:2,Automobili:2,"hop-skipped":17,shyly:6,Mullenax:2,motets:4,constricted:103,benighted:1,unmelodic:1,"gift-giving":22,"push-ups":4,Lincolnshire:2,bleachers:4,soaked:81,promenades:4,instructs:20,amusing:1,Hornaday:2,Drastic:1,"second-leading":1,imprudent:1,Stertz:2,thrilled:81,"twin-blade":1,unmindful:1,VCR:401,Galveston:2,dummy:3,Jerusalem:183,snooping:8,Nonsexist:2,Chardon:11,Poxon:2,Worthington:2,"catastrophic-health":3,incorporate:392,MONITORED:16,HANNIFIN:2,insects:4,meetings:4,"people-oriented":1,Nyiregyhaza:2,"PLC.":2,Twain:2,"third-shift":1,lethal:1,abreast:6,Timon:2,"Beech-Nut":2,Strips:4,itinerant:1,Shahrokh:2,Microwaves:4,crossways:6,figgered:16,"Non-actors":4,"non-monetary":1,Timor:2,salespeople:19,rosebuds:4,Barberis:2,Permits:4,Nevertheless:6,remarry:39,inoperative:1,pocket:25,Gitano:2,relish:25,societies:4,Bens:2,"sub-assemblies":4,spilling:55,Squats:4,Prayers:4,stunningly:6,Siva:2,Pasture:2,hasten:42,"defense-oriented":1,Taxpayer:47,"festival-oriented":1,peripheral:1,flaxen:1,Brevard:2,Szelenyi:2,"well-educated":1,"seventh-consecutive":1,avert:39,Comedy:11,Eprex:2,Ginandjar:2,cosmologies:4,SABH:2,"pro-selected":1,propagated:17,Schottenstein:2,smelled:32,authorizing:8,"self-congratulatory":1,Carothers:2,nonregulated:1,"well-lighted":1,"GSD&M":2,chirped:16,fallacious:1,decompose:39,meting:8,Stover:2,argue:149,"absent-mindedly":6,Chatterton:2,"applause-happy":1,"EGA-VGA":1,Millard:2,Korman:2,"nitrogen-based":1,Bernstein:2,Rotie:2,jog:39,Movement:11,Perception:47,Mais:64,"well-rehearsed":1,subside:42,Insofar:6,superhuman:1,adroitly:6,Moneyed:2,graphical:1,"technologically-improved":1,Tokyo:2,Compulsive:1,"light-weight":1,Bougainville:2,Rachael:2,evasions:4,Fayetteville:2,haters:4,excorciate:39,"semi-statist":1,Miantonomi:2,Cessna:2,NMR:2,NMS:2,contemplated:81,Maid:2,Kezziah:2,Pancrazio:2,contemplates:20,NME:2,NMB:2,Harrison:2,Goddard:2,Dim:33,Lackluster:1,Neisse:2,Thermometer:2,Tossing:8,elicit:39,Sitter:2,anticipating:8,Mail:11,Puerto:303,smoothest:51,"F100-PW-200":2,Python:2,"per-year":1,yellow:104,Intecom:2,Fatimata:2,clucking:8,gateways:4,Die:878,"pre-school":1,Sloanaker:2,"latter-day":1,photographers:4,sobbing:8,Apples:57,military:3,Gays:4,Weigel:2,Tijuana:2,maximizing:8,reoffering:55,holdups:4,detracted:17,raindrops:4,backhanded:1,scissoring:8,sleeps:20,sleepy:1,rotates:20,amusingly:6,"town-house":3,"U.S.-about":127,Beit:2,spectacles:4,craning:8,olefins:4,"computer-accessory":3,"Preferred-dividend":1,Leonard:11,Berson:2,obedient:1,Spiegel:2,"semi-annually":6,Doerflinger:2,weeklies:4,Fontainebleau:2,perking:8,precincts:4,Reisert:2,Shucks:106,desire:24,Ryukichi:2,Aristotle:2,marinating:8,withing:127,grotesquely:6,metabolic:1,"Neo-Paganism":2,"pre-existence":1,Haydn:2,creep:50,Abbe:2,Abba:2,Upsala:2,Harrow:2,Abby:2,palatable:1,Weici:2,Origins:2,MPl:2,Showrooms:4,Tigre:2,unfrozen:1,"chin-up":397,substituted:81,MPs:4,memorable:1,unhealthily:6,MPD:2,Caneli:2,Sasser:2,MPH:2,MPI:2,sightseers:4,costive:1,"brain-wracking":1,iguanas:4,Boulevard:2,Hybrid:2,"well-suited":1,respectable:1,magazines:4,furnishing:21,octogenarians:4,"Kroller-Muller":2,novo:64,abjectly:6,Mentz:2,Shawomet:2,abstractions:4,Belier:2,resulted:32,"on-line":3,launching:55,Homestead:2,"slow-selling":1,magnificent:1,Karpa:2,"seven-tenths":4,sprinting:8,underdeveloped:1,handily:6,Hagura:2,Ozagenians:4,"alone...":102,Schubert:2,"c.i.f":1,insincere:1,"productivity-based":1,Biotechnical:2,Weinshienk:2,megakaryocytic:1,Develop:39,Ranzer:2,senilis:4,Calvet:2,Salvadorans:57,sprouts:4,whites:4,Maya:64,Mayo:2,Zambrano:2,Possible:1,Possibly:6,chauvinists:4,"anti-nausea":1,Mays:2,"E.B.":2,teats:4,postmarks:4,cleaved:17,reruns:4,entrust:42,hygienic:1,withstands:20,clattery:1,fastened:54,rockers:4,Gupta:2,Colzani:2,Reduce:39,cautioning:8,Fossan:2,treatises:4,Confectionery:66,Castor:1,"finger-pointing":22,incurred:54,Buffett:2,activated:14,theaters:879,skiing:21,Films:4,"Mafia-tainted":1,retrofit:39,Warranties:4,"non-enzymatic":1,Bahr:2,uneven:1,methodically:6,prolonging:8,Rosenmueller:2,Bahi:2,Believe:39,"not-less-deadly":1,Federalist:40,Goncharov:2,cataclysmic:1,spats:4,"Heel-Miracle":2,Windheim:2,Rents:123,Recognize:39,bilges:4,leave:182,engrossing:1,Xyvision:2,eosinophilic:1,Renta:2,abstrusenesses:4,loads:4,Suzanne:2,spiritual:3,Loveways:2,lounged:16,Quotas:4,Governmental:2,Unspeakable:1,Monarch:11,Sigman:2,behaviorally:6,Francie:2,melt:95,Cruz:2,lazily:6,Francis:2,"S.O.B.s":4,Neusteter:2,meld:39,"less-than-dazzling":1,Crosson:2,virtues:4,Bargerter:2,Veeck:2,jure:64,"drug-treatment":22,momentous:1,systemwide:1,passengers:4,hurtling:8,fomented:16,brilliant:1,Thierry:2,"lighter-than-normal":1,Scratching:8,Pickman:2,misfortunes:4,"D-marks":4,tasks:4,WDB:47,Hagner:2,curtailing:8,Asteria:2,overarching:30,raking:8,logically:6,Kroc:2,Nennius:2,unshirted:1,Egon:2,Ecuador:2,Fractions:4,NAEBM:2,Unconstitutional:1,scops:4,papal:1,Gleeson:2,citywide:1,Machineries:113,theoretical:1,Yuri:2,Iwai:2,wallcoverings:4,everywhere:6,Bechhofer:2,Achaeans:111,Yedisan:2,"power-sharing":1,Seelbinder:2,incited:54,uninsurable:1,facilitating:8,Stovall:2,Lois:2,Wizards:28,oversupplied:7,"stock-options":4,detached:81,remitted:17,parishes:4,Holding:116,Tentative:1,"capital-assets":4,"re-establish":63,unanticipated:1,Aegon:2,DPL:2,monitoring:308,grousing:8,Reuther:2,optimal:1,GP:2,Darwinism:2,intergenerational:1,Acura:2,chaplains:4,Buchner:2,convoluted:7,Discussed:17,"high-energy":1,Sensitive:1,unclaimed:1,improving:55,spouted:187,lids:4,equilibriums:4,natural:3,correlate:42,nakedly:6,biographical:1,Connors:2,Narver:2,Inland:305,"media-related":1,handguns:4,Samuelson:2,Islam:2,"air-defense":1,innocuous:1,"non-bearing":1,Wyoming:116,Kulongoski:2,"years...":102,"middle-management":1,overhaul:25,muses:72,nearsighted:1,disconcertingly:6,collegians:4,Zhok:2,Marcmann:2,renaming:8,Buck:2,Sister:47,thereby:6,Gute:64,Bucs:2,"fumed-oak":3,Argyll:2,Erfurt:2,establishing:8,Pruett:2,"game-show":3,Stanley:2,roleplayed:17,"J.L.":2,"more-selective":335,stalling:8,coneheads:4,"sit-ins":91,crushing:5,"freight-bums":4,owing:13,COLH:2,propitiate:39,Added:493,barometric:1,biochemicals:4,Plessey:2,astray:6,Furnaces:2,"fourth-largest":1,astral:1,Holloway:2,Barnevik:2,secessionists:4,instrumentalists:4,facsimiles:4,Arcata:2,matchless:1,pimps:4,undesirably:6,wanderers:4,Brantford:2,"war-rationed":1,Lehmann:2,Brazil:2,uncommitted:1,Ontario:2,distal:1,Poorest:51,Royal:40,Chekhovian:1,"loss-plagued":1,disbelieving:8,Gilbraltar:2,intermediaries:4,Salembier:2,Nattily:6,operable:1,Divi:2,Patrolman:2,bite:95,Mencken:2,DieHard:1,stuffed:81,cito:64,"Anglo\\":1,bits:4,cite:149,slashes:18,sentinels:4,Megat:2,gratuities:4,southbound:1,reclaims:20,antic:1,slashed:32,Kalamazoo:11,Runcie:2,impractical:1,depressed:103,yelping:8,FAXM:2,corruptible:1,"meat-hungry":1,liftoffs:4,Businesses:4,drywall:78,damned:880,depresses:20,dutifully:6,"consumer-price-index":1,"wheeler-dealers":4,Environmentalism:11,buried:81,Aguiar:2,dewars:4,peacekeeping:1,masse:623,beeping:55,Comstock:2,Wagons:4,Leemans:2,Impressionism:47,Getting:8,"two-run":1,compress:39,rosins:4,Boone:2,Impressionist:1,"pro-investment":1,inserted:54,Totalitarianism:2,drive:24,Weston:2,"self-unloading":1,Intelsat:2,Dietisa:2,honeymooned:32,marshalled:16,"cross-investing":3,peaches:4,swathings:4,bright:97,"north-flowing":1,"Matsushita-owned":1,Deloitte:2,scarce:1,"self-assertive":1,"kisha-club":1,punchy:1,"more-active":1,"takeoff-warning":1,Applied:157,holdovers:4,battalions:4,submerge:39,Fauntleroy:2,Menell:2,Having:229,"burnt-orange":1,Churchilliana:28,"middle-class":3,fenders:4,"success-oriented":1,resins:4,McCauliffe:2,"anti-Stalinist":1,uncover:39,Trichieri:2,resiny:1,Cecconi:2,tibialis:4,softies:4,arouses:20,Bocas:2,Fraction:11,overflowed:16,"Anti-American":1,aroused:54,"N.Y.U.":2,Gluck:2,inequalities:4,basileis:4,compounds:18,TRUE:1,"less-developed-country":1,representatives:4,Allstate:2,Instructor:2,"dark-brown":1,pitiless:1,screen:44,"half-turned":1,steroid:1,matures:20,Xiang:2,"Southmark-sponsored":1,coolheaded:1,puerile:1,Spangled:2,Spider:2,"best-managed":1,Ortegas:28,"Orleans-based":1,"politico-plaintiffs":4,pastimes:4,extravagantly:6,Maroc:2,Maroy:2,Hagoshrim:2,Riverside:2,considers:20,panics:4,RECENT:1,cramps:4,Humberto:2,"commission-driven":1,Allumettes:2,Sherblom:2,fiveyear:1,receded:32,braving:8,DANIEL:2,mutilating:8,needlelike:1,"Thirty-fourth":2,"Dai-ichi":2,curbing:8,Districts:57,Wailbri:2,dropouts:4,Round:129,Walther:2,wherewithal:22,RUN:2,Goodrich:2,MORTGAGE:11,"Ziff-Davis":2,"vis-a-vis":881,endures:20,policies:4,mono:3,endured:32,cartelized:17,croaked:16,"gay-student":1,Calculations:4,"S.C.-based":1,spooked:54,"cost-sharing":22,Hanley:2,"research-based":1,PageAmerica:2,Pocklington:2,perpetually:6,essayed:32,enrich:42,homophobic:1,sterling:22,Arsenio:2,Geraldine:2,structurally:6,Dockweiler:2,"organization-position":1,"around...":102,"Public-spirited":1,"%":882,Eichof:2,Vroman:2,Physics:11,Own:66,Superintendent:2,volcanoes:4,Raynal:2,idiotically:6,Countrymen:28,Markovitz:2,Slims:111,"big-ticket":1,Ostentatious:1,rest:883,Zhongshan:2,"city-owned":1,BUELL:2,Jacksonian:40,Rolled:17,Advice:11,"Dame-Michigan":2,Mulberry:2,silver:617,contesting:8,dryly:6,usurious:1,ebullient:1,Roller:2,transmuted:17,tunelessly:6,crusty:1,counteracting:8,Aung:2,crusts:4,dart:78,dark:34,Verstandig:2,Aunt:11,darn:82,vacuum:139,snare:63,dare:884,Shari:2,"parent-child":1,"agents-in-training":4,Share:269,Contemporary:40,Ruckdeschel:2,Zicklin:2,Riese:2,expository:1,Sharp:40,intestinal:1,crabbed:1,Oafid:2,pickled:1,Controls:74,supplementary:3,Geoffrey:2,malposed:1,Troeltsch:2,pickles:4,Apar:2,scholarships:4,Bully:39,symbiotic:1,Answers:72,Bulls:57,"premium-priced":1,"full-page":1,Refugee:2,refer:42,Mochida:2,biased:17,Moccasin:2,industrialized:14,Gimpy:2,"acquisition...":102,biases:4,punishments:4,slatted:1,Hazell:2,Fighter:2,package:25,"Stena-Tiphook":2,"person-to-person":1,Dorrance:2,fraying:8,Regretfully:6,Stalker:2,Xerox:2,Meharry:2,"hard-liners":4,Matchett:2,extramarital:1,apologize:39,incanted:16,"married-couple":3,"bond-rating":1,Ogallala:2,"X-rays":4,Malraux:2,"flash-cubes":4,betrays:20,lapsing:8,slopes:18,tireless:1,masquerades:20,survives:20,"death-backed":1,Stevie:2,Breweries:46,Eastwick:2,beginners:4,follicular:1,Microamerica:2,survived:32,Breasted:2,"French-English":2,housewives:4,Greensboro:2,amplify:39,"anti-infective":1,Cabria:2,impute:33,"in-kind":1,blinks:20,Klauer:2,pinpointed:81,"turf-care":3,Hatters:2,straightens:20,Camille:2,catchup:3,Camilla:2,Accept:39,Rahill:2,Camillo:2,Camilli:2,Eurocom:2,Atlantis:113,"long-tenured":1,Readily:6,sanguine:3,aromatic:1,tight:97,Watson:2,Atlantic:40,incomprehensible:3,"engineering-design":1,Wainaina:2,Walcott:2,Welko:2,remounting:8,terra:147,Certus:2,Luehrs:2,unanimous:1,KSI:2,"eight-time":1,partitioned:17,waived:54,Degas:2,Direct:66,Diasonics:2,waives:20,retch:25,"large-volume":1,"eight-page":1,"vertical-restraint":1,Villard:2,restated:45,"two-record":1,"stored-up":1,squeal:63,Kuparuk:2,borderlands:4,"Non-bank":1,to:885,tail:70,th:851,Arturo:2,Garvey:2,Morikawa:2,zapping:55,hitting:55,Beebes:28,FAA:2,Sohn:2,Soho:2,Belge:2,falsifying:8,Frequent:1,Cogen:2,Copper:47,parliaments:4,hooking:8,cable:449,rusting:1,"rosy-fingered":1,joined:32,millimeters:4,drahve:39,"fifty-odd":1,methodical:1,Reagan:40,Inamori:2,Lawrenson:2,"half-understood":1,Drury:2,assured:271,Crockett:2,"trend-setters":4,Euronotes:4,"Commission.":2,Ferguson:2,scientists:4,Jodi:2,"frequency,``":133,Chans:4,Broyd:2,Tartuffe:2,implantable:1,Finland:11,corniest:51,Silence:47,bulged:16,trailblazing:8,Commissions:57,Gruss:2,travails:4,Seeley:2,murdering:30,rummaging:1,Nemeth:2,"all-victorious":1,"triple-tank":1,Placing:8,Canton:2,Cantor:2,gosh:106,Willmott:2,Shiite:40,Willoughby:2,hassles:4,Parisina:2,"Director-General":2,"moon-drenched":1,"Hoe-Down":2,pears:4,zappers:4,breaches:4,quickstep:78,gorgeous:1,whalesized:1,"multi-lingual":1,befitting:30,portrayals:4,Congregationalists:4,"big-name":1,"spoon-fed":1,Timbuktu:2,Aghanistan:2,eatable:1,Integra:2,"caliche-topped":1,Cathedral:11,Your:35,seismological:1,eardrums:4,antagonists:4,scan:24,Mouchet:2,suggestions:4,unbiased:1,fiercely:6,"Dylan-influenced":1,"birch-paneled":1,commanded:32,bided:17,Paisley:2,scoundrels:4,imminent:1,conventioners:4,cajole:39,"All-Union":2,AIB:2,docudramas:4,Orondo:2,Isis:2,treatments:4,unsound:1,Gilchrist:2,authentic:1,Orso:2,knockoffs:4,scoreboards:4,register:182,fundamental:1,"anti-Negro":1,adorned:54,"Creek-Turn":1,Purple:2,Appalachia:2,Aeschbacher:2,turbine:22,Egils:2,Transatlantic:2,"get-tough":1,nifty:1,scribes:4,Sound:886,Resolve:2,Pawtuxet:2,subtitled:17,Fifield:2,"high-strung":1,subtitles:4,"cash-interest":1,Elliot:2,"ocean-thermal":1,assemblies:4,Katow:2,Prodigall:2,Silverstein:2,aggrieved:14,energetically:6,Osaka:2,investigators:4,Amperex:2,upstairs:887,noble:642,hemispheric:1,"lease-rental":1,megaquestions:4,"ATS\\":2,Crossman:2,"morale-damaging":1,revisionists:4,Sunbury:2,sociological:1,finned:17,punches:4,tensional:1,plotting:55,"patent-sharing":1,Manion:2,Bandler:2,SHV:2,calumniated:17,"Thirty-month":2,"eighty-year-old":1,Beseler:2,Historical:40,rises:72,Strings:41,"surface-to-air":1,Stingers:28,"Dai-Ichi":2,sicker:12,Bozell:2,elective:1,"advertiser-bankrolled":1,willies:4,Panny:2,unusable:1,"equity-like":1,spiritually:6,housewares:4,Consisting:8,inapplicable:1,"Alun-Jones":2,telecines:4,Plaude:2,Vladilen:2,Cabernet:2,uncomfortably:6,gnash:39,"broad-brimmed":1,Heilman:2,Gallitzin:2,Hijet:2,Ansley:2,reverential:1,Often:150,"pre-registered":14,spavined:1,Lyford:2,derailing:8,fishermen:4,Brunello:2,seamlessly:6,"heat-using":1,Alcohol:47,bimolecular:1,defect:25,"hard-come-by":1,caress:39,Liro:2,Hazelwood:2,Aide:2,"computer-industry":22,"cement-makers":4,scrawled:85,jeopardize:42,internal:1,generalized:7,frail:1,BANCORP:2,Logically:6,frowned:32,Hardwicke:2,M:11,Utopians:28,Annicchino:2,wedded:14,Aftereffects:4,accepting:30,Petroleos:2,Famcorp:2,mystical:1,Attopeu:2,Arenberg:2,"WHEC-TV":2,"five-gallon":1,Balzac:2,Cloud:2,Traxler:2,gold:22,"Lawn-Boy":2,Pharmacuetica:2,Lillo:2,Amiga:2,Meidinger:2,"export-oriented":1,Simpkins:2,Agius:2,degraded:1,"dog-pin":1,Kyushu:2,standeth:33,Creswell:2,"ho-hum":1,detaining:8,mailmen:4,"blood-in-the-streets":4,REFUSED:16,Aquitaine:2,poodles:4,Carolinians:28,factor:44,Olivia:2,ordained:17,"cost-plus":1,Lakers:2,"Bangkok-based":1,accretions:4,charmingly:6,Massicotte:2,Tigris:2,progressive:3,cry:44,Westlake:2,Vicon:2,banking:888,dismounted:32,Dignitaries:4,Piersee:2,Telemedia:2,bulky:1,Komsomolskaya:2,JenMar:2,Advisers:41,"India-Pakistan":2,TVSM:2,Southerners:41,Denko:2,"European-branch":1,"cement-making":1,unmeshed:1,resonantly:6,Towers:74,Kader:2,Hadhazy:2,pickup:22,Slosberg:2,Dresylon:2,Prussin:2,monsters:4,compliment:24,available:1,premises:91,Ceecee:2,"one-in-a-million":1,"three-party":1,incident:22,rudderless:1,tramp:3,Annie:2,Keynes:2,Cosmology:2,unapologetic:1,cryptic:1,"earnings-forecast":1,Intercable:2,thou:53,Chip:11,Donning:8,Strategic:40,Chin:11,Chim:2,tangibly:6,accomodations:4,visionaries:4,Jour:2,dimensional:1,dissuade:39,acclaim:25,adjoining:30,church:47,"third-highest":186,"quake-shocked":1,SCHMIDT:2,Mariana:2,Mariano:2,Quesadas:28,Ramey:2,traipsing:8,ITT:2,contentedly:6,toughing:8,"tax-collection":3,Hockney:2,resting:8,Gracias:64,Matheson:2,Telenet:2,stockholding:8,bottlers:4,Bewitched:2,deport:39,Fairfax:11,Myra:2,inclement:1,Eliades:2,Ducky:2,stupefyingly:6,straight:97,Misa:2,reliably:6,Mist:11,Miss:11,Petrarchan:1,Corazon:2,comport:39,Biosource:2,Towing:2,Viola:2,McFadden:2,Stock:11,welts:4,Associate:129,fetching:30,Satanic:66,"Nunn-McCurdy":2,Address:2,Waukesha:2,Blodgett:2,tower:25,Chardonnay:2,comprehensive:1,videotape:25,Lucisano:2,rabid:1,Lukuklu:2,Reston:2,expend:42,"front-runners":4,surrogate:3,Nobels:28,Sol:2,Soo:2,Son:11,Congo:11,inflations:4,Sox:74,"FDA-NIH-industry":1,cabins:4,Tones:28,Riserva:2,"floating-rate":3,Labow:2,Oilwell:2,"J.P":2,ousting:8,eagerly:6,Papers:130,"Euro-factories":4,FT:2,Everglades:113,readers:4,"below-average":1,advertisements:4,eager:1,"post-Civil":2,Washoe:2,semimonthly:532,Mulroney:2,ruled:32,herculean:1,Keatingland:2,Both:889,Tracking:116,Faster:12,Mega:1,"five-session":3,responsibly:6,hitters:4,shading:21,formal:1,Mallory:2,sorting:55,anthers:4,Nick:2,facets:4,MacDonald:2,scape:39,Dakota:2,Bergamaschi:2,disdainfully:6,Koskotas:2,"plant-wide":1,pals:4,mighta:784,beckon:149,felonious:1,mighty:97,pall:25,Napa:2,"hard-line":3,Cleburne:2,pale:794,Friend:11,Kashing:2,Mostly:6,Rutan:2,"margins...":102,"D.K.":2,rehabilitating:8,"re-legalization":39,Wish:319,dating:55,shooters:4,tinkers:18,eclectically:6,redoing:8,FNMA:2,UPS:2,"wood-burning":1,Attica:2,Pony:11,Ajinomoto:2,Pont:11,Pons:2,Halting:8,unintentional:1,Baffin:2,"non-U.S.":66,Pond:11,Pong:2,benefactors:4,anterior:1,"cheap-to-make":1,beefed:54,muddleheaded:1,hometown:22,Grosvenor:2,Goldline:2,Indochina:2,awaited:85,"heat-denatured":1,poaching:8,Esher:2,gleans:20,Typical:1,Basically:6,perplex:149,Holocaust:11,Gucci:2,"pretty-much":1,swarm:25,Takasago:2,anteriors:4,Marv:2,differentiable:1,CREDITS:4,genial:1,Jobson:2,"un-Westernizable":1,"once-stately":1,Blackman:2,presided:32,kimpap:64,McAlister:2,nautical:1,presides:20,"full-size":1,declaimed:16,Obernauer:2,rekindling:55,stiffly:43,Haines:2,Portfolios:65,realest:51,"hot-cold":1,Mary:2,Grandma:11,desynchronizing:8,Cuoco:2,besiege:39,hemophiliacs:4,Shakarchi:2,Maoists:28,Bromley:2,pedestrians:4,Golovanov:2,Voroshilov:2,magnanimous:1,advisory:3,scratch:44,Kleiber:2,astronauts:4,enjoyable:1,Progress:47,householders:4,luxuries:4,Skidmore:2,"non-merger":1,"E.H.":2,young:593,noncallable:1,lustrious:1,"slave-laborers":4,Rhythm:47,TREASURY:11,Salaam:64,Shipley:2,Tories:41,Hanukkah:2,cerebrated:17,"high-beta":1,"larger-than-anticipated":1,reopened:345,Candy:47,Vnet:2,nominated:54,mixing:55,Sweaty:1,"goggle-eyed":1,Foglio:2,northwestern:1,magic:22,stodgy:1,Offering:268,"hard-bitten":1,Surface:22,anxious:1,whittling:8,"poster-sized":1,Gilman:2,Hinckley:2,sickish:1,Turks:41,seventies:4,Woronoff:2,Farmer:11,Ruttenbur:2,wheat:22,Nickle:2,foals:4,ungallant:1,Rees:111,drugstores:4,"hunky-dory":1,"health-products":4,expressed:45,Reed:2,Reef:2,expresses:20,delving:55,"Udvar-Hazy":2,Tibetan:66,"Mar.":2,Combining:8,punch:24,puckish:1,invented:54,Magnetics:111,Aquino:2,"computer-literate":1,AEI:2,Charities:57,Elisha:2,"F.":11,contaminants:4,"{":528,altho:325,Rilling:2,Leading:872,Thakhek:2,sienna:1,"Rhine-Main":2,Explains:20,asymptotic:1,chocolates:4,SEAGATE:2,"bleacher-type":1,Eskimo:2,Commack:2,"low-polluting":1,Plain:40,disarming:30,federally:6,lowliest:51,shoelaces:4,Pilots:92,bobbins:4,Berlusconi:2,Albion:2,practicing:55,bankholding:8,challenge:44,Dequindre:2,Written:17,Berthelier:2,governmentset:17,publications:4,fomenting:8,enlivening:8,Seligman:2,Police:890,"stress-provoking":1,Greisler:2,USAA:2,USAF:2,Steinkerque:2,Ethiopians:65,Policy:11,Borner:2,paws:4,Boursin:2,clogs:20,shuffled:16,"c-Domestic":29,mumbled:32,Selavo:2,occipital:1,motivating:30,mumbles:20,Kemps:2,"non-recurring":1,Kempe:2,Nisshinbo:2,Badrawi:2,redeeming:30,"Walkman-style":1,Presidio:11,counter:891,reminders:4,Breuners:74,"re-supplied":17,Blackpool:2,massages:4,writ:855,asserts:20,classy:1,"well-managed":1,counted:54,Schramm:2,"HIV-infected":7,Washed:17,emissaries:4,Polychemicals:2,"cheek-by-jowl":1,Weaving:8,Himself:53,decay:25,compulsions:4,dispose:39,"fiscal-year":3,degrees:4,Sappho:2,laggards:4,therefor:6,Haven:2,Havel:2,"stop-loss":22,Toussie:2,Attorneys:56,SHEA:2,Herbert:2,dock:25,"heavy-handed":1,Aluminium:2,"Q45":2,Swelling:13,sniffing:8,wrangled:32,Rourke:11,onlookers:4,"well-stated":7,tents:4,Kiyoi:2,UNIFIRST:2,jagged:7,Cassite:2,tenth:3,Dropouts:4,borderline:34,"gyro-stabilized":1,Material:40,"much-larger":1,mediated:17,superbly:6,Trying:229,waters:4,"MRI-type":1,realigning:8,"Once-only":1,"wall-stabilized":1,DIGS:4,"internal-external":1,regulators:18,Ffortescue:2,regulatory:1,Extricating:8,Debenture:47,dubbed:54,Celebrities:4,"telephone-access":1,Berteros:28,Cummins:2,respond:182,retching:55,rescinding:8,metering:8,feasts:4,Program:47,occurrences:4,collages:4,"hand-carried":17,opportune:1,Dyerear:2,Volker:2,Happily:6,lengthily:6,Spokespersons:4,vaginal:1,nosediving:8,"tie-ups":4,"Indo-China":2,Kersley:2,evacuated:17,gummy:1,Qing:2,aerate:39,shorts:4,Complicating:8,Chalmers:74,Casanova:2,depressing:13,crosswise:6,bombers:4,unexpended:14,Democratic:10,InterMarket:2,"original-instrument":1,unamused:17,"top-loaders":4,unblushing:1,Whirpool:2,splayed:16,philologists:4,listeners:4,dissensions:4,Zaire:2,"pre-arranged":1,downpayments:4,"highest-quality":608,accusing:30,AAA:2,unbelieving:1,"pull-backs":4,freshened:17,Patsy:2,correspond:42,"Messerschmitt-Bolkow":2,HonFed:2,Smithtown:2,intertwining:30,amphibious:1,hypothalamic:1,therewith:6,mills:4,Loyalty:47,"Dak.":2,mesenteric:1,Funny:301,Quarterback:2,babes:4,"gray-bearded":1,souled:1,Decatur:2,Weinstein:2,HEADED:16,Stals:2,Volga:2,segment:78,lined:45,"WXRK-FM":2,"media-linked":1,Neanderthals:4,socialistic:1,Suliman:2,face:419,screechy:1,Jackets:4,Ruger:2,Technically:150,Kitaro:2,Paris:2,Claiming:8,disbanded:45,"MIG-1\\":1,inflammations:4,WANT:33,attributes:18,redirect:39,Meanwhile:6,conciliate:39,lethargies:4,scurrilous:1,"Dutch-based":1,Strong:66,"One-Cancels-The-Other":2,handle:182,listened:32,muttering:892,scorn:44,Evarsito:2,Coelho:2,postured:16,defenseless:1,Once:477,smash:44,"M.B.A.":11,Connally:2,summon:39,basking:8,Ryland:2,Anglian:1,receptive:1,superstars:4,CRS:2,CRT:2,Uppsala:2,CRX:2,Atonio:2,Palmtops:4,paperbacks:4,"Tamiris-Daniel":2,CRI:2,Angkor:2,CRs:4,Kohrs:2,migrations:4,distressingly:6,Kerson:2,Gallup:11,nominees:4,disgruntled:7,"ABM.":2,Optima:2,Frucher:2,Coronets:28,strides:18,grow:42,absented:16,absentee:3,"memory-images":4,Alsing:2,baubles:4,Hadassah:2,challengeable:1,"seven-course":1,streams:4,Dillmann:2,"R.S.":2,Kimbark:2,nonmetallic:1,Smitty:2,wrestlers:4,"R.,Iowa":2,rockbound:1,Her:478,"under-the-table":1,Hey:125,Eskridge:2,Hee:125,Yankeefication:2,"heavy-machine":1,winning:101,Glemp:2,Alco:2,"Seattle-Northwest":2,Capoten:2,Samuels:2,Kinda:6,compensating:8,utilizing:8,negotiates:20,Stations:57,Whence:293,"tobacco-ad":1,Diman:2,coals:4,"less-advanced":893,sentimentalize:39,bombproof:22,"unself-conscious":1,Waldron:2,unpaired:17,Prieta:2,Gorgeous:2,retarding:8,vs:587,overleveraged:1,sits:72,waivers:4,situ:64,descriptive:1,Burle:2,"self-declared":1,fashioning:8,Antinomians:4,Stepanian:2,Burly:1,Danny:2,emotionally:6,Amcore:2,"v.":894,architectures:4,infinite:3,Kristen:2,"C.M.":2,Garland:2,"reinforced-fiberglass":1,Burts:28,fail:95,drawing:5,restructure:95,flesh:25,Retiring:8,rooms:4,insisting:8,Carneigie:2,roomy:1,extempore:6,Babylonians:28,Company:11,"live-haulers":4,Darius:2,Vegans:28,Bridgeville:2,"securities-turnover":1,"grand-slam":1,"big-company":1,amputations:4,"Second-quarter":129,Amadeus:47,Hardiman:2,rednecks:4,snitched:17,"one-digit":1,"pre-quake":1,Sallie:2,blockages:4,Engineers:41,Creek:2,Schwartz:2,chairs:18,Creed:2,Gornto:2,"consumer-advocacy":1,erasable:1,imprison:39,"sell-offs":4,Valdiserri:2,therapeutic:3,"Low-interest-rate":1,misperceives:20,"bargain-hunt":39,"open-ended":1,"Trupin-related":1,sketching:55,demonstrators:4,anguished:1,Montana:2,therapists:4,Bronner:2,SQUIBB:2,voluptuous:1,drift:24,Bathurst:2,adversary:22,counties:4,"Optical-storage":1,PanAm:2,"p-aminobenzoic":1,Plymouth:11,merited:16,Pampel:2,"third-leading":1,spoilables:4,Rotarians:28,intermediates:4,Leninist:2,screamed:32,activate:149,Calgary:2,From:124,Creole:2,Summerland:2,"interest-deferred":1,"MGM-UA":2,Dangling:8,Deardorff:2,kooky:1,restricts:20,Listening:21,kooks:4,Epitaph:2,Groth:2,disengaged:17,HEALTHDYNE:2,"More-detailed":12,Grote:2,"vine-embowered":1,"CF680C2":2,"past-fantasy":1,proverbs:4,"agro-chemicals":4,interwar:1,Hussman:2,"government-subsidized":1,Diane:2,triumphant:1,counterattack:25,convince:42,leashes:4,AnaMor:2,rightly:6,"three-ton":1,CIM:2,CIR:2,Sunburst:2,Rustin:2,"in\\":1,renowned:7,"low-voltage":1,compressive:1,"agreed-upon":677,hobbling:8,trials:4,"power-switching":1,Confectioner:2,Luechtefeld:2,incorrigible:1,oviform:1,Prager:2,MACY:2,Kasiva:2,Congressman:11,capers:4,"faculty-hiring":1,Gargle:2,Boland:2,"non-scientific":1,Attractions:28,"R.H.":2,tinkling:8,"corporate-related":1,"garbage-out":1,Waugh:2,"shipping-rate":1,unspeakable:1,frolics:4,"small-to-medium-sized":1,nonstrategic:1,reactants:4,blisters:4,extrapolates:20,DataTimes:2,ebbed:32,Rabia:2,Payouts:4,spew:33,excoriate:39,"four-game":1,Langford:2,aftereffects:4,invaders:4,fiberoptic:1,regal:1,OVERSEAS:1,McKennon:2,whack:63,Salvesen:2,Castlegar:2,"disease-fighting":1,LYONs:4,Wierton:2,"business-venture":1,yanking:8,waterlogged:1,Entrenched:17,porpoises:4,Ejaculated:16,pinch:25,"inter-relationships":4,Gauer:2,Glayre:2,reinvent:39,Sermon:47,chew:42,preached:32,Hundreds:123,"two-time":1,surmounting:8,horn:25,preaches:20,hors:64,unsurpassed:1,specs:4,Pindling:2,Partly:6,deliberate:82,Mayne:2,consequent:1,Amazon:2,glaciers:4,zoomed:32,officially:6,Faced:54,crunch:25,Kandemir:2,"fall-outs":4,"Shaw-Walker":2,Cricket:2,thrombosed:17,Accustomed:1,Nourishing:1,Faces:111,underrepresented:17,leitmotiv:64,Schabowski:2,Shea:2,items:18,Queen:11,Blanchard:2,BLUES:28,reappraise:42,Shep:2,calculators:4,Floridians:2,doleful:1,glittering:8,Orleans:2,Jew:11,Jet:11,Abderahmane:2,graders:4,highly:6,Jeb:11,encountering:8,Jed:2,Inferno:47,Jen:2,Zarett:2,Helsinki:2,Cresson:2,retaking:8,"rank-and-file":3,Maywood:2,hunkered:54,plows:18,"anti-debt":1,plagiarize:39,Chemcat:2,Forst:2,Vanden:2,"pre-drilled":1,Vander:2,zeroed:17,wellplaced:1,Cosmetic:2,tecum:64,Groopman:2,Chambre:2,Developed:17,daises:4,"Street-style":1,unshackled:1,overvaulting:1,Jimbo:2,Lehar:2,"growth-stock":3,"Super-Set":2,antislavery:1,Balfour:2,"white-minority":1,unsubordinated:1,tornadoes:4,Arequipa:2,foulest:51,"automobile-manufacturing":1,operatic:1,gamble:25,Tyranny:2,ASARCO:2,coined:54,Petrofina:2,movable:3,"fat-free":1,Thamnophis:4,austere:1,Erma:2,"less-than-truckload":1,AutoPacific:2,"thrift-bailout":3,encompassing:8,aboveground:1,hummable:1,"Year-earlier":1,"L.P.":11,"Space-net":2,Glasow:2,tiffs:4,"specially-designed":1,Strassner:2,"large-enough":1,nets:18,"cost-data":1,befallen:17,Salu:2,savors:4,feuding:55,PAPERS:4,discomfited:1,Orcutt:2,Tsvetkov:2,Thermogravimetric:1,noncash:3,Mercy:2,bans:18,Manpower:2,Analysis:11,band:25,bang:555,Merck:11,Homemaster:1,Merce:2,bank:24,MBIA:2,Medvedev:2,"Bar-H":2,reguli:4,"once-troubled":1,Occasionally:6,"Toot-toot":106,"pied-a-terre":64,profusely:6,Frankfurter:11,"tax-and-budget":1,ologies:4,summarily:6,"back-of-the-envelope":1,logs:18,mangled:7,REFLECTIONS:2,Goldsmith:2,loaders:4,"company-operated":1,whining:8,hooked:81,Newbury:2,Complementing:8,imperialists:4,Nasional:2,"too-shiny":1,standard:3,ecliptic:22,Cautiously:6,"horn-rim":1,Angeles:2,Saklad:2,"under-represented":1,spoonbills:4,Flexicokers:4,Audits:28,Pervanas:2,meshed:17,lexicostatistic:1,saddling:8,delicious:1,Quod:64,thoughtfully:6,Committeemen:4,Cormack:2,Barris:113,"low-life":1,"mergers-and-acquisitions":152,sedans:4,crunches:4,Barrie:2,Medicaid:2,farming:21,crunched:16,Barrio:2,Bushels:4,Masonic:2,decentralize:39,refraining:8,grandchildren:4,"pro-labor":1,Quoting:8,diversified:103,Vanderbilts:4,"five-month-old":1,Escalante:2,corresponded:16,"dependent-care":1,unblinking:1,seated:45,"FriedrichsInc.":2,badmen:4,"M.W.":2,SIGNALED:17,stalls:18,Depot:2,Multimate:2,"vocational-advancement":1,Cosmopolitan:2,"second-time":1,widen:42,latter:22,crinkles:4,Ridder:2,unhook:39,frictionless:1,"anti-bike":1,insulated:895,"Year-End":1,maiden:22,"injection-molded":1,involving:8,negro:2,autopsy:25,Lifland:2,demoralizes:20,intergroup:3,herpetological:1,Hosni:2,calculated:45,Schlumberger:2,Dynamic:2,scavenging:8,Emperors:4,judgmental:1,demoralized:14,responded:32,nonporous:1,Missiles:113,Morison:2,religions:4,Riad:2,"word-for-word":1,unattached:7,enjoyed:32,SanAntonio:2,"Dec.":128,foraging:21,painfully:6,Mixte:2,"thin-slab":1,Solicitor:2,Paev:2,adequate:1,Irec:2,Marseillaise:2,Omnicare:2,masons:4,"day-by-day":1,"backed-up":1,vowels:4,Ladies:130,Taxes:4,pierced:54,Fagershein:2,nasty:1,headlong:6,furnishings:4,"billion-a":1,gunslinging:8,Deck:2,Unfilled:1,unmet:1,Strangelove:2,"Frankfurt-based":1,unshakeable:1,"reviewed\\/designed":17,complimenting:8,Kezar:2,Astonishingly:6,scours:91,GBL:2,initialed:32,projections:4,Cesare:2,"appellate-litigation":439,afloat:6,Wiegers:2,unable:1,Quindlen:2,contraband:3,Moderating:8,Sinkula:2,Huxley:2,Kohnstamm:2,Duck:11,Reavey:2,uncataloged:17,lurching:8,Bouvardier:2,Judson:2,hatchings:4,"reduced-instruction-set-computer":1,Aggregate:1,Heavily:6,Amhowitz:2,gasped:16,Doug:2,germinated:1,Conversely:150,Sistine:2,pulleys:4,freakish:1,Colmans:28,refile:39,Genscher:2,interrelations:4,constructively:6,oblivious:1,refill:25,zigzagging:8,"Treasury-Fed":2,Erhart:2,"high-visibility":3,unhappily:6,drafting:424,accentuate:39,Beers:2,ransacking:8,"Smoot-Hawley":2,thoughtprovoking:1,duties:4,poring:13,Teodorani:2,Coronado:2,Unincorporated:2,pejorative:1,"high-yields":4,skinheads:4,applied:896,harms:72,publicly:6,"Tenn.":2,Sicily:2,"blue-green":1,Messengers:28,Mechanicsburg:2,applies:20,Wattenberg:2,"hard-fought":1,"soon-to-expire":1,Grinevsky:2,"H.M.S.":2,Folmar:2,skipping:8,Virtually:6,unproved:1,Ronkonkoma:2,grandiose:1,"off-flavors":4,perform:42,trashing:21,"above-noted":1,Harrisburg:11,Leming:2,sheltered:14,Ike:11,incorrectly:6,"anti-Turkish":1,crevices:4,Distance:2,Instituto:2,springing:8,Tichenor:2,confiding:30,"Network-access":1,Prism:2,"higher-than-anticipated":1,possibly:6,burbles:20,DeGeurin:2,"self-deceptions":4,unified:103,macaque:1,stringent:1,invalidate:39,athletic:1,interrogatives:4,Missouri:2,"short-cut":1,Consistently:6,quintessential:1,unifies:20,Spike:2,Nicos:2,Wanniski:2,Philippe:2,unique:3,Istanbul:2,Bismarckian:1,Philippi:2,exalt:149,"multi-crystal":1,Bartoli:2,Castrol:2,Nail:2,Biologicals:2,Cima:2,editorials:4,boxed:17,sloganeering:8,Tampering:8,Britannica:2,boxes:4,ginnin:8,bastards:4,Liverpudlians:28,Trump:2,LeVecke:2,"non-Catholic":40,"summer\\":1,proofreading:8,"individual-investor":22,aimed:54,Sybil:2,Caldwell:2,Ayer:2,Datsuns:28,affied:16,Banque:2,denies:20,"do-it-yourself":1,conservationists:4,"Ex-Premier":2,Palmero:2,filming:8,Tragically:6,denied:54,wineries:4,Mitsuru:2,Cross:11,posh:1,copiously:6,pose:95,confer:42,Methuselah:59,"sporting-goods":152,post:897,Poyner:2,chafe:149,rearrange:39,rallying:5,Einar:2,"integrated-technologies":4,Malmros:2,months:4,accepts:20,sizzling:13,Cheetham:2,incur:42,extrusions:4,"military-service":1,"non-books":4,float:182,gearing:8,PUNITIVE:1,Bidard:2,"zero-coupon":3,retrenching:21,Taos:2,strangely:6,wan:1,Postels:28,Specifications:123,Grubman:2,truncated:14,Africaine:2,"Pa.":2,way:163,fulminations:4,Elena:2,innovators:4,was:898,Landowners:4,"top-grade":1,"broad-nibbed":1,Nalbone:2,becoming:55,sundry:1,forgetful:1,mysterious:1,Belleville:2,"frost-bitten":1,comprehending:8,bypassing:8,Reykjavik:2,"anti-hypertensive":1,invincible:1,Witherspoon:2,flirtatious:1,Seisakusho:2,attuned:14,Lautner:2,emit:42,promises:72,"Mfg.":2,Rona:2,Rong:2,muscular:1,assassinations:4,moors:4,promised:85,Milacron:2,"Bendix\\/King":2,"non-economists":4,"loan-defaulters":4,Donald:2,"fair-sized":1,autonomic:1,brothers:4,"multiple-choice":1,juices:4,Hillsdale:2,"Pre-trial":1,reflexes:4,Morishita:2,"red-tailed":1,Dalian:2,paces:4,necessitates:20,Rachwalski:2,pacem:64,necessitated:54,precedent:22,paced:32,Goldome:2,"anti-state":1,Gotham:39,Gevergeyev:2,"thrift-fraud":3,Disclosed:17,reigniting:8,"small-diameter":1,"A.W.":2,Cadiz:2,certainly:6,factories:4,"mail-processing":1,kennings:4,Solna:2,"seven-shot":1,compensate:42,unhappiest:51,"gelatin-like":1,southwest:899,Segundo:2,Arbitraging:8,diddling:8,"high-water":1,ferociously:6,videocassettes:4,hotly:6,"stolid-looking":1,Jersey:2,Rak:2,consorted:16,respiratory:1,Leningrad:59,presented:54,respirators:4,Nakajima:2,Duchess:2,Lobbyists:4,"full-grown":1,Trempler:2,"car-care":1,"self-insure":33,Croissier:2,Finding:229,helpless:1,perusing:8,Teito:2,enticing:30,LEADERS:4,"three-page":1,COMPANY:47,Wherefore:773,uniform:22,Fahd:2,Prizes:111,Demonstrating:8,illustrations:4,"time-consuming":1,Along:206,dental:3,Minorco:2,Molten:1,frothing:55,Summa:2,Experiencing:8,mellifluous:1,Yucatan:2,Harch:2,Raw:1,"re-examine":39,Slope:2,Alix:2,concurred:32,flames:4,"sold-out":1,Rivers:41,flamed:32,Blackboard:2,IND:2,Rivera:2,INB:2,INC:2,snatching:8,fundamentalist:3,"bar-staged":1,"Tic-Tac-Toe":2,sufferers:4,capacious:1,"plastic-products":4,Orchestre:2,Maung:2,bluffing:8,Tokio:2,ripening:30,Belorussian:2,balking:8,selects:20,"auto-sales":4,dramatizing:8,F:429,Orchestra:11,Inspired:17,Hachiya:2,throbbed:16,CAT:11,SARK:2,PIPELINE:2,migrants:4,Prix:2,Moe:2,"pink-cheeked":1,heart:275,hears:20,attribute:256,stoutly:6,heare:149,heard:54,Stephane:2,Sasea:2,Multinational:66,"war-time":1,scrimmaged:16,"White-collar":1,dispositions:4,SONG:11,unwritten:1,Lillian:2,Gain:169,"Radio-television":47,Gail:2,"over-magazined":17,nonstop:34,"post-fray":6,whacked:32,Always:150,"bi-polar":1,residues:4,pasting:55,Robles:2,"betel-stained":1,Viet:2,"non-toxic":1,View:11,"High-Grade":2,affronting:8,accelerates:20,beam:25,Toss:39,trumpets:18,MultiMedia:2,accelerated:81,reaffirmed:32,LeSourd:2,worsens:20,Tose:2,Impressed:17,Recovery:11,"non-subsidized":1,Texoma:2,displayed:54,Acushnet:2,bewitching:8,playful:1,Genetic:40,statistical:1,Combses:28,forma:64,Wain:2,hewed:32,forms:18,exacerbates:20,unlovely:1,Yizi:2,"explains.":20,"newspaper-industry":1,chattering:55,pruned:54,"risk-fraught":1,Vasquez:2,rake:44,fuzzy:1,brutes:4,transmissions:4,prunes:4,unimpressive:1,Pacwest:2,"balance-of-payments":152,enacted:54,"done-unto":1,Musicale:2,ENGLAND:2,Uhles:2,"now-infamous":1,bursts:18,Robby:2,INTERPUBLIC:2,"anti-morning-sickness":1,"flood-ravaged":1,Victoire:2,carryovers:4,"brown-black":1,Abra:2,pills:4,Sedona:2,"hand-held":1,"higher-caffeine":1,defendants:4,Masque:2,whitewalled:1,looking:5,navigating:8,Corbehem:2,"Mo.":2,Spitler:2,VAXstation:2,Alcoa:2,Menahem:2,"Chinese-American-Canadian":1,Boxwood:2,Broadway:11,repurchase:900,plodded:32,"zig-zag":33,Calloused:1,Hillhaven:2,PIPELINES:28,selections:4,"trade-clearing":1,Herbig:2,"double-edged":1,Likins:2,Detailed:17,"rum-tum-tum":1,Hungary:40,profess:149,warning:21,Tregnums:28,sarcastically:6,Lojack:2,"KLM-controlled":1,"wage-earning":1,enjoining:8,Dares:2,directly:6,Bentleys:28,deadlocked:14,weds:20,slaked:14,avail:25,Millipore:2,Investigations:92,cortically:6,collimated:17,Prepared:1,Hachette:2,tragic:3,expounding:8,prescribers:4,Shutter:2,Osterman:2,stratospheric:1,Coors:113,Euphoria:2,indisputable:1,tokenish:1,Mears:2,"index-related":1,Toyko:2,Wambui:2,Commissary:2,Perot:2,Ginghams:4,"punched-card":1,movingly:6,Kingsville:2,Therapeutics:111,surfeited:17,Purdy:2,investors:57,Philadelphia:2,slap:63,Perella:2,ideologists:4,slam:24,Main:40,slab:22,Naples:2,SEEKING:8,LOSSES:4,overcoming:8,"fiber-reinforced":1,"hide-out":3,tigers:4,Garpian:1,Wappinger:2,Pachyderms:28,Mackinack:2,"common-sensical":1,Constantine:2,"three-times":1,underemployed:1,Constantino:2,Truman:11,Steamed:17,renal:1,appraisals:4,polyvinyl:22,Vader:2,"stop-shipment":1,Goldberg:2,hurled:32,Preface:2,typically:6,jewelers:4,resurrecting:8,molars:4,Femmes:2,Pascal:2,fifth:34,upgrade:520,scatterbrained:1,stained:81,jolt:25,overruns:4,Majdanek:2,only:591,Inuit:2,blockading:8,Fuhrmann:2,phased:54,televisions:4,Camp:11,Evident:1,cannon:19,rehear:39,Pauson:2,truly:6,loath:1,cannot:190,symmetrically:6,unfastened:16,manuscripts:4,celebrate:42,disentangling:8,Fehr:2,morphophonemics:4,Kanter:2,preempt:39,Encouragement:11,keyed:14,overworked:14,losers:4,"pre-cast":1,"S.A.F.E.":2,Arbor:2,Hauer:2,WPPSS:2,Crew:47,elected:81,Naiman:2,afoul:6,hell:235,culpable:1,Veilleux:2,sport:779,Cree:2,symbolists:4,swankier:12,disppointed:1,momentoes:4,Mikhail:2,Minero:2,between:206,snuffboxes:4,"H.E.":2,Minera:2,"government-insured":1,"import-restricting":1,Target:11,Roulet:2,queerest:51,Burmese:901,"re-educate":39,perceptions:4,reinterpreted:17,hypoglycemic:1,enabling:8,Okasan:2,"buy-back":226,"home-produced":1,underwritings:4,Viale:2,Englishman:11,Viall:2,Eager:66,Journalist:2,Midwest:902,Anatol:2,reliables:4,Depending:8,informed:45,markedly:6,maladroit:1,Melanie:2,Schools:46,informer:1,Gortari:2,patriarchal:1,Berth:2,Berto:2,Posts:109,Berte:2,abridging:8,"pilot-dominated":1,realities:4,Arterial:1,Arbitrary:2,prehistoric:1,LEHMAN:2,these:246,wealthiest:51,accommodating:8,trick:25,Scorecard:2,crumbly:1,jaywalkers:4,Bussey:2,erned:16,MKI:2,"Heigh-ho":106,canceled:834,Nissho:2,eras:4,Gyula:2,Flugel:2,thrills:18,"short-sell":39,"remote-control":1,unshakable:1,Muni:1,Whiteleaf:2,Munk:2,"dead-eyed":1,intelligently:6,figuring:8,Caron:2,Carol:2,Meriwether:2,numerals:4,ominously:6,closest:51,"salmon-colored":1,"universe-shaking":1,ELECTIONS:4,favorites:4,Dasibi:2,Enoch:2,racketeering:21,mistrials:4,"vertical-restraints":4,nobly:6,complained:32,Makro:2,AVOIDED:16,cockier:12,alfresco:34,Aida:2,recurrently:6,Tektronix:2,severe:1,"take-or-pay":1,peripherals:4,Aids:18,"yellow-gray":1,Premner:2,schoolers:4,"household-type":1,entertainments:4,"Nassau-Suffolk":2,transmitting:55,shouts:72,Reuven:2,Examination:47,imparting:8,Liang:2,ounces:91,crimsoning:8,"crime-ridden":1,Asilone:2,Davidow:2,mirrored:54,Adriatic:2,Technik:2,Koor:2,Spielvogel:2,Koop:2,Abruptly:6,Knuettel:2,spectacular:1,"dollar-priced":1,repetitions:4,Headquarters:443,stools:4,Project:11,Bakery:2,overlooks:20,SHOWY:1,coolants:4,recipient:3,Creditors:4,Photek:2,Lubell:2,Smaller:12,Southhampton:2,utterances:4,Forecaster:2,collective:3,Langeland:2,Agro:2,Agri:2,"parental-leave":1,Mare:11,Schmotter:2,Mara:2,circumscribing:8,Marc:2,Sokolsky:2,Mark:128,Mart:2,"floating-load":1,Comdisco:2,Kleissas:2,Marr:2,Mars:2,Marx:2,enacting:8,DHAWK:2,"government-approved":1,passions:4,Fiber:11,Khrush:2,Lilliputian:1,Yakima:2,rubfests:4,"On-Target":2,"business-telephone":1,Ranks:2,reverberating:8,Smart:40,Pincavage:2,Ricci:2,unplumbed:1,Spokane:2,Stranger:12,equivalent:22,Ponchielli:2,balked:32,Lateiner:2,leftover:1,habe:64,"electric-utility":3,confederations:4,Marcellus:2,"NBC-TV":2,"sabers-along":127,tremendous:1,escalating:8,Spogli:2,Rushforth:2,Bags:4,sedulously:6,Ferrofluidics:2,Bagh:2,lob:39,supervising:8,log:44,ChemPlus:2,"by-laws":4,Soyuzgoscirk:2,Philosophies:2,lop:1,Cookie:2,NUMBERS:4,lot:887,Shribman:2,"focus-group":1,Tsarism:2,seismographic:1,axioms:4,drains:18,Slovenian:1,"Booz-Allen":2,Tillich:2,"Deposits-a":903,Ragged:1,Rence:2,Stalk:2,proclivities:4,Stale:1,Renck:2,Kornick:2,bellows:904,Coal:11,Century:11,interiors:4,Airlie:2,Pogue:2,McCarthy:2,"second-consecutive":1,Boarts:2,Confuted:2,Williamsesque:1,beliefs:4,"RU-486":11,illnesses:4,Judges:92,Asks:20,statesmanlike:1,"alternative...":102,Seaborg:2,Ponkob:2,Junor:2,Aska:11,trickled:17,"N.E.":2,corporatewide:1,Adonis:2,masers:4,"Nazi-minded":1,milking:8,woeful:1,Intense:1,Tegretol:2,COPPER:47,"non-direct":1,Country:11,peas:4,preconditions:4,peak:205,"turnaround\\/takeover":12,"single-B-plus":1,Pharmacies:4,tendencies:4,fiscal:94,assert:42,Tropics:28,requisition:25,Jimenez:2,"chauffeur-driven":1,Gorshek:2,detonating:8,"side-crash":1,"November-December":2,"quake-related":1,publish:42,copyrighted:17,rectlinearly:6,Renton:2,Potpourri:4,victoriously:6,"missile-type":1,fizzles:20,glitzy:3,backpedaling:8,"Marie-Louise":2,Nowacki:2,pretreatment:439,Ella:2,Elle:2,foster:83,erects:20,fizzled:32,Costar:2,dominated:54,Passavant:2,Alligood:2,Appealing:8,Posix:2,Bowling:2,deficient:1,Barnett:2,Waltana:2,Oakes:2,"Reyes-Requena":2,libeled:17,relenting:8,trumpeting:8,vulpine:1,cookies:4,"code-named":798,palazzos:4,somberly:6,WHOOPS:2,unheard:1,decriminalized:14,"above-normal":1,promotes:20,MARKET:11,gether:39,insomniacs:4,Totally:6,acknowledgments:4,Cambrian:2,dolledup:1,tholins:4,Rowman:2,"round-table":1,invitational:1,Cane:11,Jews:41,Cano:2,vegetarian:1,Podgers:4,whine:25,Tucson:2,"pro-Gorbachev":1,threemonth:1,Milledgeville:2,Nelms:2,Madding:2,Gantry:2,fatuous:1,REN:2,lurked:16,Animal:47,gunmen:4,Studebaker:2,takes:20,relegated:54,"one-day":1,slants:72,abstaining:8,shotguns:4,"non-objective":1,"oil-producing":3,Ozark:2,Shahon:2,taken:905,Korando:2,"holier-than-thou":1,overbuilt:3,excuse:24,Castings:2,"J.A.":2,slouchy:1,RFM:2,gauche:1,"Australian-American":1,Diocese:2,latching:8,dromozoa:4,Privatization:47,Comfortably:6,geologically:6,Pentecostal:2,Hoexum:2,"anti-pollution":1,Munger:2,stinging:261,brazenly:6,Liberated:231,"three-sectioned":1,ectoplasmic:1,cows:4,magenta:3,species:19,gaffes:4,Federation:11,Polaris:835,exponentially:6,Daisy:2,"non-religious":1,Staunton:2,informants:4,Hanfsaengl:2,"coated-magnetic":1,beardless:1,dread:22,microseconds:4,banks:18,dispersing:8,dream:44,Dian:2,Dial:2,materialistic:1,Cartagena:2,"out-of-state":1,ascetics:4,Diaz:2,lasers:4,"Century-Fox":2,Advise:2,flimsies:4,"O.P.":2,Werkstell:2,Copyright:11,carpeted:54,Dunkin:2,flirted:32,LOBSTERS:4,undedicated:17,averts:20,Jeffersons:28,"Italian-based":1,Giacomo:2,groping:55,Desolation:2,HERITAGE:2,geopolitical:1,"Grants-in-aid":4,Thygerson:2,Senior:66,"profit-motivated":1,"three-man":1,finite:3,Thomajan:2,rots:20,imprisoned:45,"camping-out":1,occasions:18,Swenson:2,intervene:39,Astronauts:4,teas:4,Foreclosures:4,nonbinding:1,sketches:18,Aspe:2,Towson:2,outguessing:8,Peasants:41,undetectable:1,historicized:17,"fetal-tissue":3,sketched:54,handless:1,Martek:2,Clabir:2,unnatural:1,preserve:95,"Chenevix-Trench":2,Packing:116,Martex:2,outrun:196,Zeon:2,Auxiliary:2,ciphers:4,"Cleveland-Cliffs":2,algae:4,curtailed:54,"charcoal-broiled":1,perceptible:1,Batavia:2,concessionaires:4,maht:190,wiretaps:4,heartiest:380,blush:25,assign:42,Apollinaire:2,IIGS:2,buffaloes:4,heritages:4,Leish:2,knocking:55,IDEC:2,Judaism:2,"full-power":1,buffing:8,Reply:47,Centrally:6,Felons:4,Chilmark:2,guaranteeing:55,LOS:2,"under-researched":1,Goddammit:106,Transparent:1,selling:267,Lummus:2,Marques:2,"less-ambitious":12,Marquet:2,authors:4,Marquez:2,Algol:2,"most-livable":51,Brannigan:2,"transistor-radio-sized":1,anticipate:42,Ricoh:2,oystchers:4,Tendered:1,Skittish:1,obfuscate:39,"anti-Kennedy":1,Defendants:4,udders:4,Haney:2,Regains:20,Hanes:2,urgently:6,"back-yard":3,towardes:127,Transcendentalists:28,cumbersome:1,unfocussed:17,Rushmore:2,constructions:4,Pamphili:2,Milbankes:28,"N.L.":11,Allons:64,expansionist:1,camouflage:25,Venusians:28,Saison:2,LLerena:2,"hell-bent":1,Developments:41,Klineberg:2,"flotation-type":1,promiscuous:1,unifications:4,"double-billing":8,plunder:25,Evaluating:8,Concepts:130,"hands-on":1,Barnhill:2,Bridge:11,puddings:4,Schreibman:2,Institutional:66,exempts:20,Sheik:2,contradictorily:6,prettier:12,reground:1,Springs:130,Fredrick:2,Fredrico:2,Blondes:130,humid:1,Gignoux:2,"first-period":1,registers:18,renegotiate:39,pocketed:32,Postbank:2,Algom:2,Surcliffe:2,northern:1,scrimped:16,"tack-solder":39,Caravans:28,grandiloquent:1,Lyonnais:2,scooted:16,policing:55,dominant:1,Notes:56,imparted:54,speckled:1,reneged:16,"conflict-of-interest":22,speckles:4,"G.J.":2,Noted:1,Abdallah:2,catches:72,Matra:2,toothbrushes:4,Arnault:2,"key-punched":1,catchee:39,recommendations:4,Noteware:2,overtaxed:7,Limerick:2,slavishly:6,cavorted:16,irredeemably:6,Rosen:2,schizophrenic:3,Roses:28,Mutinies:4,Cheyenne:2,plummeted:32,precursors:4,lynched:17,embarking:8,McSorley:2,"Papa-san":2,plush:3,assertive:1,Lisbeth:2,TeleCable:2,conditions:4,Aristech:2,Golfers:2,statistically:6,unconscious:3,eluates:4,endogamous:1,Althaus:2,dally:39,Muench:2,hardline:3,LDCs:28,Mardi:2,AMVISC:2,prepubescent:1,Fireside:2,"Program-Trading":1,Fogle:2,Sherlock:2,undigested:1,PlanEcon:2,puritan:1,longerterm:1,cavalrymen:4,Consortium:11,"Diggers\\/Noise":2,Riesman:2,"customer-inventory":1,TML:2,persecuted:17,Moulins:2,stamp:25,dams:4,damp:50,Henrik:2,Ajax:2,damn:906,Royale:2,Warner:2,Takashi:2,TALK:11,generating:55,Koninklijke:2,regroup:42,"co-sponsoring":1,squabbled:32,storylines:4,heute:64,squabbles:4,assigning:8,dialing:55,Yunian:2,Taste:169,socialist:3,megawatts:4,rope:25,Alfonso:2,equityholders:4,Planck:2,Alfonse:2,Celestino:2,wherever:293,"Frog-marched":1,requisitioned:32,Hamlin:2,commonly:6,Esquire:2,"highest-paid":1,Cosby:2,Teen:111,"K.J.P.":2,flatcars:4,predominated:16,hocking:8,solarheated:1,Philharmonique:2,conflict:44,Treating:8,covetous:1,Polimotor:2,jackbooted:1,Glendale:11,"C-141":2,idling:55,herewith:6,older:455,docked:17,reclaim:42,olden:1,weakest:51,returns:18,bondholders:4,Pedigree:2,Reeve:2,Groused:16,"SYDNEY-Qintex":2,fertilizing:8,cocky:1,Deputies:41,Prenatal:1,uselessly:6,Citadel:2,Hosokawa:2,"red-brick":1,ASKS:20,swallowing:8,Hoelzer:2,"middle-ground":1,exercising:55,lobstermen:4,"Large-screen":1,Treasures:4,Bancshares:111,ballots:4,remaining:30,Meritor:2,Boehringer:2,Coplandesque:1,lacking:30,Apostolakis:2,"over-subscribed":1,reptilian:1,Stretching:8,Suisse:2,Copernican:66,"K.G.":2,wiser:136,Hulings:2,wings:4,"Kelsey-Hayes":2,marvelous:1,stimulatory:1,"day-care":22,Sportsmen:4,Finn:2,Fina:2,"higher-priced":200,Fine:209,Find:42,Fing:2,Harkess:2,dizzily:6,skimpy:1,"software-development":22,markka:907,Suominen:2,BLOCK:2,distributable:1,garroting:8,funnels:4,Winters:2,Lynchburg:2,Kupelian:2,Eminase:2,Performers:4,Neill:2,infra:64,interpretative:1,Northerner:47,Neils:2,taboo:104,"sometimes-aggressive":1,uppon:325,misspent:17,bourses:4,whittled:17,Macfadden:2,"one-term":1,"on-the-scene":3,miracles:4,DiLuzio:2,dangle:39,panders:4,within:206,smelly:1,smells:72,behaving:8,"one-horse":1,Keys:2,liniments:4,deodorant:22,Trovatore:2,Pennsauken:2,Gigot:2,"motors.":4,Katharine:2,Katharina:2,Hudbay:2,Stepanova:2,rummage:39,branchline:1,duly:6,collapsed:85,hairyknuckled:1,Tommy:2,properly:6,"photo-offset":1,Switzerland:11,Quixote:2,Schott:2,"Hartford-based":1,Imreg:2,"low-quality":1,Haigler:2,"foreign-sounding":1,"coast-to-coast":1,"tube-nosed":1,responsively:6,Florence:2,Siano:2,intermodal:1,"Nickel-iron":1,Viennese:1,Nuovo:2,Daralee:2,"higher-ranking":1,proteges:4,"national-priority":1,unwise:1,upended:1,Spartan:129,dynodes:4,spokesmen:4,resistances:4,nabbed:17,Yehuda:2,Pottery:2,Snapped:16,Yehudi:2,jesting:8,"gay\\/bisexual":1,Underperform:2,Italics:4,Peterman:2,potentialities:4,constitutions:4,"no-fault":1,ruthlessly:6,Automatically:6,independently:6,Statues:4,Makepeace:2,Wissahickon:2,Gabrielle:2,banishing:8,Village:11,payables:4,dermatological:1,Sunkist:2,hyaline:1,"fixed-rate":3,Gerraughty:2,Dortch:2,Molinaro:2,McEnany:2,desserts:4,Crandall:2,"Houston-based":66,IMREG:2,excludes:20,stave:39,"President-elect":2,Plazek:2,Registry:2,excluded:54,Rifle:11,cluttered:14,Herridge:2,Euroconvertible:1,Irvin:2,flicker:25,Reorganization:2,murderous:1,jinxed:17,Histories:2,valued:81,muzzled:17,"now-vacant":1,Argumenty:2,Peony:2,mercurial:1,Blitz:11,laundries:4,assignments:4,Rosburg:2,Amcap:2,Babies:123,regummed:16,"Hoylake\\":1,boots:4,waking:30,Steinbrenner:2,picked:706,zu:64,Solesmes:2,brokered:103,Davila:2,Fueloil:2,paintings:4,Cordoba:2,Ligachev:2,flicked:16,Nishima:2,Goldfein:2,"Saudi-American":2,Nishimo:2,"knobby-knuckled":1,Consonantal:1,Armani:2,Our:35,Bateman:2,redrawn:1,Armand:2,thermocouples:4,lorries:4,indivisible:1,Likewise:6,haunts:18,McCartney:2,nameless:1,Out:221,Planned:2,deterrents:4,felled:54,terrorizing:8,collaborating:8,"oil-lease":1,"Consulate-General":2,surpluses:4,Henning:2,truckloads:4,announced:112,unpleasantly:6,"Cash-strapped":1,Leng:2,agreeably:6,Lend:216,Autozam:2,"all-expenses-paid":1,"muscle-shaping":1,Leno:2,Sonntag:64,Lens:2,frogs:4,Membership:11,cheeky:1,ASPR:2,Lent:157,agreeable:1,Leny:2,cheeks:4,Lubar:2,"Chill.``":133,"Semple-Lisle":2,Legs:4,disabling:8,"Princeton\\/Newport":11,northers:4,"well-intended":1,Wilmer:2,"semi-precious":1,"Free-Will":2,"m.p.h":163,Valrico:2,TURNS:20,Trizec:2,Grazie:2,antithetical:1,"still-dark":1,Kropp:2,Godfather:2,Astros:111,titre:64,Moises:2,reestablish:39,circular:3,Widuri:2,"anti-organization":1,Joel:2,yogurts:4,"real-estate-asset":1,Joes:4,"heat-resistant":1,Gosplan:2,Eckersley:2,Isola:2,"day-today":1,"fixed-income":22,While:127,lordly:1,contraceptives:4,Politics:908,Who:909,fracases:4,Ceylon:2,slickers:4,Crewmembers:2,Final:66,Lewelleyn:2,Finan:2,Body:11,leprae:4,outer:1,Saatchi:113,guerrilla:22,downgrading:21,Conroe:2,Quintus:2,"write-offs":91,Bode:2,"video-cassette":3,Celtic:66,belatedly:6,Primate:2,enshrouds:20,Dissect:39,"loose-jointed":1,"back-lighted":1,"MiG-29s":4,"index-fund":3,Tupper:2,hands:18,documented:54,handy:1,Tiernan:2,Marginal:1,Accessories:123,"write-down":25,crossing:55,uncaring:1,noneconomic:1,illuminate:39,voyageurs:4,Lewellen:2,Representatives:41,Liberty:11,Santacruz:2,Matlowsky:2,margins:4,steadier:12,offsetting:30,Gubers:2,Whitford:2,Straszheim:2,Adolph:2,Corzine:2,remiss:1,wondrous:1,Jameses:2,Umberto:2,"L.S.U.":2,"liquidity-enhancing":1,humiliating:1,Museums:57,Carmelites:65,unliterary:1,"banking-related":1,Summerdale:47,hostile:3,PLAYER:2,"Euro-watches":4,counterpart:22,intoxicated:1,Finanziario:2,Finanziaria:2,Reider:2,Maize:2,swapped:54,disembodied:1,"manure-scented":1,stultifying:1,Chewing:8,Parfums:2,Hines:2,Eurodollar:213,practitioners:4,paves:20,Inauguration:11,Nichol:2,Tomilson:2,Spelling:2,perfectly:6,Fitzsimmons:2,paved:103,Lundberg:2,"a-crowing":8,"Panama-based":1,approachable:1,jauntily:6,comported:16,acceptable:1,precursory:1,Mishkin:2,Piscopo:2,"cash*/NN-flow":1,Guzman:2,soviets:4,Mattausch:2,"baby-boomers":4,Reviewing:8,Casper:2,Lima:2,Joban:2,Franciscans:130,Lime:40,Libyans:28,Kahiltna:2,BAII:2,emptying:8,Lance:2,saintly:1,"real-analytic":1,arrogate:39,ephemeral:1,Billie:2,Jaworski:2,clodhoppers:4,legislatively:6,Provident:2,Granny:2,Decorating:8,lectures:18,Mindy:2,"spine-chilling":1,Minds:28,intentions:4,moths:4,lectured:32,Enter:39,Jenrette:2,Hypotheses:28,Bugle:2,Pummeled:17,isotopic:1,Boatmen:41,Bruxelles:2,Nantucket:2,Punitive:66,Larimer:2,wealthier:12,"transportation-where":910,Acts:28,brewers:4,halfbacks:4,requsting:8,partners:4,Evershed:2,dramatize:42,chromatics:4,hopeful:3,"debt-ridden":1,quadrennial:1,craving:21,dreamers:4,Checkrobot:2,infernal:1,"billion-pound":1,Insinuations:4,eulogizers:4,Midi:2,sprouting:55,Burckhardt:2,Broil:39,Brodbeck:2,Narrow:66,"Italo-American":2,circumvents:20,endless:1,gray:3,processes:18,Eurocommercial:1,Jiri:2,"wheel-making":1,quarantine:39,"single-home":1,Margenau:2,evaders:4,overflowing:8,Impossible:1,grab:551,"Gnu-Emacs":2,"pen-and-pencil":1,trilateral:1,Banning:8,humane:1,Interior:835,Seconds:4,"pre-Vatican":2,Magnetism:2,allotted:54,Technician:11,Monogram:2,"three-sevenths":4,buckets:4,Sri:2,Spethmann:2,recessions:4,Ring:11,Stygian:1,Flock:2,psychotherapeutic:1,Isaacs:2,"above-average":1,Strolling:8,presentations:4,admit:42,Egerton:2,skindiving:8,Foncier:2,Woody:2,"surface-declaring":1,vielleicht:64,spewed:32,"re-instated":17,"Pap-pap-pap-hey":106,distinguish:42,Acquirers:4,unselfishly:6,quit:373,speakin:8,Legittino:2,overthrowing:8,quiz:25,quid:147,dwarfs:72,Quesada:2,corresponding:13,negligently:6,schoolgirls:4,pie:911,gouged:16,And:596,encircles:20,DRAMs:57,uncertified:1,Ana:2,Brasstown:2,intimidate:39,Fonda:2,Ann:2,Schiffs:28,"two-career":1,Delmed:2,encircled:187,"service-sector":1,Fonds:2,Any:246,coddled:17,Beyer:2,"D.D.":2,unsheathing:8,"second-largest":186,"Europe-based":1,"specialty-cheese":1,capture:95,Hoenlein:2,Autocamiones:2,Beat:128,Beau:2,Sukarno:2,Bear:129,"sex-change":1,Beal:2,"infant-mortality":3,Bean:2,Attila:2,experimented:32,eccentric:3,Coral:2,Pour:2,Poul:2,privations:4,Unckle:2,Menlo:2,suborbital:1,frequently:6,endearing:1,Nyheter:2,stretchers:4,nebulous:1,Windy:2,drone:22,mixers:4,Stern:40,Winds:2,"risk-free":1,quavered:16,Patiently:6,enormously:6,Innuendos:4,Erskine:2,mistaken:14,Dalles:2,"non-resident":1,"B-70":11,foxholes:4,dost:33,"high-grade":1,Jacopo:2,Budgetary:2,Eggs:46,Turkish:66,Turbyfill:2,Pigs:111,Hombre:2,Aoun:2,clouded:81,"Diego-area":1,Programs:123,"all-female":1,Buckingham:2,Chipello:2,livid:1,Lithograph:2,formulaic:1,"scale-down":1,immediately:6,baptisms:4,sublimate:25,Evensen:2,"pared-down":1,Hyatt:2,politely:6,fingerprints:4,Nagy:2,Naga:28,Polish:253,"district-by-district":6,refugees:4,page:25,Takimura:2,uttermost:1,Californians:57,"pie-in-the-sky":3,"explicit.":1,URGED:32,Helicopter:2,peter:39,assisting:8,Colvin:2,weeknights:4,"?":60,hinder:39,Angers:2,coated:14,BDO:2,Pfaff:2,Revitalized:17,Thackeray:2,Tarboro:2,sheriffs:4,Clubhouse:2,repaired:54,Akiva:2,Presupposed:17,Pawley:2,"well-grooved":1,Drabble:2,"U-Save":2,eloquently:6,Flavio:2,equally:6,adopters:4,Pencil:128,"E.C.":2,autonomous:1,articulate:82,withholds:20,globalized:1,Keystone:11,finalizing:8,managing:5,Approach:2,Skiway:2,serfs:4,Enviropact:2,Toagosei:2,delusions:4,"Hoffmann-LaRoche":2,incompetents:4,California:40,hoofs:4,Bradford:2,revised:45,invent:42,Clozapine:2,collected:54,Rutgers:2,Magnier:2,Larish:2,courts:18,Larisa:2,eat:42,"Re-Birth":2,upwardly:6,Mylanta:2,Coughlin:2,Knesset:2,"brown-tobacco":1,Sharfman:2,Kristine:2,Barrymores:28,dibenzofurans:4,"Euro-playing":1,Women:130,strengthens:20,flecked:17,Spirits:46,Missett:2,tissues:4,upsets:18,utensils:4,Spirito:87,"Non-steel":1,BethForge:2,Orchestral:2,"class-action":3,RAVAGES:4,"three-to-five-year-olds":4,Gynecologists:4,"little-feared":1,onwards:6,Shales:2,"Chevrolet-Pontiac-GM":2,Fingered:2,Cheeseheads:4,talkin:55,prepaying:8,wouldbe:1,Neurosciences:2,astounding:1,whisperings:4,Toonker:2,dragoon:33,"dew-sodden":1,Thorne:2,undelivered:1,friends:4,yell:25,grunted:16,anacondas:18,Bockius:2,Rayburn:2,travelogues:4,rounding:55,Suchard:2,theretofore:6,Leftovers:2,Weingarten:2,disruptive:1,powdery:1,"four-year":1,chelicerates:4,powders:4,alders:4,transversally:6,Plate:11,Alesio:2,Plato:11,Plath:2,Job:11,Platt:2,"fine-grained":1,Apache:74,Software:11,comparatively:6,"Anaheim-Santa":2,aparently:6,Montrose:2,Patch:11,smack:912,govern:42,Outsiders:4,Discovision:2,"RTC-appointed":1,"school-district":3,vast:1,Ignatius:2,baking:21,strayed:32,Maggot:2,Mascotte:2,Thomae:2,panelized:17,Branson:2,martinis:4,Established:17,Caygill:2,Excellency:2,Galles:2,Saffer:2,Roehm:2,Newbridge:2,Ragalyi:2,implemented:54,Cinemax:2,Eventually:6,gawky:1,Mannington:2,inordinately:6,tirelessly:6,Minuteman:2,Wempner:2,Binghamton:2,Treybig:2,"Ave.":2,Greens:41,fueling:55,Greene:2,Bhirud:2,rods:4,brackish:1,dry:913,"intra-administration":1,Yooee:106,stiffing:8,suitably:6,taxis:18,ignoring:8,hokey:1,harass:42,Xtra:11,diagrammed:17,adopting:8,suitable:1,Tillinghast:2,reckoned:54,Wire:11,constrictions:4,flurried:16,Relations:41,Also:6,"grade-constructed":1,Microscopic:1,JUMBO:1,gorillas:4,Wiry:1,Journalists:57,multipronged:17,Crested:2,Downs:2,watering:55,"mass-audience":1,moored:17,"social-affairs":4,Bronfman:2,Chekhov:2,breeders:4,wary:1,Outing:2,"well-heeled":1,Tiananmen:2,lunge:39,quibbling:8,Ramo:2,"G.":2,ward:25,"three-power":1,Kurosaki:2,fabricators:4,candies:4,Fellowships:123,Alcatraz:2,Antwerp:2,"full-length":3,ready:121,Homosexuals:4,ostrich:3,"people...":102,unforgettable:1,SLORC:2,aging:5,GQ:2,Truell:2,Nykvist:2,belying:8,fielders:4,faults:18,faulty:1,prefectures:4,"needle-nosed":1,Greenock:2,replacing:8,"postal-business":1,Richer:141,predominates:20,natch:106,THACHER:2,attempt:24,NORIEGA:2,vegetables:4,owls:4,fraudulently:6,Monroe:2,Clendenin:2,Ancient:40,Ptolemy:2,Javert:2,"retirement-savings":1,Lethcoe:2,"Florican-Inverness":2,befall:42,scorers:4,underenforces:20,GM:2,Karlheinz:2,experientially:6,frisky:1,"policy-oriented":1,Conversations:4,unexercised:1,"credit-quality":1,"low-profit":3,symptomless:1,persist:42,weeks:4,petulant:1,vivre:64,Pfizer:2,duodenal:1,unstylish:1,bronchial:1,"color-glutted":1,niches:4,Indio:2,prophetically:6,sleepless:1,India:2,"pre-crash":1,Claeson:2,mounts:18,Curious:1,bootleggers:4,operatives:4,messianic:1,objectors:4,EISA:2,bouanahsha:64,marital:1,glinting:8,stealing:5,shirking:8,"first-class":3,Saundra:2,Marvellee:2,typecast:39,"non-scheduled":1,gradient:22,tales:4,"secretary-general":22,Phedre:2,Jenkinson:2,revolving:199,DLC:2,Comstron:2,guiding:30,cutest:51,Halkett:2,DLJ:2,enclosing:8,Izquierda:2,aboriginal:1,Repeat:25,Bache:2,struggle:24,inadequately:6,DLX:2,unconditioned:1,Curt:2,cookbooks:4,Clinton:2,Beaulieu:2,"science-watchers":4,scrounge:149,Cury:2,"half-blood":1,Curl:2,Homicide:11,Gems:4,naughty:1,reassure:39,Sobibor:2,MATERIALS:2,radiate:42,Hoare:2,runways:4,neuromuscular:1,Pirko:2,dumbfounded:7,Liability:47,Nuttall:2,halted:914,Press:128,dwell:149,Producing:258,invalids:4,outputting:8,bouncing:55,gambled:17,gambles:4,boarding:55,Eddy:2,Thoughts:74,laypersons:4,exorcise:39,Movements:4,sees:20,seep:42,quench:39,rechristens:20,Billiards:11,"longer-term":200,seed:855,ergonomics:4,seen:45,seem:42,"exchange-rate":22,seek:42,ACQUISITION:47,rangy:1,bogies:4,Lorex:2,Dunlap:2,floppy:1,Jaguars:28,Nationalists:28,"re-scheduled":17,Wozzek:2,transnational:1,Shrugs:2,Treadway:2,"Ark.-based":1,Loren:2,"Studds-Miller":2,Scheetz:2,Journalism:47,mashed:17,Incidentally:6,Roommates:4,"mid-August":11,Brusca:2,Reached:17,Optics:2,treasonous:1,Attorney:2,doi:64,don:182,doo:25,alarm:25,dog:78,orthophosphates:4,Erskin:2,dot:24,Orrick:2,planetary:1,amending:8,sows:72,Colbert:2,sown:17,sneaking:8,Macho:64,clannish:1,"long-considered":1,representing:8,ingloriously:6,Deductions:4,"variable-rate":1,folks:4,Eurotempo:2,Duvalier:2,disconnecting:8,hollers:20,Mainland:40,Carnival:11,rejoicing:55,overflows:4,convulsed:16,Umberson:2,"nearly-30":1,tiled:7,slanderous:1,Nilson:2,Voting:321,scudding:8,Torbjoern:2,"H.M.":2,Over:124,internationalized:17,reawakening:8,"far-right":1,LeBow:2,rival:255,BancNewEngland:2,Inspects:20,Bovin:2,Warnock:2,Hospital:11,Burch:2,exhibitors:4,Playwrights:2,civilizing:8,Putnam:2,Monier:2,Hewlitt:2,Baraclough:2,simplest:51,stoking:8,Bourke:2,crayons:4,Central:860,"Ex-Oriole":2,Luftwaffe:2,Arpino:2,"scaled-back":1,"once-a-day":1,worksheets:4,laze:39,maneuvers:18,swoops:915,Supported:17,und:147,une:64,"once-popular":1,Syrian:1,Carlisle:2,Compact:2,Corelli:2,Indicted:17,"non-mega":1,COMMERCIAL:117,offerings:4,Though:316,nilly:6,Monster:47,paralyze:39,Treasurer:2,Woolsey:2,replicate:39,Schweiz:2,Interbank:2,"S.K.":2,chug:33,"arbitrage-related":1,"lightning-quick":1,Espinosa:2,"L.P":2,spherules:4,"block-grant":3,personally:6,NCNB:2,ASKO:2,Advertiser:2,sanctum:64,styrenes:4,Isodine:2,bloomed:16,Tearle:2,singsonged:16,"long-overdue":1,Rickards:2,ritorno:64,"lever-action":1,Jeffrey:2,Paxson:2,Ruthann:2,make:182,Voorhees:2,Shorting:21,Puente:2,showmen:4,unfortunate:3,"get-out-of-my-way":1,Cibula:2,filtered:14,maku:64,Dappertutto:2,sodden:1,sanitationists:4,harbored:54,"human-rights":593,Domaine:2,Englund:2,vibrated:16,"shot-up":1,waggishly:6,"not-for-profit":1,glimmers:4,materials:4,butted:17,ballgowns:4,unglamorous:1,Hypothalamic:1,Hedges:2,Pastor:2,Immune:2,Skywave:2,Fininvest:2,transforms:20,Corinthians:111,tattooed:17,Exponents:4,impending:13,buyers:4,legion:3,Judiciary:2,"far-from-conciliatory":1,magistrates:4,Condliffe:2,Foxboro:2,"Jersey-Salem":2,Langstaff:2,"leading-edge":1,"Panet-Raymond":2,Calvinist:2,Support:11,stimulators:4,Roberta:2,reuse:39,unreeling:8,Roberti:2,Roberto:2,Governed:1,Oppenheimer:11,perfunctory:1,gyrating:8,dreamy:1,diapiace:64,"other-directed":1,Governer:2,dreamt:32,dreams:18,shoulder:486,Metallurgical:2,"high-technology":22,Capitalists:28,Throneberry:2,arrivals:4,Welland:2,intermittently:6,"aluminum-hulled":1,Eljer:2,"Non-executive":1,"out-of-staters":4,"On-Broadway":2,Catfish:2,"short-term":916,Saintsbury:2,participations:4,grading:55,Fink:2,Sanka:2,Kilpatrick:2,Surmanek:2,trunks:4,Toying:8,Konheim:2,Youngish:1,meanings:4,"dowdy-looking":1,Participating:8,Leibler:2,"nightgown-clad":1,"one-of-a-kind":1,Cunin:2,Scollard:2,"M-Whatever":11,ungratified:1,conceal:39,lathered:54,fasciculations:4,Lynne:2,restate:39,"monetary-damage":439,Asada:2,fatalists:4,Handguns:4,shippers:4,diabetics:4,Barbariccia:2,Extended:157,Eckhard:2,illustrious:1,catalysts:4,inspected:54,lampoon:39,"roof-crush":1,counterproductive:1,"communication-service":1,Tidewatch:2,disarmingly:6,Nagano:2,Brascade:2,Theology:2,cutlets:4,readmit:39,lows:4,surrender:24,Interactive:40,Golden:40,benchmarks:4,Suffer:39,originating:8,morphogenetic:1,Bullish:66,infections:4,lingers:20,bloodstained:1,Stratagene:2,claimants:4,Mayer:2,"hot-air":1,Jolas:2,discriminate:392,clingy:1,offputting:1,EAC:2,preconditioned:32,clings:20,"eco-evangelists":4,"golden-parachute":1,"Colo.":2,matriarchal:1,Township:2,voltaic:1,Samaritans:4,refining:21,delivered:54,aurally:6,Rensselaer:2,Glossy:1,"coat...":102,"investment-tax":1,Yoshiro:2,describing:8,grapevines:4,slayings:4,Fairmount:2,outskirts:4,boondoggles:4,"non-credit":1,Color:129,Win:31,amniotic:1,Trotsky:2,Halfway:6,ABIOMED:2,unimpressed:1,auspiciously:6,managed:112,"Empire-Berol":2,Maddox:2,eldest:51,manages:20,claret:22,micrometeorites:4,"quasi-federal":1,Readings:4,Nutritious:1,Oberman:2,depend:42,unassailable:1,Painting:210,micrometers:4,Imperials:28,Insureres:4,Fly:39,"management-trained":1,Courtis:2,"full-range":1,Massachusetts:2,"Lieutenant-Governor":2,"Weingarten-Siegel":2,Adventures:56,Candlestick:2,tacos:4,soapy:1,forked:103,"far-reaching":1,jettison:39,freemarket:3,"acquisition-proof":1,"Walk-in":1,Nevah:2,"third-largest":1,Gassee:2,"whiz-bang":106,attracting:8,"ill-conceived":1,Shiites:28,Nusbaum:2,Heritage:2,Gro:2,"I.M.":2,"drought-inspired":1,sacral:1,Orthodox:40,phonographs:4,Brewing:2,reunite:39,sixfold:218,Traveling:229,scampering:8,promissory:1,unobserved:1,Buckra:2,Pulliam:2,Magnascreen:2,schooldays:4,"first-ever":1,"grade-equivalents":4,NMTBA:2,shift:44,Dantchik:2,sniggeringly:6,Aimed:17,Sacramento:11,Jno:2,Clipper:2,ALAMCO:2,adjustable:1,absorbers:4,Alphonsus:2,Feltes:2,hardier:12,"meal-to-meal":1,Felten:2,Joshual:2,Wallop:2,Wetherill:2,Tiempo:2,salting:55,"million-plus":135,CHRISTMAS:2,pelts:4,compactly:6,lessened:81,Sultan:2,Peronist:2,equipped:81,plantations:4,multitudinous:1,archaeologists:4,"non-mining":1,Montreal:40,Latest:51,Samovar:2,"harder-line":1,"out-of-date":1,Earthquake:47,reappear:149,"hard-riding":1,"IBM-based":1,"Rolls-Royces":28,Sharon:2,classrooms:4,Bogle:2,concocted:54,"Soviet-Korean":1,Forbes:2,battered:45,Brewers:4,BEAVER:2,spanning:8,Niciporuk:2,McCombs:2,"parental-consent":1,"free-choice":1,"penny-brokerage":1,traipse:39,Kalman:2,Maeda:2,Coke:11,Ginsburg:2,Akzo:2,Banana:2,propagandistic:1,Ludwick:2,periscopes:4,tatters:4,adamant:1,Thurber:2,McFarlan:2,Trojan:40,Schmitt:2,"long-deferred":1,"L-P":2,Graceful:1,BALLOTS:4,destructive:1,Adolescents:4,Trim:556,Viphakone:2,Trio:2,neck:275,pulsations:4,Trig:2,Trib:2,rarified:1,Hackstaff:2,Speedy:2,Tris:113,esters:4,Moeller:2,shield:25,Microsystems:111,availing:8,antifundamentalist:1,Dell:2,Savin:2,Believing:8,Covered:1,"tax-driven":1,Shtromas:2,WTV:2,"gold-card-carrying":1,"recession-proof":1,imbedded:54,clearest:51,WTD:2,Worthy:2,WTI:2,sensitized:17,Gascony:2,accusations:4,undisclosed:1,"rent-controlled":1,Lonesome:1,widespread:1,Investigators:123,Authorities:123,intertitles:4,Armored:2,Giancarlo:2,misgivings:4,"five-home":1,apprehensions:4,LAWSON:2,"Asian-Americans":28,noncombatant:1,Announces:20,Barilla:2,"Common-law":1,"thousand-fold":1,unlock:42,"high-set":1,befell:16,HiPro:2,Mayors:4,Announced:1,emerges:20,Abrahamson:2,"drunk-driving":1,Overreach:2,Everest:2,militarily:6,emerged:32,"wider-than-expected":1,Tokuyama:2,Fiering:2,trademarks:4,Bamboo:1,Licht:2,Solarz:2,whittle:33,Traverse:2,Being:210,Parris:2,headphones:4,"rapid-transit":1,Fairlawn:2,Orwellian:66,Referring:8,likelier:12,"Allstates-Zenith":2,commercialize:39,whippings:4,Grantor:2,Lyondell:2,Yan:2,Yak:2,"magnetic-tape-coating":1,brynge:33,singling:8,"tailor-make":39,mouthpieces:4,participates:20,"cable-television-equipped":1,modernist:3,JKD:2,Poldowski:2,participated:32,Councilwoman:2,COLOGNE:2,broadcast:917,senioritatis:64,ambulatory:1,HMSS:2,satirically:6,Dirty:1,"court-length":1,butt:918,ceramics:4,vacating:8,Backing:8,"efficient-in":919,Teresa:2,"around-the-world":1,encomiums:4,booted:45,Ayub:2,Ekonomicheskaya:2,Protectorate:2,overenforced:17,gathering:21,topics:4,"seventh-largest":1,nuisances:4,Meissner:2,"earth-orbiting":1,"parts-engineering":1,efficient:1,bawhs:4,"Sugarman-led":1,isolate:42,endangered:45,potential:3,Perfection:11,Investor:11,frolicked:17,"egg-hatching":1,"poly-unsaturated":1,gloomier:136,Jungian:2,Thorn:11,vitiate:39,Thorp:2,psychoactive:1,nonmythological:1,befouled:17,Hispanoil:2,Kolman:2,Amityvilles:28,Elmira:2,Statehood:11,Enclosed:17,stockings:4,Resuming:8,Mendelssohn:2,Herring:2,Parkhaji:2,dissecting:8,"investment-holding":1,navigated:17,Lespinasse:2,untold:1,"rate-mortgages":91,Hills:74,"long-known":1,Souths:28,dice:91,hares:4,"SIBV-MS":2,Splinting:2,Kiwanis:2,Studio:11,Campbelll:2,"K.L.":2,Services:41,"hand-squeeze":1,"patient-physician":1,ComFed:2,"steel-edged":1,"white-dominated":1,"longest-standing":51,bevel:39,Alusik:2,Amid:124,"out-of-pocket":1,Irish:396,Fighting:423,employers:4,Voronezh:2,chillingly:6,Rodney:2,straggled:16,Executives:56,Kanto:2,intuitive:1,frolicking:8,Cornel:2,Dookiyoon:2,Mundo:2,Corney:2,"limited-production":1,Mundt:2,Corner:11,"well-dressed":1,silently:6,verities:4,Utsumi:2,"re-emerge":39,"single-B-3":129,Ohkuma:2,Stanislas:2,Stanislav:2,Stanislaw:2,Jovanovich:2,chimpanzees:4,Heber:2,ruptured:81,affordable:1,LJH:2,Montesano:2,Mabellini:2,Symbolist:2,loonies:4,Quartermaster:2,Civilian:2,Karipo:2,Skolman:2,"Abortion-rights":152,bedraggled:1,SAN:2,motivations:4,Carolyn:2,tuck:149,"employee-bonus":3,"home-office":1,Felice:2,"slow-startup":1,"all-day":1,Borak:2,Silva:11,catbird:1,Paddle:39,jets:4,Crombie:2,unassuming:1,technicalities:4,"half-reached":16,slenderer:12,Ciba:2,Pavarotti:2,jaunty:1,"athletic-shoe":3,Luckily:6,elbowing:8,Newsday:2,shakers:4,Catheter:2,Leary:2,Gholamreza:2,educated:14,Siecle:2,Angolan:1,SAS:2,Ice:11,Learn:216,Kieran:2,Thiokol:2,Hydrochlorothiazides:4,Undergraduates:4,huckster:25,"sales...":102,"drug-dealing":3,Woos:20,conferences:4,ethically:6,"winding-clothes":4,relying:8,pressing:30,Palomino:2,Yurek:2,incubate:39,Ferembal:2,Toch:2,Acustar:2,"government-dominated":1,Nellies:28,"twenty-eighth":1,"Chernobyl-type":1,dishonorable:1,"N-W":2,finagled:17,Dunkelberg:2,McCrady:2,JAS:2,Softly:6,Lumbera:2,"Richmond-San":2,rivalled:16,Dedham:2,Naren:2,Workplaces:4,substantive:3,solve:42,Kogan:2,Ways:41,Pohlad:2,proximal:1,"half-reluctant":1,Sandwich:11,outranks:20,pile:24,FELA:2,Newcastle:2,Silverman:2,fifteenfold:6,heavies:4,heavier:136,homelands:4,Givaudan:2,Napoleonic:1,Wherever:293,"acid-fast":1,"well-to-do":3,Schemes:4,Lyrics:4,Characteristics:4,twin:3,serves:20,indisputably:6,Henze:2,either:920,served:54,tooke:16,"in-person":1,"Citizen\\/Labor":2,Fisons:2,BRIEFS:57,erase:39,sneaked:32,Telefunken:47,lackeys:4,pasture:70,matching:5,"half-faced":1,confirm:42,allegiances:4,Grusin:2,atheromatous:1,"impurity-doped":1,apocalyptic:1,Sakharov:2,"Neo-Popularism":2,"out-of-kilter":1,pretended:32,VISUALIZING:8,untamed:1,crafting:8,toymakers:4,Zenith:2,mixes:18,Pickett:2,Yvette:2,mixed:45,vincit:64,Mousie:2,provisional:1,"eight-bit":1,Branigan:2,RAND:2,Navajos:28,franchising:21,Meinung:64,"short-run":3,Isotechnologies:28,"U.S.-produced":1,Kokusai:2,"coal-miners":4,shells:4,Sagan:2,"Malaysian-based":1,Schweizer:2,Simpson:11,Arco:2,Arch:59,pretends:20,Artesia:2,Airport:2,dampers:4,storytellers:4,Treaty:2,Evanston:2,maskers:4,"A.B.":11,Kirkendall:2,pitting:8,Societa:2,"Soviet-accredited":1,"plant-vaccine":1,Societe:2,Curteis:2,Society:11,uninhabitable:1,Pollak:2,hated:85,surimi:64,Bragg:2,planets:4,"ever-vigilant":1,film:25,fill:95,tedious:1,wieners:4,amendments:4,Metruh:2,keynote:256,personnel:93,Toyotas:4,repent:42,supplementing:8,Resolves:28,Landesco:2,Riders:111,"computer-generated":1,hemorrhages:4,Townes:2,"forbidding-looking":1,Nordstrom:2,important:1,Brudzinski:2,Marwick:2,Rehabilitation:2,barometers:4,hemorrhaged:17,Newsletter:2,Crusades:28,Crusader:2,"human-resources":152,"a-Average":29,wets:4,Thermal:66,husks:4,incubating:8,Davies:2,Tache:2,mischarged:16,Ziyang:2,Yewaisis:2,Satterfield:2,suns:4,forbidden:14,fixtured:16,sunt:64,postponing:8,slung:32,Azem:2,fixtures:4,sung:17,milliamperes:4,toniest:51,Tartar:66,pinioned:17,prefixes:4,shredding:8,destroyers:4,Tartan:2,overdoing:8,nibblers:4,Burdens:4,Physician:47,returning:8,Molinari:2,Goizueta:2,interglacial:1,"ad-supported":1,Huitotoes:4,Airedale:2,cheerful:1,Weizsacker:2,Goodfriend:2,Prandtl:2,nonwhite:1,intricately:6,Kill:216,Luzon:2,becometh:20,"Dax-Pontonx":2,Zvi:2,airliners:4,CLASHED:16,grabs:18,Denver:2,embodies:20,"white-bearded":1,"Disney\\/MGM":2,appreciating:55,cigars:4,Giants:130,ruminate:39,mobilizing:55,diffusing:8,Websterville:2,ambled:16,public:34,Bleak:2,Hersant:2,NFC:2,NFA:2,scanty:1,NFL:2,dabbled:16,Elector:11,Archer:2,free:921,"I-880":47,Archey:2,Reichstag:2,Canandaigua:2,bakeries:4,Berliner:2,"Bush-Salinas":2,Liquor:11,Yuba:2,Resorts:111,lubricants:4,Naomi:2,franchisers:4,Mannerhouse:2,Britisher:2,cowardly:1,unapproved:1,Grahams:111,deeming:8,Europe:2,LEBANESE:1,Geren:2,annunciated:17,Europa:11,culinary:1,wiped:32,paraphrases:18,Zemin:2,"minus\\":1,Tobias:2,abroade:6,Forsythe:2,"non-economical":1,Apprentice:2,Adagio:2,awards:18,Brasil:1,FLARE:33,"corporate-raider":1,"strife-free":1,lemons:4,Vif:2,unnumbered:1,Abstracts:2,"phase-out":22,Ribas:2,overhand:3,Receivables:111,Trager:2,Skrunda:2,"management-pilot":3,mediums:4,Hessian:1,muzzles:18,"seventeen-year-old":1,Kume:2,"neo-Nazis":28,Compromise:11,"airline-landing":1,Djangology:2,"Victor-brand":1,Teens:4,Hearst:2,reliving:21,Raymond:2,awkward:1,Dragnet:2,Meaning:47,thout:16,profiting:8,"acts...":102,"options-trading":1,Attu:2,intones:20,"C.K.":2,Nebraska:11,BMWs:57,Atta:235,"Tasti-Freeze":2,intoned:32,Finkelsteins:28,Lipps:2,narcissistically:6,Stanwick:2,rooting:55,crippling:13,blunder:25,deserted:45,Odean:2,redirecting:8,Menomonee:2,Altron:2,graunt:39,"Heel-Beryl":2,"picture-tube":1,Renewed:17,Cashiering:8,lashings:4,controllable:1,WORKING:8,calluses:4,Philosophy:47,"thirty-year":1,heartstopping:1,arias:4,wharves:4,Installation:47,Mortals:4,Ondaatje:2,"two-evening":1,limped:32,obeyed:32,Youngblood:2,formulating:8,"Allied-Lyons":2,"life-cycle":1,deteriorates:20,Saving:229,excruciating:1,"over-populated":1,Holbrook:2,Lack:47,ashen:1,Benigno:2,rigueur:64,ashes:4,Boveri:2,deteriorated:81,"writing-like":1,Lacy:2,Abel:2,forthright:1,harm:44,hark:33,Built:231,ornately:6,hard:97,Tredegar:2,"nine-cent":1,Meyle:2,Presse:2,Build:39,fist:163,"belt-driven":1,Panisse:2,bascially:6,harp:25,mustered:32,Collision:2,fermentations:4,Coesfeld:2,childish:1,discouraging:30,firstround:1,Ridgefield:2,"non-working":1,"pension-tax":22,trusteth:174,overindulged:16,"electronic-communications":4,unidentifiable:1,"computer\\":1,crouched:32,Estella:2,"foreign-currency":22,crouches:20,Architecture:2,Reception:47,Ruined:17,Zodiacal:1,Lescaut:2,reinforces:20,computers:4,"ended...":102,misunderstanders:4,UCSF:2,Bandon:2,reinforced:45,"said:``":133,Cyril:2,"long-yardage":1,plow:24,"service-connected":1,inhibits:20,neglects:20,Goes:109,Dangers:4,disown:39,"management-union":3,"air-to-surface":1,purposive:1,Precision:11,least:867,Parrott:2,Belgium:11,Rumpelstiltskin:2,lease:24,Boards:111,Meyerson:2,leaderless:1,doctors:4,believe:149,Haiti:2,"four-room":1,supposes:20,Willowbridge:2,preconscious:1,Dispersals:4,referred:54,ungodly:1,Wilhelm:2,supposed:81,sedate:1,Reunion:2,Tisch:2,"low-price":1,"semi-obscure":1,ordere:17,intravenously:6,creases:4,denims:4,Empirically:6,categorized:17,creased:17,"self-sacrificing":1,orders:18,rollbacks:4,Kiz:2,Diseases:28,flared:112,Kis:2,Kip:2,Clearer:12,"fiscal-third":1,honors:922,flares:18,costs:18,Goulding:2,Kim:2,deepening:8,Alpha:2,"big-chested":1,Kid:11,"small-arms":176,fundamantal:1,"state-of-the-art":1,Common:40,Ainsworth:2,Oceanside:2,corrupts:20,whetted:17,"money-supply":3,"Muncie-Peru":2,Blandings:41,Lola:2,saxophonists:4,Catastrophe:47,Patent:11,"athlete-payoff":1,"blue-ribbon":1,minimizing:8,"poor-quality":1,"co-operative":3,contorted:1,perfuses:20,Chye:2,networks:18,distributed:45,roughshod:1,override:63,distributes:20,Crucible:2,Snoozing:8,Brethen:2,revolts:4,Dublin:2,Thanksgiving:2,Anania:2,infuse:39,Rescues:4,Aniskovich:2,Responsibility:2,Monaco:2,"Switzerland-based":1,"direct-selling":1,urinary:1,"two-floor":1,remove:42,Rifkind:2,unfettered:7,"Pennzoil\\/Texaco":2,"still-undeveloped":1,cynical:1,Knoxville:2,denunciations:4,Scorpios:28,Majesties:28,Toepfer:2,forthcoming:13,materially:6,"drought-induced":1,MFA:2,Judith:2,MFS:2,Printed:66,"de-iodinate":39,Krist:106,burned:81,Postal:40,transfered:17,RANDELL:2,Kriss:2,windswept:1,seeded:17,queers:4,alarmist:1,dividends:4,complement:24,sheepe:4,"weaker-than-expected":1,"bank-owned":1,prams:4,folding:5,reverse:875,clamps:4,tapered:7,bonzes:4,"transportation-services":1,"Grass-roots":1,Bloedel:2,"Taras-Tchaikovsky":2,"J.J.G.M.":2,"lesser-developed":200,shrines:4,"seven-week":1,simple:3,"Two-Head":2,Margie:2,Killow:2,simply:218,busters:4,consuming:55,Heiwa:2,longsuffering:1,Hoff:2,Revere:2,taxfree:1,"toe-tips":4,HealthVest:192,slips:18,blurting:8,presale:3,Offensive:11,"Double-digit":1,Craven:2,Isquith:2,Bayer:11,"smoking-related":1,Sitwell:2,unnecessarily:6,misunderstands:20,Ferris:2,Lowery:2,rat:25,joyful:1,Niagara:2,exachanges:4,"Caspita-brand":1,Divinity:2,pegging:8,heroically:6,vulcanized:17,Cheney:2,stubbornly:6,ARCO:2,unaffected:1,OWI:2,"more-realistic":1,dishonor:25,Servanda:64,relatively:6,"non-trade":1,passwords:4,neuroses:4,"Asia-Pacific":40,Grinned:16,timid:1,predecessors:4,chieftains:4,nolo:64,Ratican:2,noli:4,peppered:112,"energy-efficient":1,vilifying:8,"nineteenth-century":1,Yokohama:2,Harpoon:2,covets:20,amps:4,signalled:16,DiVall:2,musicologists:4,"junk-bond":824,Mitchells:2,"population...":102,Burgundy:2,distracting:30,Takakura:2,openly:6,"re-used":17,stirrin:8,letting:55,"law-enforcement":22,dynastic:1,Theory:2,newsies:4,Staar:2,deliberately:6,Snake:11,homier:12,squawk:39,Sommers:2,microcomputers:4,"Atalanta\\/Sosnoff":2,Married:615,foreigners:4,salutes:4,precompetitive:1,"trail-blazing":1,tonalities:4,degenerated:32,heftier:12,"M.D.C.":11,cogs:4,Cohen:2,disks:4,demographiques:64,Whatever:447,Thankful:1,Einsteinian:1,depositary:448,neatest:51,composites:4,jibes:4,humorous:1,Tevye:2,martial:1,ornaments:18,Whoa:106,Gotshal:2,Cinegrill:2,Psychologically:6,Nehf:2,Macheski:2,Fault:2,nondestructive:1,aflame:1,dismally:6,patient:22,integrals:4,taxing:5,"P-5-39":2,Lena:2,subconscious:3,Praisegod:40,crap:235,Polsky:2,constrains:20,goods:4,Bart:2,juste:64,goody:106,Linking:8,Bare:1,Beauclerk:2,Bari:2,Leni:2,Barn:2,Merksamer:2,Cantwell:2,Meltnomah:2,commanding:5,nonperformers:4,Lattimer:2,pathologic:1,Hermitage:2,pharmaceuticals:4,Departures:2,HOPES:18,glow:25,"Sens.":130,groomsmen:4,"V-22":2,frenzied:1,pounded:32,Watergate:2,"anti-dumping":1,impure:1,Collegiate:2,boys:4,cram:1,Terrell:2,cathedra:64,saddlebags:4,Mattathias:2,"billion-peso":1,Kurabo:2,Toyobo:2,"cookie-and-cracker":1,Theaters:4,Books:56,jumbo:3,precipitated:32,Colgate:2,widowers:4,geese:4,prevented:54,mealynosed:1,singly:6,Terminal:40,single:647,Sprinkled:17,necks:4,"well-house":1,triglycerides:4,chance:139,gametes:4,Mar:2,Manor:2,Manos:2,Berton:2,Max:11,cohesive:1,"Oh-Hyun":2,excuses:18,mobcaps:4,Mae:2,Mad:40,Mag:2,Mai:2,assassinate:39,Mal:2,Achievement:2,Man:923,brushing:55,Rube:2,"ultra-modern":1,importunities:4,Casa:2,Carried:17,"Asia\\":1,"advanced-materials":1,Gaieties:28,Cash:11,Cask:2,prepared:45,miscarried:32,Cast:856,Carrier:11,Cass:2,prepares:20,stoppages:4,freeways:4,rallied:32,"cross-party":1,Kotman:2,Elkin:2,Tunisia:2,"horizontal-restraints":4,speculations:4,Its:35,dispassionate:1,Leica:2,bergs:4,Asian:66,rallies:18,initiating:8,"competition-enhancers":4,Sterlings:28,commoner:12,"Y.M.C.A.":2,fecund:1,"ozone-forming":1,Delegations:4,unfaithful:1,Yvon:2,Drifting:8,Generales:2,monolithically:6,Camaros:4,helps:924,Aborted:1,pianistic:1,"anti-shoplifting":1,Seduction:47,Region:11,agitating:8,huddled:112,PrimeTime:2,micelles:4,huddles:4,Mussolinis:28,"slave-owners":4,Folcroft:2,aromatick:1,"second-by-second":1,False:40,tubs:4,prototypes:4,married:45,prototyped:17,"investor-owned":1,Griffith:2,"sun-drenched":1,Vehicle:11,Dauphin:2,Alemagna:2,"under-developed":1,restates:20,"clean-cut":1,Sanga:2,Ory:2,"anti-virus":1,Orr:2,Admarketing:2,"J.V.":2,crossed:32,Ord:2,Ore:2,exercise:24,Marty:2,misdeeds:4,exchange:44,leveraging:55,pomaded:17,nimbly:6,jointly:6,outlying:1,nimble:1,objects:18,"HOUSTON-CALGARY":2,implicit:1,Boyer:2,design:44,Chinese:925,"many-faced":1,Gantos:2,"next-door":1,"non-college":1,Ishtar:2,weekday:22,existent:3,courting:55,"O.G.":2,formulated:54,Passive:2,reassignments:4,"findings.":4,formulates:20,privately:6,resales:4,sewers:4,festivals:4,Ferdinando:2,"Y.S.":2,menarches:4,Bynoe:2,bested:54,nauseated:14,"than...":102,"Forty-seven":1,"wind-driven":1,Rabinowitz:2,bestes:4,"Iran\\":2,"Seven-Eleven":2,upcoming:1,endurable:1,dupes:20,capitalizing:8,apprenticed:17,enviously:6,unforgiving:1,duped:17,Lambda:2,atone:39,Kazuo:2,"foreign-exchange-rate":3,misfired:17,Nadeau:2,Comtes:2,Icterus:64,"soon-to-be":1,reserved:45,Mobilization:2,Fenwick:2,Regent:2,exclaims:20,"prize-fight":1,MITI:2,"built-detergent":1,Phonemes:4,magnificently:6,isopleths:4,curving:8,Pfohl:2,timetables:4,grimaces:4,sketchiest:51,"First-section":1,Devesa:2,revs:20,PacifiCare:2,Tutu:2,Chiefly:6,masterpieces:4,"pre-1917":1,"twelve-year":1,Knightes:2,bluff:22,trifling:1,ambiguous:1,counterbalanced:17,Dili:2,confiscatory:1,bind:44,"bond-financed":1,Highlander:2,Oshinsky:2,"test-drive":42,poaches:20,"re-open":39,"oil-finding":1,bins:4,Capable:1,institutional:1,Millis:2,widowed:14,Cecelia:2,"death-penalty":22,agricultural:1,Millie:2,delineating:8,"Swiss-based":1,McLoughlin:2,Benefactor:2,Negro:40,Bolovens:2,Pressure:47,machinations:4,Bardell:2,outbid:140,impervious:1,Huggies:28,Bulge:2,frontiers:4,Zwelakhe:2,"Vancouver-based":1,"fast-selling":1,Seagull:2,Daybreak:2,thrill:25,Wuer:2,Aureomycin:47,blazing:30,SUNDSTRAND:2,Viper:2,ROSS:2,Fonz:11,Tewksbury:2,Chaffey:2,unoriginal:1,Scotia:2,Molvar:2,relinquishing:55,Chestman:2,"milk-chocolate":1,Hallwood:2,Hirzy:2,deras:64,technically:6,Vallfart:2,Douce:2,roughened:17,Judicial:40,Ashcroft:2,"ill-prepared":1,"pony-tailed":1,Senator:2,"semi-independent":1,afterward:6,Reefs:4,Morrell:2,Nikkei:2,orations:4,Outokumpu:2,Pleasantville:2,Welton:2,Coincident:1,Hermione:2,scalding:8,"fast-spreading":1,sprawled:45,tributes:4,strategic:1,microscopes:4,Winfield:2,"Solar-powered":1,sockets:4,multilayered:1,ancient:3,Excalibur:2,spurting:8,Stoppard:2,"anti-Christian":1,pedigreed:17,unspecified:1,Coast:129,Wackenhut:2,Joey:11,Vargas:2,plantings:4,"free-thinkers":4,Javier:2,MIServer:2,Rapunzel:2,Harmon:2,Legg:2,MacGyver:2,"sub-underwriting":8,"bullet-riddled":1,flashed:32,McAuliffe:2,xenophobic:1,flashes:18,abolished:54,imaginative:1,neutralize:39,underpricing:8,Mintel:2,Nonperformers:4,Machine:11,Goodman:2,Minter:2,habitable:1,Gladden:2,Sphinx:2,apparently:6,Oil:11,newfangled:1,mio:64,skillful:1,mid:1,"royalty-free":1,mix:24,Stidger:2,shipyards:4,Knapp:2,autocratic:1,Siberia:2,"Hanoi-backed":1,Robbie:2,"computer-dependent":1,disappointments:4,Pharmacal:2,Printing:2,propagate:39,Musically:6,Moertel:2,sally:39,Kiyotaka:2,Trustco:2,Dukakis:2,request:44,crediting:21,graphs:4,Comrades:28,artificially:6,"near-market":1,skinny:1,INTEL:2,Masssachusetts:2,Invitation:2,Cordell:2,homeowner:215,"new-product":22,sidetrack:39,interpeople:1,paternal:1,gasping:8,Worth:40,staff:24,Hengeler:2,grabbed:32,Pipgras:2,controls:18,coloreds:4,Rushall:2,York:2,fumbled:16,regional:1,"fire-engine":1,Freshbake:2,inferior:1,"re-assumed":17,Homes:130,unsustainable:1,Marubeni:2,"weaker-performing":1,byproducts:4,swiftest:51,Malpass:2,Sterbas:28,kilts:4,Laurents:2,"command-and-control":1,Peebles:2,Geocryology:2,filleted:17,Christer:2,monochromatic:1,enhances:20,constructing:8,condominiums:4,embezzle:39,Petro:2,enhanced:45,psychical:1,"inward-looking":1,awaits:20,"airline-interior":1,uncollectable:1,"takeover-defense":1,"school-age":1,Nakoma:2,rapers:4,Olaf:2,Yates:2,Daffynition:47,consentual:1,Lamarche:2,Olav:2,Charlemagne:2,aeromedical:1,Islands:111,Olay:2,"health-conscious":1,exclaim:39,"joint-implants":4,Synchronized:17,TechDesign:2,taking:55,Woodwell:2,Conroy:2,devour:42,afraid:1,inflammatory:1,Marinvest:2,basins:4,backers:4,Maersk:2,keine:64,basing:8,Rifkin:2,technocratic:1,Dunde:2,"three-inch-wide":1,Hoelterhoff:2,restless:1,"non-Manpower":1,highball:25,elects:20,Bulgarians:28,spellbound:17,Periodically:6,divvied:17,Blackjack:2,adapting:55,"self-locking":1,stationed:17,Magee:2,Maged:2,Betrayed:2,finished:452,sausages:4,Mager:2,an:926,"Low-paying":1,multi:4,LBJ:2,"well-administered":1,wellknown:3,Jurisdiction:2,smokeless:1,deloused:17,"energy-producing":1,Melton:2,hampering:8,kinfolk:4,aw:106,manually:6,almost:218,dissent:24,Imperial:129,pluck:63,Yamanouchi:2,Bebop:2,incautiously:6,"drug-related":1,Stilts:2,SOS:2,Piggybacking:8,Heatwole:2,Glycerinated:1,Flatley:2,infer:39,guises:4,Transitional:1,reporting:55,Sacco:2,Malloy:2,Reflections:2,takers:4,sunburn:25,Reichhart:2,dickered:16,numbered:54,bluesy:1,Beregevoy:2,Cowper:2,bluest:51,McGlynn:2,Hornbeck:2,Washburn:2,muscle:25,soviet:1,Montaigne:2,ratify:42,rebuffing:8,"consumer-price":3,breezier:12,restively:6,miasmal:1,givebacks:4,dissuaded:32,Solaia:2,Gill:2,"more-personal":1,ads:4,desperadoes:4,Danilo:2,mathematically:6,add:42,spirals:4,"short-skirted":1,propositions:4,Smoldering:8,forays:18,match:95,unicorns:4,dimers:4,"knee-length":1,molding:21,thoughtlessly:6,Offices:92,Officer:2,Benazir:2,"more-than-average":6,Throws:20,"four-part":1,Scarlet:2,honeycombed:1,Gotlieb:2,accessible:1,Oceanic:2,Oceania:2,propel:42,horselike:1,proper:1,Givens:2,Coulomb:2,Lafontant:2,Gerdes:2,masked:45,bustling:13,ripped:32,"six-county":1,unprocurable:1,parentis:64,pepper:25,Yarrow:2,lessens:20,Futures:56,stellar:1,unevenly:6,"Investment-Grade":2,Fakty:2,"ground-launched":1,"book-entry":1,"Gunthrop-Warren":2,about:927,brooded:16,Bouquet:2,nationals:4,Domtar:2,VICTORIES:4,fleshy:1,unreleased:1,Salinger:2,Comedie:2,unwind:39,Zhong:2,Nomia:2,functional:3,unquestioningly:6,Paternelle:2,boringly:6,Vichy:2,gleaned:17,annee:64,Sawhill:2,dizzying:13,Yoon:2,stairwells:4,stainless:1,"Single-color":1,contracts:170,"damn-the-torpedoes":1,Vecchio:2,Adirondack:2,Ferron:2,"anti-androgens":4,rococo:3,dieters:4,chatting:8,Arabians:28,Legislating:8,tilled:1,steadied:32,Unpaid:1,besmirching:8,"vaguely-imagined":1,multicolored:1,stratagems:4,Leasing:258,"non-management":3,Prisca:2,Kirin:2,Mulrooney:2,Newbiggin:2,Harmony:11,skating:8,Caspita:2,RESIDENTIAL:2,topless:1,Bauhaus:2,"Vegas-based":1,Witold:2,Mintz:2,DiFilippo:2,Mints:4,"Conn.":2,Chai:2,Violent:1,Cronin:2,Xanadu:2,Sainsbury:2,wallow:39,Collingwood:2,gloriously:6,Diversify:39,enterprises:4,goin:928,"ear-piercing":1,Wander:39,entreat:39,"al-Assad":2,lorded:16,Cattlemen:28,parole:22,Techniques:28,Leaf:47,Lead:104,Vaudois:2,traumas:4,Lean:59,suspenseful:1,Lear:40,facilities:4,Leap:2,heelsthe:246,Burgess:2,Ceartaine:1,Hoover:2,"cracker-box":1,violate:392,Beltway:11,crises:4,Knock:39,under:105,rightist:1,Mite:2,MAILINGS:4,Popeye:2,Mita:2,legislators:4,tampons:4,Krupp:2,Ollari:2,Chilly:1,jack:63,Krupa:2,freethinkers:4,monkeys:4,Stones:74,Stoner:2,Reupke:2,"gas-pipeline":1,"Gotaas-Larsen":2,"W.G.":2,Europeans:41,Chiharu:2,faintest:51,Creamery:2,consistent:1,frosted:16,landmark:22,"single-payment":1,Drawn:17,Delano:2,"union-company":1,Gossage:2,"pro-Western":66,solemn:1,"web-printing":1,griped:16,"question...":102,parched:45,"most-recommended":1,suable:1,undressing:55,Scarsdale:2,Ernest:2,aural:1,ventures:18,"federal-right":1,Elisabeth:2,Andre:2,Malmud:2,"well-bred":1,Katcher:2,Lefevre:2,ventured:32,Pensupreme:2,Ciceronian:1,Booz:2,Nemesis:2,stray:255,straw:22,"non-supervisory":1,Boot:11,Liston:2,strap:83,unofficially:6,"Wake-Up":2,Book:11,Boon:2,mares:4,"power-transmission":1,swings:18,cawing:8,swingy:1,Physiologist:2,June:2,Jung:2,Ment:2,Diners:2,"love-hate":1,Cowessett:2,Plutarch:2,billowing:8,Crowley:2,ardently:6,Newsote:2,Fonta:2,"four-year-old":1,Kirsch:2,Financial:40,brandishing:8,tremendously:6,boldest:51,"Euro-consumers":28,install:42,Warring:2,"finger-held":1,addictive:1,"earth-touching":1,whizzes:4,chainlike:1,Whippet:2,"U.S.-U.S.S.R.":2,camellias:4,Poet:11,mortages:4,"slower-than-expected":1,undisciplined:1,vagrant:1,"help-wanted":1,Felicity:2,Hartford:2,low:929,Gretchen:2,mimetically:6,eyeballs:4,badly:6,Diamandis:2,Vinogradoff:2,unwrinkled:1,jumping:55,Lithuanians:28,"Etc.":2,puzzles:18,intermeshed:17,optioned:17,trillions:4,Lloyd:11,Sibyls:28,roused:16,Wolf:11,"D.T.":2,shadier:12,interpreting:8,biomedical:1,MACPOST:2,synonyms:4,"Flow-Mole":2,replicating:8,video:22,fittings:4,Devlin:2,Tinker:2,condition:24,Syndicate:11,"wholesale-price":1,"sport-utility":1,Schueler:2,"eye-beamings":4,wobbling:8,Maintain:33,disreputable:1,bitterest:51,shadows:4,superintendents:4,"Giardini\\/Russell":2,erotically:6,shadowy:1,"most-jingoistic":1,Dizzy:2,Tropez:2,"York-Pennsylvania":2,Khasi:2,Mastro:2,waffle:25,Damascus:2,"global-funds":1,practising:8,"weather-related":1,"Single-cell":1,depress:42,islanders:4,collaborates:20,collaborated:32,choreographic:1,reappraisals:4,heavenly:1,"Robinson-Humphrey":2,dusky:1,calmest:51,bitingly:6,Bardall:2,"pre-fund":39,Metal:11,"east-to-west":6,ever:930,polarize:39,Wheatfield:2,trances:4,Studies:92,BTU:2,pulpits:4,"companies...":102,BTR:2,Broughten:2,Rittenhouse:2,pence:19,Creditbanken:2,hopeless:1,BTL:2,shootin:8,highways:152,Tensions:28,"Two-Way":2,"loose-loaded":1,accidentally:6,restrict:42,awoke:16,Ammunition:2,typists:4,Garrison:2,Heintze:2,lecturing:55,"porno-inspired":1,tos:4,top:931,Beman:2,tow:163,Devario:2,too:6,flippant:1,inconvenient:1,leach:39,toe:25,curtains:4,murder:25,indiscreet:1,outdistancing:8,"not-so-trivial":1,Joneses:28,pondering:8,Forerunner:2,nudging:8,"various-sized":1,garlanded:16,cogently:6,pyramidal:1,separatist:1,bulletins:18,roles:4,"wide-body":1,Monahan:2,precocious:1,"Solis-Cohen":2,prone:97,"rear-guard":1,Zinser:2,Sausage:11,bards:4,Shires:2,"far-left":3,overstrained:17,careening:8,Chases:28,Syb:2,scriptures:4,homesteaders:4,snow:25,Haementeria:64,DePauw:2,inured:17,Bermudez:2,mammary:1,though:932,outscoring:8,excelling:8,preset:1,plenty:168,Beallsville:2,disarmed:7,Hargrove:2,"late-night":1,interject:33,prevails:20,devastating:13,uncomplainingly:6,Garfield:2,Laval:2,rupees:4,"attorney-disciplinary":1,prevaile:39,section:933,"capital-markets":1,"v.d":2,uncompetitive:1,radii:4,radio:25,Hartman:2,Saltonstall:2,sunsets:4,symphonic:1,Alphametrics:2,Gilmartin:2,Records:41,"ozone-damaging":1,printouts:4,lodge:25,announce:42,"cast-proof":1,Crosser:2,Aaa:1,Pepsi:113,Turns:20,watch:551,Aah:106,frying:55,Kirnan:2,reinstall:39,Saturdays:41,overbearing:1,unlatch:39,Hastening:8,erupt:42,cozier:12,Glen:2,Revco:11,"above-mentioned":1,"car-crash":1,Heenan:2,Abide:2,McCarver:2,"wood-grained":1,recoverable:1,cartoonish:1,Joiners:28,unalienable:1,bellowing:8,approach:44,"pee-wee":1,Batibot:2,Wanders:2,southeast:277,"Manila-based":1,"orange-and-blue":1,vomiting:55,predates:20,irregular:3,Chances:123,"credit-card":22,Thomson:11,Computer:11,games:4,evenutally:6,Sankyo:2,oleophilic:1,Barrick:2,Rhinoceros:2,"semi-liquefied":1,"round-trip":3,casters:4,Udayan:2,"re-examined":16,Theon:2,transparencies:4,Sandman:2,Hazard:2,quickly:6,universals:4,expected:934,Relating:8,"over-land":1,shrewdest:51,Kartasasmita:2,Kasai:2,Cru:2,drugs:4,nomenklatura:64,Anaheim:2,Scituate:2,Trans:2,Conklin:2,deeps:4,extruded:14,"Anti-Christ":2,"home-video":3,"Saturday-night":1,stopping:55,Souper:2,"air-to-ground":1,subnormal:1,Giulietta:2,"pre-transfer":1,"five-a-week":1,expenses:4,Principle:47,exterior:3,Golan:2,leaches:4,"anti-oil":1,Dracula:2,"labor-backed":1,repudiating:8,bifocals:4,"grocery-products":4,Inventor:2,Schweitzers:28,Lebanese:396,Skanska:2,Thunderbird:2,Steffes:2,"non-Hungarians":28,Bristol:2,"town-watching":1,McConnell:2,Upholds:20,mother:25,alarms:18,seasonal:1,"Fifty-three":1,Consolo:2,"steel-flanged":1,Aerojet:2,thumbs:18,rhythmically:6,periphrastic:1,elk:91,Koussevitzky:2,collars:4,niggers:4,educrats:4,Microlog:2,issuing:8,strolling:8,pivotal:1,Uhlmann:2,xylophones:4,bewhiskered:1,mounds:4,Reduces:20,addicts:4,"full-point":1,cultural:1,judge:44,Brownstein:2,Rembrandt:11,Reduced:71,Mazza:2,"personal-income-tax":1,dishonest:1,Hedda:2,arbitrary:1,"trail-setters":4,"non-firm":1,Robotics:2,Enhancements:2,frustrations:4,reinsured:17,successfully:6,"Kelly\\":2,PostScript:2,encumbrances:4,Francoise:2,roamed:16,Meurer:2,reinsurer:12,Cube:2,proceeding:21,Cuba:2,"bargain-buying":1,Davy:2,Lasco:2,Dave:40,Cubs:41,Chris:2,buildin:8,sewing:21,"T.V.":2,enunciate:39,pens:4,discount:205,areaways:4,"NBC-Sears":2,permitted:81,mechanized:7,Knitwear:2,Madison:2,Niccolo:2,Grassy:2,Episcopalians:28,trustworthy:1,"non-itemized":1,Grasso:2,Still:510,rotations:4,Faberge:2,civic:1,Zajick:2,obtaining:8,naturalized:14,inclusive:1,Venit:2,Hodel:2,Chains:4,classiest:51,Trastevere:11,git:42,Palicka:2,"counter-revolutionary":3,transform:42,Epinal:2,virgin:3,Kudlow:2,gim:39,archives:4,ADV:2,ADT:2,steers:72,Norwood:2,Underclass:176,attempted:85,"AD\\":2,refashioning:8,illuminating:13,ADB:2,ADC:2,ADN:2,Emotional:1,attesting:8,nesters:4,Ouellette:2,ruined:81,"most-polluted":51,quicksilver:3,simplifying:8,decorate:149,submitting:55,Horta:2,Surgery:2,"shopping-center":22,Viator:2,Cambridgeport:2,Ashikaga:2,"sq.":1,acclaimed:45,shines:20,petition:25,Acuvue:2,Gladdy:2,faithful:3,Lorinda:2,whereas:127,nemeses:4,loosening:55,HG:2,Cadnetix:2,Barbra:2,"housing-related":1,formalize:39,Export:11,ACCEPTANCES:57,subsidize:42,writedowns:4,"Francisco-Oakland":2,Life:11,Privy:2,Liaison:2,Chariots:4,longrun:1,PROSPECTORS:4,patterned:14,"old-style":1,Adens:2,"BRISTOL-MYERS":2,"vehicle-loan":1,Nights:74,melodically:6,Vyas:2,sympathetic:1,"sound-truck":1,Pegler:2,"price-jarring":1,discern:42,HYATT:2,glittered:32,Lift:39,promoting:8,Leisurely:6,weakening:5,outmoded:7,Semegran:2,"large-ticket":1,Wanda:2,Cif:2,Cie:11,Maquet:2,shibboleths:4,Cir:2,nesting:5,"N.Y.-based":1,Nightwatch:2,Spotted:17,beseiged:17,couches:4,"year-to-year":1,Diller:2,couched:54,"nisf-i-jahan":2,Allowed:231,Hereford:2,Grabe:2,"data-capture":1,invades:20,"consent-decree":1,Brigham:2,unmaterialized:17,Guth:2,invaded:32,bacteria:4,"government-appointed":1,slumbered:16,endangering:8,"life...":102,Hurrican:2,Birney:2,looted:54,Beardens:28,Hurts:20,Nanofilm:2,"High-speed":1,Duel:2,Titian:2,pathless:1,channeled:54,Borten:2,Bortel:2,Theories:65,Tawana:2,"awe-inspiring":1,"Richter-Haaser":2,noticeable:1,Armas:2,overrides:20,scooping:8,guilty:97,stomachs:4,pediatric:1,noticeably:6,vicissitudes:4,paralyzes:20,Said:935,somersaults:4,Adios:87,soybeans:4,erudite:1,Goodchild:2,Baines:2,paralyzed:14,ballets:4,"red-visored":1,"Forty-nine":1,Greenery:2,sporty:1,noncombat:3,Jemima:2,baser:12,sports:18,tinplated:17,Attwood:2,"intra-uterine":1,Pestle:2,MEDICINE:2,"law-governed":1,reorganizing:8,bombastic:1,neglected:81,Eve:2,flapping:30,"co-educational":1,misdemeanants:4,Spaull:2,Procedure:47,haole:147,states:18,Family:11,Burst:16,unruly:1,moonlit:1,Danbury:2,NavforJapan:2,emblematic:1,"high-crime":1,"ex-prize":1,unarmed:1,Spitalnick:2,"prize-winning":1,provoke:42,Simes:2,lipoproteins:4,disliked:85,improvisers:4,sweetish:1,Persian:40,Underwood:2,Frowning:8,Flocks:4,coiled:16,subsidiaries:4,Chanel:2,paide:17,invitees:4,paramount:1,clattered:16,impartial:1,Average:129,distastefully:6,Fail:2,Lawson:2,DIGITAL:2,curing:55,Luette:2,dynamical:1,purportedly:6,homebuilders:4,Nursery:2,"computer-services":4,Trinitarians:2,Parties:4,Morton:2,"once-profitable":1,"company-paid":1,computerize:39,Microchannel:2,mecum:64,Kursk:2,Smoak:2,Views:4,procedures:18,Kangaroo:47,gabbling:8,Huston:2,Oasis:2,Laptops:4,Zarnowitz:2,offers:132,"rim-fire":3,happened:32,Kuehler:2,"Next-Most-Remarkable":1,Stinger:2,boozing:8,Glasser:2,"non-code":1,superlatives:4,execute:42,arteriolar:1,"plain-out":6,clutch:24,aquam:64,picnics:4,accomplishments:4,ters:4,Bataan:2,"gold-mining-company":1,individually:6,unburdened:1,"asbestos-related":1,Fredericksburg:2,MADD:2,"seven-yen":1,"Prop.":2,depersonalized:17,cancels:20,equines:4,"tilt-rotor":1,valeur:64,kidnaped:17,processed:45,Yeutter:2,mapping:21,Mariel:2,bumblebees:4,Southlake:2,"non-wage":1,limps:20,uniformed:1,Houdaille:2,"best-known":186,broached:17,HealthCare:2,Hospice:2,"win-win":22,Bowden:2,Schapiro:2,knoweth:33,"engineering-services":4,parkish:1,Bowder:2,Ilminster:2,Privileged:40,petered:17,engineer:25,tingling:55,clanking:8,given:523,necessarily:6,district:22,Bernoulli:2,Fiorello:2,cooling:21,legally:6,independant:1,gives:20,acquisitions:4,"we-Japanese":1,Circulation:47,CLK:2,"Sr.":2,Reavis:2,Siddo:2,"battery-driven":1,girded:16,CITIC:2,portend:149,Concord:2,Coleridge:2,Dooleys:28,sera:4,Nicaragua:2,Litigation:11,searchers:4,courteously:6,Radha:2,froth:25,Prussia:2,straddles:72,syndications:4,noteholders:4,straddled:32,sells:20,Brennan:2,Venezuela:2,"hard-drinking":1,nonflammable:1,Oceans:4,"Government-blessed":1,"Helsinki-based":1,Operating:268,resifted:17,Liggett:2,"announced.":17,Littman:2,probed:16,clearer:136,Supervision:2,"rock-scored":1,Wyo:2,Wyn:2,Magnusson:2,cleared:54,probes:4,Shakshuki:2,Littau:2,"prepaid-tuition":1,Gontran:2,"cross-investment":3,adopt:42,hungry:1,"one-newspaper":1,Pattisson:2,bawling:8,EXTEND:39,"motor-drive":1,misted:16,workshops:4,Putzi:2,Comments:92,"now-deceased":1,trespass:78,dealerships:4,"insider-trading":22,"Seven-Up":2,Gorboduc:2,Bagnoli:2,rebalanced:17,Pegasus:2,Stenholm:2,partake:42,harelips:4,Fujita:2,slimly:6,unsaddling:8,quirking:8,"debt...":102,hedge:551,"needle-sharp":1,Arkla:11,sabotage:25,obliterate:39,"doctor-originated":1,BAKKER:2,"full-sisters":4,discussing:8,Ornette:2,microphones:4,imposing:30,closures:4,"baseball-loving":1,connections:4,disarranged:17,farmers:4,Ouedraogo:2,subsequent:1,Unoccupied:1,circulating:8,outside:464,Virtue:2,hiss:4,topgrade:1,synthetics:4,Natural:129,Naturam:64,Thaler:2,Bradstreet:2,"anti-discriminatory":1,Pautsch:2,"Bank-America":2,densely:6,"three-button":1,"rumor-driven":1,Willman:2,"co-edits":20,Buckeridge:2,Kokoschka:2,priests:4,blinked:16,Kwik:2,pronto:6,Individual:10,Abernathy:2,wittily:6,CLEARS:20,Barbecued:1,Smokers:4,Guess:936,afterwards:6,Nehru:11,bricks:4,Jahr:64,novices:4,"teen-age":1,atrociously:6,jammed:45,Jahn:2,glutaric:1,"currency-options":4,Amschel:2,Rossoff:2,Worldwatch:2,psychics:4,Padres:111,Riordan:2,Killington:2,Hellenic:40,"traffic-systems":4,Phil:2,Together:150,"L.M.":2,Elysees:2,Byers:2,travelling:8,Ruderman:2,myself:53,macromolecules:4,subconferences:4,"neon-lit":1,"DMB&B\\/New":2,Balances:2,Ciudad:2,Potential:1,slippery:1,Balanced:17,"plug-in":1,hunts:72,Kroening:2,slippers:4,Kurile:2,"pre-try":39,recounted:32,skipped:32,Linguistic:1,"straw-and-mud":1,Factions:4,unhelpfully:6,"shelf-stable":1,quarreling:8,Amarillo:2,"drug...":102,hevin:8,"free-blown":1,Tannenbaum:2,insurers:4,Aggressively:6,Goods:130,"Schubert-Beethoven-Mozart":1,Halsted:2,Goody:106,nest:78,"green-lipped":1,Rockefeller:2,excavated:17,Goode:2,Detrex:2,Zainuddin:2,"collective-bargaining":3,vowed:32,antibodies:4,renters:4,magical:1,sculptors:4,reward:44,flinging:8,burglarproof:1,Richland:2,ya:300,Oslo:11,actions:4,cockles:4,Haight:2,incurring:8,"action\\":1,alphabetical:1,widest:51,seems:20,dully:6,bloops:4,hotdogs:4,Navcom:2,dulls:20,impound:39,buyouts:4,watercolorists:4,"Grace-Sierra":2,painteresque:1,accepted:212,wainscoted:1,cranelike:1,Harassed:1,OCCIDENTAL:2,Sylvania:2,Congresses:4,subcommittees:4,cone:25,"call-backs":4,Argentines:65,Remaking:8,joking:8,steamier:12,"straight-backed":1,Lou:2,overheated:17,"pre-cooled":1,Jolly:66,"restricted-entry":1,Agreeable:40,Ours:53,oftener:68,portables:4,Luxemburg:2,olive:3,Loy:2,"sharp-leafed":1,Add:39,Nazer:2,Nazem:2,Europeanized:17,Discouraged:17,undreamt:17,bodacious:1,attests:20,Protesting:8,nails:4,optimo:64,Interspersed:17,anatomicals:4,"M.J.":2,Pikeville:2,"E.G.T.":2,KLERK:2,disorganized:7,"Foreign-exchange":3,obeys:20,determinable:1,Prayer:11,Guangdong:2,"computer-maintenance":22,warningly:6,annoyances:4,skippers:4,"gravel-chewing":1,"low-power":1,Identification:2,empathetic:1,buds:4,adjustables:4,Bultmann:2,Feick:2,"light-activated":1,overstaffed:1,dislocated:1,forbade:16,marketeers:4,kittens:4,shamelessly:6,lapidary:3,edified:16,"international\\":1,burrs:4,quadrupeds:4,Namibia:2,Hadera:2,"Sub-Saharan":2,promote:42,sensationalizing:8,Heavy:129,"semi-special":1,Chadwick:2,"self-interested":1,Heave:39,Amundsen:2,bleakly:6,Reacting:8,accusingly:6,aces:18,Haagen:2,Ciavarella:2,protruded:16,Bradbury:2,compel:39,Helping:8,Symons:2,starkly:6,"sun-tan":1,brash:1,briefly:163,winking:8,conspiracies:4,Picture:11,kickers:4,Gator:1,"Andersen-Price":2,brass:22,"post-World":40,thematic:1,Agamemnon:2,Chajet:2,"lynch-mob":1,variegated:1,Magazines:123,apparel:25,Equipped:17,neighbors:4,swirls:4,"high-stakes":1,eschewed:17,earners:4,Sabinas:64,dish:25,"call-ups":4,"nursing-homes\\/retirement-living":1,Alameda:2,Ensemble:2,wakened:17,Ritschl:2,pickier:12,"agro-industry":1,"Chiat\\/Day":11,Rexroth:2,Boily:2,"Ariz.-based":1,Boils:4,Lvov:2,"Vs.":64,activities:4,GIS:2,ministerial:1,"Missouri-Illinois":2,Calculated:17,Wakako:2,Erwin:2,clonic:1,overturning:8,unlined:1,"lower-middle-class":1,"dispute-settlement":3,becase:127,Neglected:2,"S.S.":2,Backstitching:8,Lethal:2,"most-contentious":937,Ngoc:2,BVIslanders:4,"wage-rate":1,Lehner:2,"Third-quarter":3,Cannibal:2,Tolls:18,Moonachie:2,"short-time":1,Curdling:2,extremities:4,cheeses:4,what:938,"snow-covered":1,magnolia:19,ticks:18,overload:24,Hibernia:2,"flag-wavers":4,Conservatives:57,racing:5,"wood-treating":1,"cash-only":1,Rusk:2,Rush:11,sparked:54,"more-mundane":1,"much-watched":1,Baylor:2,borates:4,Russ:2,steamships:4,Pulp:11,Braves:74,identifiable:1,boded:16,pulverizing:8,infringe:42,extremes:4,Mildner:2,pulmonary:1,Medtronics:2,"bridge-loan":1,elongated:14,imaging:22,Delamuraz:2,counterrevolutionaries:4,choring:939,"Noyon-la-Sainte":2,refitting:8,Poulin:2,coatings:4,potboilers:4,proceed:42,Tesoro:2,faint:104,irritate:39,Sipping:8,widens:20,underprivileged:1,knows:20,"fun-filled":1,Quarterly:66,Braidwood:2,Newspapers:41,taming:8,mellow:1,"Cir.":2,glad:1,Inx:2,Messerschmitt:47,irritations:4,"tamper-proof":1,Inn:2,Oneita:2,wrestles:72,Ind:2,"co-host":149,Ing:2,tabernacles:4,Inc:74,"chromium-substituted":1,"Jeancourt-Galignani":2,"three-inch-long":1,Coleman:2,swung:32,allege:149,Caucasian:2,Parliament:2,nonexecutive:1,Holty:2,Holtz:2,explains:20,acknowledging:8,Elusive:2,expedient:3,Shiseido:11,Mattel:2,Mattes:2,Matter:47,Tropidoclonion:2,Incapable:1,WCI:2,chiefly:6,artful:1,generic:1,Friedreich:2,Lopatnikoff:2,"twenty-mile":1,romancers:4,Relationships:65,"earlier-the":127,"ever-greater":1,developed:81,Intar:2,reversing:8,"Per-share":1,Dingwall:2,Recessions:4,Gen:2,underplayed:17,Full:66,slipped:32,Beam:2,misspelled:17,"social-economic":1,Fuld:2,Deyo:2,jailing:8,resort:24,"corner-posts":4,Losing:229,"no-drinking":1,dispatchers:4,"market-basket":1,underground:34,Trudeau:2,Tiveden:2,communities:4,"asbestos-containing":1,overused:14,Hutchins:2,characterizes:20,"air-freight":22,characterized:45,wrong:940,"say-because":127,colder:136,Distracted:17,"short-to-medium-range":1,coolnesses:4,organised:16,"scot-free":1,Were:385,Door:11,Weathers:28,lionesses:4,"sure-fire":1,"all-purpose":1,Culturally:6,appearances:4,Perennian:40,monotone:3,Howser:2,seizin:8,Papua:2,"job-rating":1,Systems:41,Malone:2,Mutant:2,Flemish:40,outstripping:8,Paso:2,Broadbeach:2,Past:941,Expect:39,Zelig:2,"``...":102,Redondo:2,"well-known":3,"knick-knacks":4,notify:42,Microprocessor:2,says:72,pleasin:8,"over-achievers":4,conventionalized:17,diagonally:6,flimsy:1,"end-of-the-season":1,orthopedics:4,Schwarzman:2,Evangelism:11,VTC:2,electrochemicals:4,GTG:2,"more-affordable":1,Gravity:47,"A.R.":2,VTX:2,inaugurated:54,Road:11,nagging:261,"over-committed":1,exponents:4,harping:55,cuff:25,MEATS:65,outdoors:43,"book-buying":1,restful:1,breakeven:3,Mecaniques:2,liabilities:942,comforting:30,Chopin:2,Giveaways:4,engulf:39,"long-format":1,Athenaeum:2,Kasparov:2,Odessa:2,"brokerage-by-brokerage":1,Jagan:2,Prostitutes:4,rhapsodic:1,displacing:21,Allendale:2,"fender-benders":4,punchers:4,finding:55,Decorated:17,stigmatizes:20,Germans:474,seedless:1,unremarkable:1,Humulin:2,"biggest-ever":1,Priviet:2,Attacks:72,screenings:4,me:943,Braunreuther:2,Vega:2,"half-dressed":1,strikebreakers:4,Speer:2,behynde:127,"Aero-Space":2,Interpersonal:1,deans:4,Peterbroeck:2,Speed:169,Sikh:40,pennies:4,you:944,Garret:2,Rational:40,"oil-price":22,"cholesterol-fearing":1,gilded:1,delinquent:3,rampant:97,"God-forsaken":1,mosey:39,congestive:1,shepherd:25,boardings:4,deader:12,strongholds:4,meditations:4,sligthly:6,frumpy:1,morphophonemic:1,Recommendations:4,determines:20,unaddressed:1,Fiske:2,medicines:4,"business-machines":4,"already-reluctant":1,investigate:42,mistakes:18,Itasca:2,heaping:8,"s-values":4,Chairman:11,"place-name":1,"SEPT.":2,achieved:45,achieves:20,"lump-sum":3,"non-Ford":1,Vahid:2,Buildings:4,mechanically:6,BEING:8,Veniamin:2,Zamya:2,degrading:13,wrinkling:8,playmates:4,atolls:4,Mahayana:2,profiling:8,creating:8,Dolora:2,"pinch-hit":39,Kitcat:2,nonionic:1,printable:1,competent:1,tumbledown:1,Accumulation:2,WESLEY:2,Heifetz:2,Reinhard:2,distinctively:6,bludgeoned:17,cleanly:6,Callers:4,"pre-college":1,"nine-year-old":1,rollers:4,blissfully:6,Happiness:47,professorial:1,"share-price":1,Tateisi:2,Updike:2,rave:26,"Testament-style":1,decline:44,deprecatory:1,political:1,"middle-brow":1,Sasha:2,Robec:2,Galt:2,"low-frequency":1,"out-trade":39,fatiegued:1,Lohman:2,orchestral:1,Despite:127,brokers:4,orchestras:4,escapees:4,KRC:2,rocking:122,unflattering:1,Andreassen:2,Allegiance:2,nameplates:4,ENTERTAINMENT:2,Chiba:2,awakening:55,alliances:4,"producer-price":3,santos:64,"longer-range":335,rosy:1,Nation:47,Frederic:2,kimono:64,nonconformists:4,firearms:4,peoples:4,esteemed:32,advise:95,YOM:2,selle:39,Taui:2,flows:18,Traditional:66,flown:17,"then-Socialist":1,unrestrained:1,YOU:53,"Ex-Im":2,Samar:2,Newspapermen:4,stateless:1,congregated:16,Carter:2,Trevelyan:2,chickens:4,underreported:17,Cartel:2,motorscooters:4,bureaucracies:4,gorgeously:6,Planter:2,polled:54,"pre-margin":1,Bonso:2,"pre-World":2,Soconoco:2,bestubbled:1,Bourbon:129,Clue:2,tables:4,workers:4,Diversified:98,drooped:16,"be-that":39,"national-security":22,Glocester:2,tabled:17,Teaneck:2,associations:4,customers:4,Lass:2,amended:54,Jamaica:2,Secondary:1,spires:4,DataComm:2,moods:4,awaken:42,Opax:2,Marmee:2,Filmstar:2,Tomlin:2,Links:2,shaped:45,Tacitus:2,nearsightedly:6,commanders:4,digitalized:1,shapes:18,Stains:4,distrust:24,entice:42,"hand-hewn":1,essential:3,"grocery-store":1,Butch:2,billets:4,sages:4,Siena:2,sprightly:1,aptitudes:4,SmithKline:2,String:59,Tully:2,Tulln:2,Hemisphere:2,orthodontists:4,Cloquet:2,deadbeats:4,Sheeran:2,mutts:4,McToxics:2,Timex:2,"senior-level":1,Walkman:11,understanded:17,raided:54,Times:46,UTLs:4,aloft:6,Timen:2,divest:42,informatics:4,Damned:126,dormant:1,Square:99,firing:945,"full-strength":1,frightful:1,purists:4,Wolcott:2,"One-time":1,wive:4,nerveless:1,"Earth-weeks":4,Joaquin:2,Grigoli:2,diameters:4,Geico:2,baggy:1,Smorgon:2,"second-floor":3,"fast-closing":1,oilseeds:4,austerely:6,files:18,forlornly:6,Poelker:2,"High-yield":1,Stems:4,Deals:4,fisheries:4,usurp:39,delta:22,Helane:2,junior:3,raising:946,hush:436,"property-casualty":3,pliable:1,Mumford:2,Preston:2,elide:33,railbikers:4,Cruise:11,"freshly-ground":1,strands:4,circuses:4,unwarranted:1,Hubbard:2,freak:78,"export-applications":4,allayed:17,Adirondacks:28,enduringly:6,"non-Indonesian":1,puttering:8,ringings:4,Blazer:2,"Anglo-Saxons":4,Gerby:2,rainy:1,Curtis:2,rains:18,Annuities:4,democratically:6,"B.M.":2,Curtin:2,"Macmillan\\/McGraw":11,mock:240,"profit-sharing":649,muddled:54,Baking:2,generates:20,"return-printing":1,hideouts:4,shrouding:8,generated:947,"Union.":2,counterpointing:8,Buries:20,"dead-weight":1,Birdpark:2,NKF:2,vice:948,Malcolm:11,onct:677,attacking:55,NOTE:25,Espy:2,Buried:17,"Fund-Raisers":4,beers:4,Screvane:2,once:400,Pontiac:2,epitomizes:20,Midwesterners:4,"Baskin-Robbins":2,alleyways:4,Goldston:2,resistance:80,Boating:258,Draftula:2,epitomized:54,Yasushige:2,acclimatized:17,worrisome:1,"middle-school":3,"Ky.":2,"liquor-crazed":1,"Texas-based":1,Canon:2,KuwAm:2,micoprocessors:4,Familia:2,Grien:2,breathing:21,seized:320,Whitman:11,"aftershock-resistant":1,photocopying:55,egotistic:1,seizes:20,"un-English":2,"high-voltage":1,spook:33,spoof:25,Kyi:2,Kyo:2,"well-placed":1,Kosovo:2,gullible:1,warranties:4,polling:122,Clinique:2,"right-wingers":4,snails:4,Kyu:2,relives:20,summiteers:4,someday:6,Hashers:4,Gustavo:2,goodies:4,Discrimination:2,Vegetables:4,"A.M.E.":2,lightest:51,Gustave:2,traveling:55,Krick:2,Staffing:2,inaccurate:1,Gleason:2,"highly-regarded":1,gainers:4,appeased:54,sables:4,capital:22,Atco:2,Clan:2,Clad:17,"canary-colored":1,Leonato:2,"Hawaiian-Americans":28,Clay:11,Rummaging:8,Seikosha:2,Moments:57,incriminating:30,poignant:1,chevaux:64,Novosti:2,bookstores:4,boyars:4,"fox-hounds":4,"funn-ih":1,Readers:4,Boardrooms:4,Schnitzer:2,deciphered:16,Safety:11,"once-lucrative":1,wil:190,copybooks:4,Labs:111,Sukle:2,"Calgary-based":1,Manlove:2,Amador:2,bottomless:1,"Trans-Alaska":2,WOMEN:4,Lane:11,Land:158,Lana:2,"Francisco-based":1,"Opa-Locka":2,posturing:21,MVL:2,stabilized:54,panted:16,impressionistically:6,Pappas:2,undecorated:1,gyros:4,anywhere:6,stabilizes:20,Muki:2,Penguin:2,Prime:40,patrol:24,"Hammer.``":133,Groben:2,"Europe-wide":97,Pioneer:2,confidants:4,publishable:1,"Ct.":2,counterfeit:1,Marciano:2,compatible:1,"long-banned":1,Polysar:2,tamper:39,unquestionable:1,Lynden:2,unquestionably:6,slamming:8,instead:6,WKRP:2,blustery:1,demonstrates:20,abuse:44,Lescaze:2,Newquist:2,improvises:20,Ratified:17,Seeming:8,NORTHERN:2,light:414,Missing:1,"Herald-Post":2,honestly:6,improvised:32,pastries:4,Hammer:2,preparing:8,stamped:54,Susquehanna:2,coolly:6,tropics:4,"Chris-Craft":2,Orpheus:2,"travel-leisure":1,Kchessinska:2,Beirut:2,"self-discipline":22,badges:4,horizontally:6,longitudinal:1,Mukachevo:2,Noxzema:2,"less-polluting":1,restrain:39,underpin:39,Chilver:2,Testifies:20,belted:16,flex:70,CalFed:2,Padgett:2,"re-enter":95,Pollack:2,Suppliers:4,"ozone-exposed":1,oranges:4,Island:11,Lavato:2,Mawr:2,"hot-blooded":1,flee:39,fled:32,Bick:2,Datas:2,feast:25,haec:64,Rubens:2,rockets:4,photofloodlights:4,bills:18,Chicagoan:2,"extended-body":1,related:801,Next:949,HIRING:21,relates:20,Junction:2,Trapp:64,Lueger:2,whooped:16,Jastrow:2,Baby:11,attentively:6,Linwick:2,Advent:2,"to...":102,maintains:20,Rubendall:2,"scandal-tossed":1,couriers:4,faulting:8,Sawnders:2,repairing:55,Gone:17,Gong:2,Ugly:1,via:127,"old-world":1,"self-prescribed":1,Sonni:2,"non-telephone":1,surrealists:4,tacked:32,"co-founded":187,scattershot:1,wakening:8,"baby-faced":1,felicitous:1,intuitively:6,set:950,Scypher:2,protectors:4,outfits:19,bois:64,For:951,LeClair:2,Eduardo:2,their:680,Bindal:2,boil:63,fumpered:16,shell:70,Grapes:113,reversed:85,instituted:54,Departmentstore:2,baptized:17,Nuys:2,reverses:72,congenital:1,"pro-mark":1,Explonaft:2,"non-seamen":4,limiting:8,"back-door":1,squealing:55,elongate:39,"success...":102,Slough:2,violets:4,DESIGNATING:8,alerted:32,Kinnard:2,Agone:2,Berrellez:2,Cipriano:2,"have...":102,Elliman:2,Cipriani:2,Sources:123,After:952,outward:218,which:953,Fluorescent:1,"leisure-services":1,"sign-carrying":1,Todt:2,Watling:2,"first-quarter":3,gorged:16,clash:24,Gamel:2,"Family-owned":1,Joined:17,Coalition:2,Supermatic:1,Games:41,cracking:5,"hydroxyl-rich":1,evergreens:4,Costly:1,Pot:11,Jarrett:2,mishaps:4,Loco:2,Pop:47,Pol:2,vernacular:22,Elco:2,OFFICES:4,Pod:2,Poe:2,rejections:4,inspirations:4,exclusive:3,chances:4,Dumpty:2,Lessening:8,Figuring:8,Territorial:40,parliamentary:1,Sorbus:2,chanced:32,"old-timers":152,Nguyen:2,EniChem:2,naturalistic:1,exacerbating:8,gouging:55,Schloss:2,surroundings:4,politicized:14,Org:2,Denenchofu:2,Legend:11,Eurydice:2,enthrones:20,mainly:6,voided:32,checkpoints:4,theatricals:4,Abandon:39,Gobain:2,chips:4,Magnavox:2,clothbound:1,queried:54,Newswire:2,AIRCOA:2,affluent:3,Hester:2,queries:18,infesting:8,Spooked:17,saucers:4,inventive:1,Aladdin:2,acquired:81,arborists:4,artsy:1,doormen:4,Shearon:2,Pitted:17,acquires:20,Huntingtons:28,Garstung:2,Demanding:8,broach:39,"radar-controlled":1,"pure-voiced":1,Fleece:2,amen:106,"a.m":43,agencies:4,Zabel:2,stropped:16,launderings:4,refurnished:17,Volkswagens:28,swift:34,"more-discriminating":1,Gospels:46,undrinkable:1,Oana:2,epidemics:4,RNA:2,Bums:4,highbrows:4,diehard:1,Enasa:2,"metal-cleaning":1,Jascha:2,"poems-in-drawing-and-type":1,"open-meeting":1,Legionnaire:2,unlamented:1,Bravo:183,"submarine-based":1,CommerceBancorp:2,Preserve:2,"well-fitted":1,Kirkpatrick:2,charts:18,Active:66,bewildering:30,counterchallenge:39,"off-Broadway":117,"Merry-Go-Round":2,"strong-jawed":1,DEFECTOR:47,Vouillemont:2,BizMart:2,present:954,inconspicuous:1,"voter-registration":1,abandoned:45,Pengally:2,Sintel:2,"GM-10":47,Periods:4,Kynikos:2,Distributive:2,rename:39,journalistically:6,apprehend:39,disapprove:149,pews:4,Rymer:2,Blauberman:2,audiences:4,SWAPO:2,Stooges:111,"church-supported":1,disapprovingly:6,Violetta:2,Kornreich:2,"electro-magnetic":1,besting:8,Schwarzen:64,inch:275,chlorofluorocarbons:4,cinq:64,Ridpath:2,coached:17,Violet:2,Maluf:2,lopsided:1,Gansevoort:2,lobby:25,antsy:97,plowed:45,whole:955,banded:17,YEARS:4,Dutchess:2,"poetry-and-jazz":22,Ringers:123,Kleinwort:2,"well-stocked":1,"inc.":11,Takako:2,Gables:74,Gabler:2,RICHARD:2,PARENTAL:1,tendering:55,fancying:8,"school-financing":1,console:42,superstrong:1,Datatech:2,hastening:8,Forstmann:2,Emlyn:2,cruisers:4,sparking:8,earnestly:6,"back-office":22,MINING:2,Besides:206,putative:1,Goodkind:2,"Soviet-Chinese":2,Bonacquist:2,Deluxe:40,racists:4,Fearing:8,"tax-exempts":4,"Anarcho-Syndicalists":28,Inspector:2,Pillay:2,"lady-bugs":4,scared:543,Mandy:2,socialists:4,Rwanda:2,twirling:55,racking:8,ablaze:97,Mando:2,scares:18,Statutes:4,"computer-based":1,Schwab:2,Taubman:2,"sickly-tolerant":1,Sheri:2,"mailed-fist-in-velvet-glove":1,curtseyed:16,apostolic:1,dangling:30,"dollar-related":1,Aero:2,"five-volume":1,Leila:2,"Heller\\":2,professedly:6,Pte:2,AIRLINES:28,"U.S.-owned":1,swear:42,sweat:956,Fable:2,pratakku:64,"Take-up":1,"hot-formed":1,Sasaki:2,DWG:2,estimators:4,Toughest:2,Brunei:2,Lillehammer:2,unpatriotic:1,artifacts:4,"*":957,omnia:64,"slant-wise":1,citations:4,dynamite:22,Bruner:2,"lost-profits":1,stymied:14,baffling:1,mutter:39,unfalteringly:6,NASDAQ:2,mailed:45,"state-mandated":1,teaming:8,"Med-Chemical":2,Neblett:2,MEMOS:57,"non-GM":1,"market-watchers":4,unpolarizing:8,Pemberton:2,below:206,ruling:27,Engages:4,fulllength:1,stirring:5,Dennehy:2,Sibylla:2,fertilizers:4,Fortunate:1,"mud-beplastered":1,myn:404,Sakellariadis:2,trailing:8,Transmation:2,Lodley:2,"editorial-page":22,"Yum-Yum":2,pickings:91,Maris:2,overdeveloped:3,Sheinberg:2,Textbooks:4,extras:4,"U.S.-South":66,heartless:1,threetranche:1,Marie:2,clicks:18,pantomime:78,"wood-processing":1,Route:958,Spanish:446,frustrate:39,risked:32,"Market-based":1,"earth-moving":1,Marble:2,alienated:54,Coach:128,devlopments:4,ranks:18,"securities-industry":22,Cambodian:1,alienates:20,Shooting:47,sopping:13,voluble:1,Andreas:2,Yokum:2,woo:42,Dockray:2,narcotic:1,OmegaSource:2,spearheaded:32,"fruit-concentrate":1,pardon:63,"divan-like":1,eligible:3,snowing:8,"Dallas-Barcelona":2,wheeled:85,superficially:6,"IBM-compatible":1,"general-interest":1,Wallach:11,Torrington:2,experimentally:6,Unsolved:2,"O.J.":2,Mossberg:66,clientele:19,jarringly:6,piling:55,Nasdaq:11,"NATO-Warsaw":2,"this....":102,jacking:8,Bavaria:2,aeterna:64,transmogrified:32,ANACOMP:2,haughtily:6,"agro-industrial":1,Potts:2,Kennedyesque:1,Lucille:2,Mehrens:2,Alcoholics:28,Arboretum:2,"single-B":10,"single-A":117,sittings:4,"single-D":1,interrupting:8,platitudinous:1,"Scientific-Atlanta":2,Yankelovich:2,chassis:19,auctioned:54,"dollar-convertible":1,previews:4,shriek:25,Descriptive:1,Precise:1,Raheem:2,culling:8,chlorides:4,pretensions:4,reactivated:54,reports:18,"P.R.":3,"Buy-Back":2,catalyzed:17,Audi:2,"recession-inspired":1,secluded:14,ground:917,"best-of-seven":1,"a-GM":2,"nicotine-choked":1,psychological:1,"N.J.-based":66,"well-braced":1,Geraetetechnik:2,Wales:2,"disaster-prone":1,Richebourg:2,cherishing:8,marketers:4,Shioya:2,"racial-minority":1,exhort:39,Supervisors:111,Admitting:8,occupying:30,"Lynch-led":1,"Tex.":2,untie:39,"Blvd.":2,until:127,icebound:1,suffocated:17,Tudor:40,Christina:2,Necessary:1,Christine:2,downward:97,brings:20,canonized:14,Redeemable:2,Boykins:2,flubbed:16,"Reagan-Bush":66,Praxis:2,"self-styled":1,sweeten:39,SHIPPING:2,Ending:8,pinholes:4,nationalizing:8,sweeter:12,concepts:4,denyin:8,FERC:2,"business...":102,Zoellick:2,Shidler:2,promulgated:54,reviewing:55,vitiated:17,gargantuan:1,Meets:2,Venerable:2,"Bush-supported":1,syntactic:1,leaguers:4,revisit:63,retooled:54,Forman:2,LeCarre:2,outlawed:81,Reese:2,"fourteen-team":1,"pearl-handled":1,Mailson:2,"K.B.":2,youths:4,scoffs:20,"wild-sounding":1,Reuss:2,maids:4,aping:8,Quina:2,rewards:18,artistas:4,senators:4,Resistol:2,tranquilizing:1,"Half-year":1,hallelujahs:4,Smolensk:2,Hogue:2,conned:17,"self-appointed":7,welling:8,nonpublic:1,"mouth-up":1,"gymnasium-sized":1,"in...":102,"county-wide":1,undercut:959,"Cosgrove-Meurer":2,programed:17,"IBM\\":2,McClements:2,Seth:2,Thomas:74,"SeaFest\\/JAC":2,educating:55,Sets:4,braised:17,haphazardly:6,clumsy:1,blushes:4,debut:44,flamboyantly:6,addicted:14,Siewert:2,"gung-ho":1,blushed:32,obdurate:1,Plow:2,snakes:18,"Mid-Century":2,Mongolia:2,snaked:16,"no-waste":1,Dominant:66,excepting:8,copolymers:4,Hercules:113,"no-growth":3,hangouts:4,Vanity:2,"money-center":1,"J&J":2,Loneliness:11,"mah-jongg":64,Olestra:47,Volokhs:28,grapes:4,muscling:8,Soft:66,ate:16,"market-sharing":1,shelves:4,"no-o":106,shelved:85,"now-troubled":1,Weksel:2,Mighty:2,grassers:4,"air-conditioning":22,Hemorrhage:2,earthy:1,angelic:1,Arianist:2,NATIONWIDE:2,Courter:2,unfilled:1,playfully:6,Blish:2,semifinished:17,Koizumi:2,Arianism:2,renderings:4,OKing:2,reportorial:1,similarly:6,"vaccine-related":1,defaulting:8,"Motion-picture":1,tangy:1,Invasion:11,ranging:8,Vesoft:2,librettists:4,"scaled-down":1,"Francois-Poncet":2,"strike-outs":4,Urmstom:2,Prevent:39,"loan-restructuring":1,unguided:1,"small-office":1,Chequers:2,Rats:2,Wyss:2,Moldavia:2,Data:960,Schein:2,walloped:16,"most-owned":1,Compson:2,uninjectable:1,readjusted:17,Wyse:2,zounds:106,"seven-month":1,unintended:1,gulped:16,spacious:1,loathsome:1,"Japanese-managed":1,"local-content":3,relaunched:17,kayo:39,Canter:2,Duesseldorf:2,"ex-officers":4,Unicorp:2,"hastily-summoned":1,unperformed:1,Placido:2,absorbed:81,MYERSON:2,layoffs:4,Mathis:2,Lynn:2,shall:190,misdirectors:4,figger:33,Birgitta:2,Talcott:2,Chablis:28,Unsuspecting:1,blackmailed:17,Lynx:2,"non-Canadian":3,Kikiyus:28,shalt:39,trigonal:1,Texans:111,Quality:326,Lending:21,drunks:4,comprise:149,Mansion:2,nineteenth:1,TARP:2,signatures:4,prim:1,Union:129,droppings:4,sexist:1,undue:1,plutocratic:1,Softletter:2,Paradise:11,"rough-and-tumble":1,pastoral:1,"die-hard":1,parodies:4,"non-smokers":4,"third-place":1,Fixx:2,Moller:2,gweilos:64,parodied:16,heartily:6,"niche-itis,``":133,"Turbinen-Union":2,Account:11,cartwheels:4,tramped:16,stammered:16,nonobservant:1,Inderbinen:2,"sales-incentive":1,X:47,Yell:2,"publicity-conscious":1,Alternate:1,Savageau:2,Arleigh:2,greens:4,BLIP:2,textbooks:4,Petit:2,"Insurance-related":1,"Oakland-Berkeley":2,thirtysomething:326,sanctioning:8,plagued:54,Erjun:2,nolle:64,unexpectedly:6,"largely-silent":1,"four-man":1,"press-ganged":1,John:74,skulls:4,Veatch:2,Heydrich:2,"credit-worthy":1,campaigners:4,"W.W.":2,thees:246,stamps:4,Dewar:2,pilloried:54,"corn-farmers":4,Bowers:2,rolled:112,Rebaja:2,"world-scale":1,personalize:39,Kelts:2,symbolizes:20,undependable:1,Peterson:2,"knot-tying":1,"Phenix-Transmission":2,sacrificing:8,triggers:18,Covert:2,Vacancy:47,Masaaki:2,installments:4,"comparable-store":1,"post-surgical":1,Closes:20,Ukiah:2,Mehitabel:2,Locally:6,"Afghanistan\\/Southwest":2,"non-utility":1,Willing:1,Closed:798,trucked:17,Nostradamus:2,Closen:2,sponged:32,billing:21,holdings:4,sauterne:1,"high-interest":1,roofed:17,chucked:32,sponges:4,Shuman:2,Enormous:1,eastern:1,Drago:2,Niels:2,"tumor-suppressor":1,Platoons:4,Safeway:2,Gloriana:2,Hygene:2,Schaeffer:2,"Tyson-Spinks":1,Kaufman:2,symbolically:6,flooding:55,vows:72,Maccabeus:2,remembering:55,swindlers:4,Kornevey:2,manipulators:4,"anti-polio":1,"short-selling":22,outfitted:32,Lebow:2,Eishi:2,campaigning:55,"blood-and-guts":1,Morever:6,Diefenbach:2,confesses:20,shipwrecked:1,"Wholesaler-Distributors":113,Amelia:2,Orban:2,"kitchen-table":1,"middle-aged":1,Caltrans:113,Presiding:2,hectares:4,Meps:2,personifying:8,subgroups:4,Villanueva:2,"off-the-shelf":1,"high-ranking":1,Terree:2,Vellante:2,disseminated:17,maxims:4,"wavy-haired":1,chafing:30,"leg-split":1,disseminates:20,luminously:6,PHYSICIANS:4,distribute:42,beset:81,"false-fronted":1,Rigoletto:2,"eleventh-floor":1,exclaiming:8,"long-dated":1,rushing:55,succeeding:5,collectibles:4,keeled:16,remedial:1,deters:20,girding:8,prison:25,"liberal-led":1,nutritionists:4,Dubbed:17,"Johns-Manville":2,PENALTY:11,Hindus:2,"merger-acquisition":1,tolerable:1,primaries:4,Midshipman:2,unimpassioned:1,remind:42,misled:32,cavin:8,tomblike:1,Further:961,Ithaca:11,Warren:2,right:962,old:1,ole:3,Soros:2,System:11,"NS-X":2,Application:11,Conservation:11,Noel:2,"rate...":102,Mossman:2,animate:1,knifelike:1,NutraSweet:2,"dog-powered":1,ruffled:81,whitens:20,sowed:16,Naguib:2,prefund:39,ruffles:20,summoned:54,Sharrock:2,stints:18,Bregman:2,Valentin:2,Nicholson:2,Purdie:2,bowing:8,PENTAGON:2,emits:20,hardliners:4,First:963,Duquesne:2,instructed:54,"sun-parched":1,recollect:33,Chafin:2,Upjohn:2,Chafic:2,"acquisition-hungry":1,statements:4,Ainu:2,Betancourt:2,Scotland:2,"premium-brand":1,Korean:66,Hank:2,Overhanging:8,Hani:2,"un-Christian":1,frazzled:17,Hann:2,Hang:59,Neuharths:28,Hand:169,Submarines:4,triplets:4,Hans:2,Bodhisattva:2,unfree:1,regenerating:8,Invest:188,followthrough:1,JAPANESE:1,Superstate:2,"stone-age":1,peppermints:4,upgrades:18,sighs:72,prosecutions:4,"socially-oriented":1,Guests:4,"drive-yourself":1,bateau:3,Sis:2,Sir:395,developing:5,Sit:216,homogenous:1,"bigger-than-expected":1,Josh:2,restorative:1,Sic:64,Squad:47,Sie:64,Sid:2,Sik:2,"York-based":66,"black-market":3,Sin:2,Sim:2,Handle:39,lungs:4,Gradmann:2,Czechs:28,Ramon:2,Ramos:2,momentary:1,wart:19,Situations:4,Tiptonville:2,"round-the-world":1,Nymagic:2,"barrel-a-day":1,Voutila:2,Morrow:2,BOEING:2,ASPIS:64,"good-natured":1,Cristini:2,Creusot:2,push:95,"combat-inflicted":1,Wallstreet:2,"front-loads":20,"inter-bank":1,shimmy:42,Headrests:4,Juet:2,Metropolis:2,Backward:2,Peel:2,Rama:2,"before-and-after":1,efficiencies:4,carpenters:4,Peer:2,Peep:2,"thick-walled":1,accelerometers:4,Henson:2,fatigues:4,Redgrave:2,shepherds:4,navigable:1,smalltime:1,Solihull:2,Darryl:2,alcoholics:4,REIGNS:20,fatigued:14,"fault-tolerant":1,launchers:4,"whole-house":1,Champion:11,uncourageous:1,Overpriced:2,"Most-Remarkable":51,depository:22,LePatner:2,"world-shaking":1,Kevin:2,"social-climbing":1,thinkers:4,findings:4,insignificant:1,bulldozed:17,"nuclear-plant":1,repeaters:4,Boyden:2,"random-walk":1,coppery:3,"post-merger":1,Irenaeus:2,Formosa:2,crooks:4,falling:5,"often-fatal":1,totalling:8,ramming:8,"by-products":4,bi:127,shortened:14,contemplate:42,"Kid-Isoletta":2,"island-hopping":1,"D.A.":11,Associated:98,"counter-claims":4,Preservation:2,fourfold:218,Travis:2,"big-stock":1,Associates:41,Bork:2,Slugger:2,IRNA:2,Malson:2,internationalizing:8,Dauntless:2,Naji:2,Abbey:2,"leopard-trimmed":1,Lisle:2,Stealth:2,"Hyon-hui":2,ironical:1,McNeill:2,shipmates:4,"single-parent":1,Altar:2,distancing:55,anatomical:3,Danaher:2,Gilgore:2,"anti-shock":1,electrolytic:1,loving:13,"high-speed":1,"one-two":1,Elegies:2,leeches:4,refrain:63,militated:17,Senate:40,earnigs:4,"less-junky":12,"low-loss":3,Constraints:4,"Top-of-the-Line":1,Pope:2,Locke:2,"jewel-bright":6,"time-proven":1,privy:3,Pops:2,printing:308,"multi-family":1,"Anglo-Americans":28,Yinger:2,"good-humoredly":6,unequalled:1,uncomforted:1,"hard-to-please":1,BAM:2,"rhythm-and-blues":19,recentralizing:8,coyotes:4,divided:45,Alagoas:2,"bad-fitting":1,immune:3,BAe:2,advancing:30,revolted:16,lilacs:4,"bottom-dwelling":1,salicylates:4,Mesnil:2,rigors:4,Beckman:2,Burgundian:1,"Griffin-Byrd":2,cardiac:1,dove:602,stress:24,Lura:2,Constructeurs:2,castings:4,Waigel:2,"pre-suspension":1,lighter:964,monocrotophos:4,Edwina:2,Barnet:2,Kan:2,"public-limit":1,Teagan:2,stampeded:54,Oaks:74,Lesutis:2,shudders:4,Lecturer:2,Lectures:65,derive:149,Nymphomaniacs:4,haughty:1,babbino:64,"upper-crust":1,Argyros:2,paraded:54,decreases:219,Nando:2,Tojos:28,Vroom:2,decreased:32,bipartisan:1,parades:18,"Greek-Danish":2,instantly:6,Halis:2,retails:72,"E.F.":2,smarter:286,outgained:16,BASF:2,compelled:45,subscribers:4,Bissett:2,ketchup:965,smarted:16,Baluchis:28,withdrew:16,"Open-flame":1,internationalists:4,Grants:111,suspends:20,veins:4,expectedly:6,fluted:17,topnotch:1,Mandel:2,paling:8,Landerbank:2,Bigg:2,flutes:4,Roper:2,Satellite:2,Ryskamp:2,novice:22,"post-operative":1,"gyro-platform-servo":1,boundless:1,exploding:8,Tolubeyev:2,OBE:2,complimented:17,"English-born":1,Valerie:2,prostitutes:4,poltergeists:4,quite:966,Ostroff:2,vegetarians:4,quits:72,"sin-ned":39,SPRINGFIELD:2,training:27,"late-summer":1,potting:55,unlicensed:1,punk:22,squibs:4,"Sheraton-Pan":2,Layton:2,puns:4,massive:1,Triple:2,"Bargain-hunting":21,Brodie:2,"globe-girdling":1,puny:1,Acheson:2,"U.S.-Canada":2,architecturally:6,ATM:47,Isolated:1,"CBS\\":74,ATI:2,reopen:42,specifically:6,Miriani:2,"Alvero-Cruz":2,"A.M.A.":2,"quasi-parliamentary\\/judicial":1,excursions:4,"BellSouth\\":1,structured:81,Observers:4,"self-extinguishing":1,draft:139,Laing:2,shoppers:4,"T.F.":2,structures:18,Socola:2,plies:20,Mozart:2,uneconomical:1,veers:20,simulators:4,"anti-diarrheal":1,"suit-and-tie":1,Approval:47,Durk:2,Bruegel:2,pheasants:4,"price-value":3,fledglings:4,"AT*":2,Deliveries:4,estancias:4,siding:21,"rainbow-hued":1,glossy:1,Fraternal:2,companionable:1,thousandths:4,"fern-like":1,Regarded:17,"N/NNP.Y.C.":2,sag:182,afternoons:361,sad:1,prestigious:1,inhibiting:30,bewilderingly:6,sap:63,saw:250,sat:32,"toughest-guy-in-the-old-days":1,"dollars-and-cents":4,Murakami:2,aside:349,Touche:2,Important:66,transcribed:14,"property-loan":1,surfacing:8,roadside:22,destroy:42,"Third-period":3,"time-honored":1,Steady:1,knew:16,Tanqueray:2,verifiers:4,pages:4,"non-service":1,Schaaf:2,defeating:8,sodas:4,Antarctica:2,butchered:17,Indignantly:6,accented:14,flaunted:16,oncogenes:4,homespun:1,Outbreaks:4,urgings:4,Wants:20,Cyr:2,cloak:78,foward:1,Batterymarch:2,Unconsciously:6,"home-comings":4,Cyd:2,uppermost:967,blinds:18,congressional:1,dispute:24,"Korean-Americans":28,sheltering:8,Guns:123,dissimilar:1,Aprotinine:2,sidestepping:8,supergiants:4,MEA:2,prime:3,"red-carpet":1,Housings:4,Scrupulous:1,Yamamoto:2,"sick-building":1,ghastly:1,Bronston:2,Olson:2,subversives:4,Farooquee:2,revitalizing:8,appropriating:55,"top-level":1,Sternbach:2,"once-strong":1,plummet:182,Procter:2,jumped:32,Sportscreme:2,Sweeney:2,"second-place":1,churchgoing:3,fearless:1,Paree:2,Hotham:2,forsake:39,decks:4,domi:64,Beaujolais:74,lettin:8,Facilitatory:1,nightmarish:1,"wash-outs":4,Buchheister:2,"losses...":102,"new-country":1,congregations:4,Religione:2,adept:1,ineptly:6,thickly:6,designees:4,madcap:1,Medstone:2,Greatly:6,Advocates:57,governmentally:6,receipts:4,setters:4,NDN:2,Schumann:2,Strohman:2,furthered:32,frizzling:8,cities:4,Desir:2,testimonial:3,airlines:4,overland:6,reflective:1,originates:20,Princess:11,"column-shaped":1,Marcilio:2,lanes:4,enlisted:85,rekindles:20,Tishman:2,coughing:55,Catalysts:4,Sucks:4,rekindled:17,observe:42,Dominion:2,"N.M.-based":1,Mussett:2,Formerly:6,Rydell:2,spanking:3,intimately:6,invoking:8,canoes:4,coextrude:33,twisty:1,maximal:1,Rennie:2,canoe:78,creamier:12,DIG:2,"advanced-technology":3,Eddyman:2,Looking:229,"hand-level":1,"joint-return":1,redeemin:8,casings:4,fame:25,"plastic-covered":1,Leubert:2,Merchandising:2,thinkin:55,helpfully:6,Nedelman:2,"design-conscious":1,"high-salaried":1,codes:4,renewable:1,Conant:2,colorblind:1,Skilled:1,Zaita:2,Neapolitan:40,Roasters:4,manifold:22,Missa:2,"west-to-east":6,"Mich.-based":1,Missy:2,disperse:39,Trockenbeerenauslesen:2,semiquantitative:1,Rummel:2,"Sung-il":2,trimmings:4,preventing:8,deceiving:8,interstitial:1,"straight-A":1,"Sary-Shagan":2,civil:1,nymphomaniac:22,Rigid:1,Anonymous:2,ghostly:1,Olive:2,coded:14,Approved:54,"Miss.":2,Washing:47,SHIELD:2,Radiant:1,"in-patient":1,Micro:2,Shoichi:2,structuring:55,"open-interest":1,Walloons:28,warped:14,"broken-backed":1,stranger:215,"wide-door":1,Belmont:2,Boeskys:2,"white-haired":1,Indeed:67,stationary:1,Abatuno:2,landscaping:21,Perry:2,"combat-trained":1,pushy:1,Myung:2,Novametrix:2,Perro:2,FLN:2,Vienne:2,bizarre:1,reigning:8,Vienna:129,scandals:4,dialectical:1,tote:216,toto:64,Merton:2,Brawley:2,Samakow:2,Equus:2,roast:968,exultantly:6,"run-from-above":1,momentwhen:910,stone:275,side:419,Jordanian:1,amusedly:6,Macquarie:2,bond:22,stony:1,Latter:47,Polaroid:11,wads:4,sneering:8,Jetta:2,Accords:41,wade:39,Maiden:2,"Japanese-style":1,Alain:2,Collection:11,seesawing:8,myths:4,Tadashi:2,typecasting:8,mourns:20,Sandburg:2,gliding:8,"natural-gas-pricing":1,"anti-ballistic-missile":1,Smale:2,Reshaping:8,keepsakes:4,Small:66,technologies:4,plucky:1,Hurry:39,"Court-awarded":1,expressionless:1,unveils:20,flirt:33,"U.S.S.R.":2,dispensing:55,mopping:8,inferable:1,dependents:4,rescued:54,regimes:4,Hof:2,escaping:8,Hoc:2,Hoa:2,Hon:2,galleys:4,Layman:2,laminated:14,"adventure-loving":1,How:969,Hot:40,walked:32,interchangable:1,unhesitatingly:6,"Farmer-in-the-Dell":2,Hoy:2,Swim:2,tasteless:1,graduate:139,"Scottish-born":1,Northgate:2,"H.V.":2,decimating:8,Osprey:2,disgraceful:1,perspired:16,Alex:11,Wrangham:2,Kentucky:11,realismo:64,dented:32,gifts:4,Sandalphon:2,Laboring:8,imminently:6,Alec:2,misleadingly:6,noninflationary:1,Callum:2,minefields:4,preppy:1,rescues:18,Hafer:2,Street:11,Streep:2,Hafez:2,"cross-state":1,"full-commission":1,Setsuo:2,"warm-weather":1,Creon:2,Unable:1,Mogavero:2,Eurostat:2,Romeo:2,"Mae-backed":1,strips:18,Boesel:2,hunting:970,NCAA:2,overlying:1,prophets:4,bilked:54,"company-run":1,"rate-making":1,CPB:2,Cossiga:2,Kutzke:2,generics:4,PACs:65,Pageants:4,swallows:18,friers:4,Kretchmer:2,"long-simmering":1,Wilmouth:2,"natural-gas-pipeline":1,instigate:39,unabatingly:6,Rainwater:2,ninetieth:1,quaintly:6,carriages:4,Howmet:2,Bumiputra:2,theatergoers:4,Feldberg:2,shrugged:16,McNamee:2,forestall:39,imperceptible:1,fucks:4,Wolohan:2,Conestoga:2,Abuse:2,Unloading:8,"Pan-Alberta":2,"Mega-hits":4,accessions:4,"horse-packing":1,Prettyman:2,murkier:12,timberlands:4,Bankrolled:17,buzzing:30,Gap:11,discolors:20,introductory:1,brutal:1,defectors:4,"bank-looting":1,"much-maligned":1,"vacuum-packed":1,"sugar-cane":3,unsatisfactory:1,"no-bunkum":1,"half-intensity":1,purveyors:4,"SP-44007":725,"Corp.\\/Europe":2,whammo:106,"estate-tax":3,select:392,Additional:1,"triple-witching":1,Lecheria:2,hothouses:4,"O.S.K.":2,"passenger-transportation":1,"one-month-old":1,citing:8,Belgique:2,wavering:55,impoundments:4,Russian:40,"toll-tele-phone":1,refueling:21,teen:3,cyclicals:4,"U.S.-Canadian":66,teed:32,foregone:7,"worn-faced":1,"drug-enforcement":1,Lang:40,pursuers:4,Takeshi:2,objections:4,Caffrey:2,blemishes:4,Greenfield:2,Guzewich:2,diGenova:2,"over-rewarding":1,bromides:4,"Austro-Hungarian":1,supercilious:1,Debevoise:2,Unanalyzed:1,"price-adjusted":1,Katsive:2,Stockholders:123,"shirt-sleeved":1,obliquely:6,Banxquote:2,Shemiatenkov:2,Jacobsen:2,garden:25,outfitting:8,Chandler:2,Jekyll:2,freshly:6,Bouton:2,Gelly:2,"strong-made":1,"stock-for-debt":1,"two-track":1,Tarrytown:2,plant:24,Stockbrokers:123,Division:11,Sleepers:2,"D.O.A.":1,plane:25,conveniences:4,Atzez:2,pleaded:32,Adaptec:2,Adapted:17,executions:4,Churchill:2,rowdy:3,denude:39,"hot-ticket":1,Voroba:2,broadcasting:191,tentacles:4,eversteadier:1,helplessly:6,greats:4,"more-hazardous":1,"meek-mannered":1,passages:4,clarifications:4,reminded:32,Ruston:2,Tortorello:2,trade:24,questioningly:6,intensifiers:4,its:404,imaginings:4,licks:20,CTBS:2,DGAULT:2,epileptic:1,blurring:55,Ingalls:2,Dorney:2,bobbles:4,ally:25,"pre-signed":17,motley:1,pathologically:6,"I.":765,imperil:39,thereof:6,"ever-more":1,Correlatively:6,Waggin:2,"Dassault-Breguet":2,Savannah:11,loosely:6,featured:45,"revenge-seeking":1,Busch:2,Zone:11,contiguous:1,"six-bottle":1,critters:4,reappointed:17,girlish:1,eviscerating:8,ruminated:32,Patmore:2,HDM:2,HDI:2,vis:64,"by-passing":8,Allianz:2,Auction:47,armaments:4,flyaway:1,hangers:4,Yugoslav:40,Class:11,"bloody-minded":1,dwelt:16,Chant:11,Penniman:2,Yorba:2,Imasco:2,murmur:25,Chane:2,Chang:2,Guttmacher:2,disadvantaged:1,Rosenbaum:2,bargen:33,Heffernan:2,"big-city":3,"Chairman-Elect":2,"truck-fleet":1,"ft.":19,thespian:1,Mueslix:2,forwards:6,Marvelon:2,fluxes:4,contended:32,economizing:8,ripoffs:4,sidle:39,differ:149,"brick-and-mortar":1,RMC:2,"tar-soaked":1,Sunny:2,Regulators:4,"name-brand":1,Regulatory:40,syllables:4,molecular:1,Sunni:40,gassings:4,Ingrassia:2,"Top-20":1,Rival:40,breakdowns:4,"dwindling-sales":1,Geech:2,spacings:4,stairs:4,secretarial:1,"Port-au-Prince":2,parenthetically:6,Catskill:40,swiveling:8,vocal:3,minimize:39,"ultra-efficient":1,assume:42,beneficial:1,Mottice:2,"metal-products":4,Is:109,"fur-production":1,"Jeep-like":1,multipurpose:1,electrodynamics:4,Pecks:28,Cyanocitta:64,Tercel:2,disenchanted:14,"bad-debt":1,"status-conscious":1,NORTH:2,Hannah:2,"prima-facie":145,synchronizers:4,Hannam:2,partings:4,auditions:4,Overturf:2,severly:6,ancillary:1,KEISHI:2,brace:44,Reproductive:2,"big-town":1,index:25,Zeal:2,retablos:64,nasal:1,paleontologically:6,pulled:32,FROM:127,"pre-Fair":1,"three-month":1,Deacons:4,fashions:18,If:127,totemic:1,"systems-strategies":4,desklegs:4,despise:149,shivers:4,"Luxembourg-registered":1,defended:32,Eggum:2,decentralizing:8,Stumpf:2,parochial:1,Palestine:2,dockets:4,Semra:2,stepwise:218,"fade-in":1,sayin:21,Gyi:2,unjustly:6,Balkans:65,Alurralde:2,giants:4,"Close-up":2,addresss:4,scuff:39,dependent:3,Gribin:2,understudied:16,resent:149,"out-dated":1,Smithson:2,belled:1,"debt-equity":3,roughest:51,belles:4,surrendering:8,Dalton:2,kill:95,approaching:8,"balance-wise":1,Sleepinal:2,"building-products":4,Liberman:2,"pro-Noriega":1,Glaser:2,hoarsely:6,Tippett:2,Stolichnaya:2,Pitman:2,knees:4,"#":971,Fuhrer:2,"worth-while":1,diluted:674,rejecting:8,heading:55,Pettit:2,Arithmetic:2,Confiding:8,Pettis:2,Bangemann:2,dilutes:20,kneel:39,"performance-related":1,milder:12,sections:4,brewing:21,Intecknings:2,disallow:39,"three-week":1,smoldering:8,Packers:74,"body-and-assembly":1,adagio:163,enables:20,improved:81,"tobacco-growing":1,Jaws:41,barely:6,harpy:1,timorous:1,"Southern-Republican":2,turrets:4,Trinidad:2,Junius:2,load:44,markdown:22,"Heavy-coated":1,loan:25,northeastern:1,"second-rate":1,jowls:4,"upper-income":3,indefinite:3,jowly:1,"big-stage":1,"stop-gap":1,Persians:28,Students:92,"anti-aircraft":1,intricacies:4,"Col.":2,unraveling:21,"involuntary-control":1,Attanasio:2,Jansky:2,modern:3,CARTER:2,Boslego:2,upstart:22,hind:1,mine:972,clergymen:4,"high-mounted":1,Steinberg:2,yachts:4,Urdis:2,Starting:8,Fetch:39,Ministry:2,"mid-to-late":1,Vinnin:2,Colt:11,Carrots:28,Cols:2,forgetting:8,Change:128,evaluating:8,communal:1,Samnick:2,Rukeyser:2,sizeable:1,arching:8,backing:55,chirping:55,WSJ:2,Rochelle:2,WSY:2,"Reagan-Republican":1,Charlayne:2,Yamashita:2,chase:139,"price-support":3,sounding:5,Emmaus:2,severest:51,"results-oriented":1,Favorites:778,Fully:6,Beise:2,Lillard:2,displeased:14,unlabeled:1,Charges:4,"LIN-BellSouth":66,henchmen:4,Rammin:8,viewing:55,displeases:20,grappling:55,picky:1,commoners:4,Cami:2,Norwitz:2,picks:72,Aerospatiale:2,Talks:57,Staff:11,"oft-repeated":1,Roanoke:2,"lower-growth":1,behind:973,unto:324,"Lieutenant-Colonel":2,Hollandale:2,fingerlings:4,crying:55,Topps:2,"out-and-out":1,reverted:32,"intra-mural":1,Shawmut:2,"stock-option":22,Requests:4,Atlantica:2,Flair:2,"form-letter":3,imposed:45,McCullers:2,Columnists:4,"Race-drivers":4,disorder:25,interbreeding:8,sahibs:4,expansionary:1,"Va.":2,pertaining:8,"third-consecutive":1,"morocco-bound":1,Townsend:2,FIGHT:2,goutte:64,Gibault:2,Brodsly:2,seisho:64,CREDIT:2,veterinary:1,Hindenburg:2,Whittle:11,Furman:2,Tuttle:2,bearings:4,"MB-339":2,Pact:2,idealistic:1,Benton:2,dictates:18,"fish...":102,Pace:2,Ciera:2,Slender:1,Walgreen:2,Inoue:2,dictated:54,Pack:216,"thirty-fourth":1,Loring:2,Lessner:2,Crisanti:2,snowballed:16,Caffedrine:2,biennial:1,progressions:4,irked:54,"third-year":1,belfries:4,vocalize:39,Overreacting:8,servers:4,appropriate:240,deduct:42,Exposition:2,selected:81,traduce:39,Metamorphose:2,lithe:1,bosons:4,immunological:1,royalties:4,Disabilities:74,Hurley:2,instalments:4,"Yale-Army":2,"first-nine-month":1,GDP:2,GDR:2,Dixie:2,Office:11,"coal-fire":1,Kwame:2,"coal-seam-gas":1,"Half-man":1,GDL:2,consumed:54,Orbital:2,Supposedly:150,boomers:4,reconcile:39,raging:30,likewise:6,surpassing:974,skimming:55,nondiscriminatory:1,Rolfe:2,overconfident:1,Ramone:2,Ramona:2,scrape:44,Ruff:2,scraps:18,reimburses:20,degenerative:1,hustling:8,energetic:1,Sethness:2,lashing:892,STANDARDS:28,Concetta:2,rise:24,Canonie:2,Greensville:2,Rosenau:2,DEVELOPMENT:2,destinies:4,Yarnell:2,napping:8,Alamein:2,"half-clad":1,"fair-looking":1,labelled:54,Lonnie:2,illustrates:20,scooped:16,"Austrian-Argentine":1,Blaydon:2,Ecumenical:40,existing:30,Andalusians:28,grazers:4,exorcisms:4,unmatched:1,Califano:2,lambasting:8,centers:18,Supporting:8,McLaughlin:2,"Japanese-owned":1,Tippet:2,Bessemer:2,concerned:467,Becoming:8,"student-loan":3,Glass:11,subcontracting:122,Superconductor:2,manipulates:20,Holland:2,Bordens:28,Railbikes:4,"one-woman":1,Gather:39,"fence-line":1,Harve:2,jettisoned:17,pledge:25,Morals:4,"Schnabel-Pro":2,gettin:8,Ehrlich:2,encloses:20,Assessors:4,"debt-burdened":1,"thirty-eighth":1,Mainly:6,overshadows:20,Currently:150,revocable:1,fables:4,Paley:2,enclosed:54,"university-educated":1,Sirinjani:2,kibbutzim:296,Walls:4,"re-injecting":1,Easthampton:2,Falin:2,Grudges:4,Goldschmidt:2,"protein-bound":1,"profit-staggering":1,"a-tall":1,Vance:2,"Jersey-based":1,"single-spaced":1,deduces:20,allying:8,Cargill:2,Internationale:87,subgross:1,deduced:54,Drabinsky:2,Collett:2,involved:975,Remus:2,"Landesbank-Girozentrale":2,"time-delay":1,Winger:2,"way-out":1,Organizing:2,involves:20,Davidowitz:2,"anti-militarists":4,counsels:20,"Jean-Jacques":2,dollies:4,sugar:25,tools:18,inconveniently:6,Cate:2,Dashiell:2,affording:8,zip:24,illegal:1,capriciously:6,afforded:54,toy:22,doubling:55,zim:106,Tribe:11,"gigue-like":1,Nernst:2,indpendent:1,opposing:30,"Zollinger-Ellison":2,Halfback:2,"public-owned":1,high:929,balls:4,retreated:32,dynasties:4,"Nucor-like":1,pour:976,rubberized:17,Barclays:74,fulfill:42,VISystems:28,"voice-activated":1,intimidations:4,Dietz:2,Diety:2,Diets:4,tiles:4,signers:4,pieces:4,Dodson:2,Excluded:17,pieced:17,purposed:17,Christmas:2,"Auto-parts":1,pretexts:4,swished:32,destroying:8,Sooner:381,Wave:11,bodegas:4,Wavy:1,Emeritus:2,Taek:2,puckered:14,"market-timing":1,abrasive:3,Godown:2,"pump-action":3,overridden:17,Ryan:2,Q:47,Kloves:2,hitched:54,ontological:1,ties:18,racks:4,autograph:25,"air-waybill":1,Annenberg:2,Uncertain:2,microbial:1,redundant:1,Risking:2,"John-Henry":2,Tortola:2,Defects:111,pyramids:4,racehorses:4,Financials:111,Millkens:2,erasing:8,Reconciliation:11,infelicitous:1,Jeopardy:11,"Computer-peripherals":4,Chesly:2,Evangeline:2,flopped:32,Nuclepore:2,"then-GOP":2,crabby:1,reinstated:32,surgeons:4,Blaggs:2,remorseless:1,Ganessa:2,"anti-growth":1,Doyle:2,derelict:22,archival:1,Dubai:2,animal:22,separators:4,chronological:1,transparent:3,Sarkees:2,going:5,"shantung-like":1,VII:2,Baskin:2,VIP:11,Kluckhohn:2,importunately:6,Garnett:2,Woolen:2,DeMontez:2,Gregorius:2,Wolverine:2,idiosyncrasies:4,"food-poisoning":22,Very:510,Miscellaneous:1,Vera:2,perversions:4,Bloody:2,"A.M.":431,"low-tension":1,tiredly:6,Vero:2,Francesville:2,"non-Swedish":1,"Byer-Rolnick":2,Mytton:2,thrust:428,Spend:39,Brenner:2,compulsive:1,"Dugan\\/Farley":2,hindering:30,distinctions:4,nationalisms:4,troublemakers:4,Figger:39,"coming-out":1,Kian:2,Kiam:2,Jamie:2,"anti-democratic":1,Inquisitors:4,"takeover-driven":1,gatherings:4,Prof:2,Fare:174,Gimbel:2,brimful:1,fascinating:1,ODI:2,Farm:11,behaves:20,detailing:8,courted:54,Farr:2,behaved:32,fluffy:1,"closed-door":3,sloppily:6,unoccupied:1,Tempos:4,"over-40":1,Connectables:2,Auctions:57,Jaycee:2,elite:824,Siddeley:2,"carboxy-labeled":1,"Burma-Shave":2,ITO:2,"bowl-shaped":1,ITG:2,ITC:2,extraordinarily:6,appealing:13,stricter:12,amble:39,ITS:404,ingenious:1,chromic:1,Pursuing:8,Asides:2,"MiG-23":2,Ahold:2,"MiG-26":2,Electra:2,Inventions:4,Electro:2,Coupling:8,Maksoud:2,"leather-bound":1,Tokoi:2,reloaded:32,infractions:4,Fujitsu:2,Particular:1,subject:977,persistence:22,tyrannical:1,Hughes:2,biplanes:4,Hughey:2,congregational:1,Horace:11,cabinet:22,fervent:1,unerringly:6,amortize:39,"more-distinctive":12,leafiest:51,Prisoners:113,metaphysical:1,Leaseway:2,"Time-servers":4,Hexen:64,Masahiro:2,Adelos:2,penning:8,Moorish:1,touching:5,"acid-rain":22,connective:1,rouge:147,"Trouble-free":1,rough:97,trivial:3,"B.A.T...":102,pause:24,Booths:4,Husker:2,"entry-limit":1,spiffy:1,Campion:2,Pischinger:2,"pay-later":1,cranks:4,lucks:4,"cigar-chomping":1,familiar:3,"light-mindedness":1,hypnotically:6,lucky:1,autos:4,Zsa:2,familial:1,"Corp.-USA":2,hoses:18,Sinclair:2,Barings:28,Maidenform:2,"U.S.-Soviet":66,Szabad:2,extremists:4,Werner:2,Gilmore:2,KIM:2,KID:2,intervening:8,summits:4,Chiusano:2,Guidance:47,lazy:1,Paulo:2,Source:47,aerogenes:4,"Teen-age":1,Oilgram:2,triples:18,Paula:2,coils:4,wire:25,dispensable:1,"mass-building":1,coily:6,quickest:51,Rickshaw:2,"crack-ridden":1,Sanderoff:2,Tribal:40,wiry:1,Rockford:2,Berko:2,scrolls:4,scolds:4,"large-package":1,specious:1,blitzes:4,Scams:4,Berks:2,interchangeable:1,FBI:2,Feruzzi:2,phonetic:1,Preserving:8,"computer-making":1,deficits:4,innocently:6,tripled:54,"boot-stomping":1,Vagabonds:111,Chriss:2,"light-industrial":1,Transvaal:40,Forgoing:8,Louisa:2,staved:17,coercive:1,Stapf:2,glowered:32,Diligence:2,Industriels:28,Soyuz:2,waste:205,Durer:2,Interfaith:1,homosexual:3,Sayers:2,revoltingly:6,slumping:30,Airborne:40,"pro-active":1,graphics:91,lumbar:1,Slightly:6,Honduras:113,Mistake:2,intradepartmental:1,wearied:16,Afrikaners:28,loathed:32,"history-making":1,pretentious:1,Interpoint:2,"Adios-Trustful":2,Chion:2,loathes:20,portwatchers:4,rollovers:4,"notebook-sized":1,"G.m.b":2,bourbons:4,AGENCIES:4,Strict:1,excessively:6,prefabricated:17,justiciable:1,eventshahleh:6,overcoats:4,"Good-bye":175,Kopp:2,glaring:13,joyously:6,conflicting:30,Porum:2,pumas:4,"golden-crusted":1,"billion-share":1,interconnections:4,cutsie:1,adherents:4,broccoli:4,expand:42,extradited:17,overcast:22,McGee:2,Challenges:978,Challenger:2,Meats:92,prospering:8,Matching:30,Gannett:2,"Seventy-seven":1,kiss:44,softening:5,less:979,Gourmet:2,Atreus:2,"XR4Ti":2,"off-line":1,Quota:2,Access:47,Howda:293,predicts:20,hauled:32,commandeered:17,Remaining:30,Milford:2,"Post-Dispatch":2,Puddingstone:2,Broken:98,"off-limits":1,combine:182,cosmetics:4,combing:30,Gleacher:2,mannered:1,"predict\\":33,rectilinear:1,Hits:4,Katy:2,"single-dose":1,Ferlenghetti:2,criminalize:39,"dark-gray":1,Kunste:2,Tartikoff:2,goings:4,Snopes:2,overdosed:17,Metaphysics:4,Roebuck:2,"epiphyseal-diaphyseal":1,molting:8,alkali:91,Warning:2,Pawlowski:2,Windhoek:2,Lasers:4,thinners:4,handspikes:4,carcinogens:4,"go-between":773,persecuting:8,CNW:2,portly:1,Bankrupty:2,Blenheim:2,Lavoro:11,"front-loaders":4,devaluations:4,Newly:6,"long-dormant":1,Chronicle:2,Fundidora:2,shone:32,legato:1,reimbursements:4,"crack-addicted":1,schedule:44,whiskers:4,"sweet-sounding":1,"SKr205":4,"briefly-illumed":17,abdominal:1,loans:18,"financial-market":3,hiding:55,"dirtier-running":1,mammoths:4,drumming:8,alginates:4,Corsia:2,Gibbon:2,Wallace:2,privatizing:8,Anadarko:2,"Mil-Spec":2,"hard-to-fill":1,Ordinaries:111,"anti-NATO":1,Filtered:17,Megane:2,afoot:218,mere:1,alreadeh:6,Bashaw:2,Nuit:2,spots:18,"mid-80s":4,misguided:7,Societies:4,Talent:47,Bacchus:2,suits:18,frise:64,Infrequently:6,clinically:6,"de-leverage":39,lithographs:4,"championship-team":1,detestable:1,Castel:2,chained:112,telesystems:4,"whole-wheat":1,corpses:4,"Tom-and-Jerry":2,informational:1,cordial:3,Synthelabo:2,slowing:55,"all-terrain":1,"proposed...":102,Shycon:2,planting:55,radiomen:4,Buckets:4,Elsa:2,forests:4,Else:6,Yugoslavia:11,"bond-equivalent":3,Prelude:2,Loss:47,"Ikegai-Goss":2,Lost:249,tides:4,elitists:4,dismantle:39,bunched:54,Grecian:66,Superposed:16,"best-preserved":1,"metal-benders":4,ambidextrous:1,reprovingly:6,Weissman:2,preoccupations:4,mercenary:1,Hygiene:2,Pyongyang:2,"high-value":1,"A.T.B.":2,wetlands:4,suicidal:1,Residential:40,encouragingly:6,Touting:8,Organic:2,Foont:2,"smooth-speaking":1,Buenos:2,"multimillion-pound-per-year":1,commandos:4,admixed:17,syndicating:8,Freeholder:2,bludgeon:63,Enforce:39,"Bangkok-Rangoon":2,clones:4,"health-care-services":1,McMillen:2,"no-hitters":4,regalia:4,Streetspeak:59,Beads:28,Beady:1,Intangibles:4,closeup:1,Mudd:2,Infants:4,viral:1,Duffield:2,Parametric:2,"low-concept":1,MAT:2,Spaeth:2,MAY:487,sonorities:4,"P.GA":2,"optical-fiber":3,MAC:2,"carry-in":1,MAI:2,Hess:2,Genova:2,Zairean:1,Sunrise:2,MAN:11,paperback:22,Paintings:4,prolong:39,Sighing:8,Daytime:2,rigorous:1,Metrically:6,planters:4,irrevocably:6,"S.S.R.":2,Southwide:2,irrevocable:1,"garden...":102,Dumbo:2,consisting:8,Kayton:2,Proverbs:4,"minority-owned":1,waddlers:4,"KC-10":11,interns:4,chowders:4,Jamaican:10,SYSTEMS:74,UNDER:127,Belway:2,interne:147,inhaling:8,Safeco:2,Solomonic:1,"up-jutting":1,pinning:55,pooling:55,Homo:47,"far-off":1,Subtitled:17,surely:6,Schwerin:2,spooks:4,"in-migrants":4,discontinuous:1,spooky:1,"loophole...":102,neutrons:4,sparkling:980,achievable:1,concomitant:3,fixable:1,Lighted:14,Star:129,Mailings:4,insult:25,Stag:2,Lighter:12,Stan:2,flng:39,tolerated:54,hereditary:1,"slightly-smoking":1,tolerates:20,fakes:4,striving:55,Torquato:2,overrun:185,spill:44,ORGANIZED:17,refusing:55,"residential-real-estate":1,blooming:55,crackers:4,Mussolini:2,Aiden:2,Standing:229,Blechman:2,mingling:8,Bays:2,fanciful:1,overheard:54,Lengthening:8,betide:39,"present-day":1,cites:20,"as-it-were":6,Wittenberg:11,gaped:32,Allwaste:2,Peake:2,Renee:2,Kashpirovsky:2,subpenaed:17,"Television-Electronics":2,Covia:2,Mustain:2,Ocean:2,lax:1,lay:981,outbursts:4,Weiner:2,"clean-bank":1,revved:32,egged:17,coursing:8,stimulate:42,counseled:54,"open-work":1,baying:21,triggering:8,Exteriors:4,Regional:40,freights:4,satisfied:834,wrathful:1,deducted:54,"pension-industry":3,satisfies:72,dapper:1,Broke:2,"money-broking":1,BRUT:2,clearances:4,Evan:2,insolently:6,strafe:982,Asea:2,unacknowledged:1,shear:25,eventually:6,Hackensack:2,Calmat:2,"satellite-launch":1,Midge:2,liras:4,Ignoring:8,break:182,repulsive:1,pastdue:1,Arrow:2,President:11,divesting:8,pegs:18,Control:11,Calpers:2,Feldemuehle:2,alternately:6,"class-based":1,"end-to-end":1,entitled:54,Agriculture:11,overpopulated:17,Sparky:2,Candlelight:11,Sparks:511,Mythological:1,GASB:2,Aside:477,Churchillian:1,Bonnie:2,"War-related":1,Cahn:2,"all-Spanish":1,spicing:8,network:25,gridded:1,beefing:8,diesel:22,fellows:4,buoyed:54,unkempt:1,Oeschger:2,"hyper-competitive":1,Jeanne:2,"seventh-most-admired":1,Committees:123,Originally:150,Transcat:2,coldhearted:1,commercially:6,smacking:8,"Medi-Mail":2,"N.Y.":11,delves:20,writhing:5,National:983,Titanium:2,licked:32,"processed-meats":4,delved:17,"alcohol-producing":1,Depression:11,NORDSTROM:2,Cherokee:2,radionic:1,Kushnick:2,Guatemalan:66,"pan-European":1,tangle:24,Secretaries:65,Whirlpool:2,irredeemable:1,"street...":102,rated:81,"president-marketing":1,reimbursed:54,armata:2,Sorrow:2,vibrate:39,interrelationships:4,immodest:1,rates:18,"Federal-Mogul":2,purposefully:6,aberrantly:6,Moulinex:2,"insurance-holding":1,"oil-consuming":1,Boesky:2,"self-governing":1,"Da-da-da-dum":1,"tabloid-style":1,target:24,unexplainable:1,Dornan:2,"turbo-charged":1,Allah:2,Allan:2,tackles:72,"twin-rotor":1,unmistakably:6,iron:25,Browder:2,tackled:17,contrasted:54,tipping:55,Ghiberti:2,"self-confident":1,EXBT:2,horribles:4,longitudes:4,Sorrentino:2,Reaganomics:2,numenous:1,"touch-screen":1,overlays:20,Compania:2,Sorrentine:2,Bjerre:2,forced:81,"self-served":16,pleural:1,"rate-of-return":1,Declaring:8,"self-defense":22,indexes:4,confabulated:17,"F.H.":2,forces:18,indexed:14,swims:20,isotonic:1,KEEPING:8,extending:8,"anti-Rh":2,Cobra:2,Colavito:2,"gray-market":1,inferred:32,"revenue-producing":1,Lewin:2,Battered:17,Thayer:2,dioceses:4,fitted:45,Bhabani:2,precarious:1,HERS:2,respectfully:6,Armistice:2,toast:25,Prairie:11,Soupy:1,versed:17,booing:8,blighted:45,squirmed:32,"protein-making":1,screening:21,columbines:4,herded:54,explorations:4,Rolodex:2,OMB:2,Wakefield:2,CHIEF:1,Muzyka:2,minarets:4,congealed:32,happiest:51,Crime:47,"industrial-production":1,OIL:11,OME:2,sealants:4,explanations:4,"non-Catholics":28,liberalizations:4,inns:4,human:3,"rocket-propelled":1,reproductions:4,"once-closed":1,Incumbent:2,Assiniboine:2,obsoleted:17,MEXICAN:1,Auto:47,"INTER-TEL":2,caved:32,Sardi:2,plummeting:8,bien:64,Digi:2,"a-reflects":20,Takuro:2,caves:4,Amylin:2,Leamington:2,Inglewood:2,Simonelli:2,husky:1,Dousman:2,"Shiu-Lok":2,clues:4,intelligent:1,scrutin:64,Speedway:2,Waking:8,"economic-crime":1,"forty-year":1,searchings:4,Milkens:28,Harrell:2,tough:121,"best-tempered":1,bestows:20,dimwitted:1,"turbine-engine":1,Wuon:2,Galantuomo:2,Shout:39,Bulba:2,Shoup:2,Alfons:2,Hernandez:2,knowns:4,Herrman:2,untarnished:1,Womack:2,refurbished:17,intriguingly:6,"index-arbitrage-related":1,thrice:6,repelled:54,relaxing:30,millionth:1,hoist:39,spelled:54,VanSant:2,"two-stroke":1,McIver:2,inhibit:42,stomped:32,thenceforth:119,Trend:2,Groat:2,"super-rich":1,pungent:1,"B.V":2,Billions:4,entertains:20,Guggenheim:2,Hopedale:2,weakens:20,"tax-deductions":4,crowning:13,straits:4,exile:25,"import-export":1,Underberg:2,"post-quake":1,outclassed:17,"Christmas-tree":1,"non-Castilians":28,grapple:39,accumulating:30,unlaundered:17,convictions:4,Perskys:28,necessities:4,nil:1,exuded:16,swell:50,Svenskarna:64,devalued:32,hyperbolically:6,outmaneuvered:17,Roberts:2,wispy:1,Emotionally:6,hopping:8,figural:1,Skulls:4,huddling:8,ragged:1,goals:4,studying:55,"securities-firm":22,Emmons:2,Randolph:2,Memorial:2,mingle:42,quoted:320,"shell-shocked":1,quotes:18,"late-in-the-day":1,curb:63,"one-minute":1,clamped:32,Rumanians:28,Certificate:47,Reifenrath:2,Vivian:2,Cluggish:2,evidences:4,Pendleton:2,"pre-dawn":1,chides:20,LaMore:2,demolished:54,Bougie:2,Alice:11,schematically:6,"WATKINS-JOHNSON":2,"high-pressure":1,reusable:1,Scotts:2,Scotty:11,McKee:2,slouches:20,Scotto:2,soar:42,Flumenbaum:2,Heretofore:6,Brandenburg:2,Tiny:40,Ting:2,rile:149,fulminating:8,Tina:2,"pl.":2,Cartwright:2,unrivaled:1,cede:39,humor:25,"sinking-fund":3,reflexively:6,unavoidable:1,Guilford:11,leered:16,Gifts:4,disillusioned:14,honoured:17,enticingly:6,unavoidably:6,singed:16,School:11,Obstacles:4,Tandler:2,marketing:671,ply:149,Geodetic:2,Seeds:4,Evegeni:2,Holders:123,properties:4,Ostrovsky:2,aerosols:4,"W.S.":2,"Griffith-Joyner":2,newspapers:4,Packs:28,Ladislav:2,Conrades:2,Prince:11,"G.D.":2,tropho:1,"Eighteenth-century":1,Essen:2,treble:104,considerations:4,Donaldsonville:2,"Qintex-MGM\\/UA":2,"car-owners":4,prisoners:4,overbilling:8,FORGN:2,"Bros.":74,Sault:2,"dry-ice":1,Rosow:2,"Vol.":2,quirks:4,Barsky:2,accords:18,"Non-performing":1,Finkbiner:2,lowest:138,emulated:17,COMMITTEE:2,backrooms:4,snowy:1,Stubblefields:28,navigational:1,snows:18,McClave:2,NEWHALL:2,astonished:54,"pre-set":1,overrules:20,Torch:2,detribalize:39,braved:32,overruled:32,Greenspan:11,"economic-restructuring":1,emotional:1,Odd:2,Volz:2,"female-headed":1,Olds:2,TWA:2,conserves:20,scandalous:1,abstract:466,opportunistic:1,"born-again":1,howling:8,conserved:17,apoplectic:1,"medical-instrument":1,TWX:2,wintry:1,"well-advised":1,newsstands:4,Piedmont:2,stake:44,parklike:1,holding:5,shrink:63,scored:984,"rent-free":1,spectrally:6,"non-operating":1,scores:18,"coup-proof":1,Hirohito:2,Branchville:2,maddeningly:6,bestowed:54,telescopic:1,Printout:2,Oopsie:2,McMeel:2,Andrena:2,gyrate:39,Cheerios:28,Weisel:2,"Ore.":2,"MD-11":2,wrested:32,Nakagawa:2,Cosmair:2,"%...":102,switches:18,"good-till-canceled":1,devoted:45,hovers:20,disapproves:20,Eromonga:985,released:54,SANTA:2,devotes:20,disapproved:32,donned:16,Orel:2,Brouwer:2,"tradition-minded":1,Policeman:2,bilinear:1,seemingly:6,Joker:2,Jokes:4,unblemished:1,Proler:2,Teck:2,unbundled:17,"T-45":2,Erlenborn:2,"capitalist-democratic":1,steeply:6,smooching:8,Contracting:55,Armitage:2,guitars:4,Innovative:1,hypophysectomised:17,disqualify:39,Hartley:2,upper:986,tempts:20,temples:4,Wilton:2,Okura:2,discover:42,"federal-local":1,upped:32,Orange:129,ASEA:2,penetrated:54,Nickles:2,blotches:4,cryptographers:4,Charming:66,Delight:2,saluting:8,Weisbrod:2,sleepwalked:16,Jericho:2,jocularly:6,Soups:2,genes:4,Treitel:2,Quiet:66,rodeos:4,Marlo:2,Underserved:2,"leisure-related":1,Wis:2,theorize:149,"satellite-delivered":1,hydrostatic:1,hops:72,patriotic:3,petitioned:32,tippling:1,"portfolio...":102,homeward:6,"capital-gains-cut":1,Seung:2,Neitzbohr:2,Different:66,marked:391,immunized:17,sincerely:6,seaports:4,Greenspon:2,market:987,Bonita:2,flavors:4,"super-status":1,"Paris-based":1,Thuggee:2,Retrace:39,Cities:65,angels:4,uncountered:1,menstrual:1,"acquisitions.s":4,molecules:4,Lorelei:28,Required:17,Twinsburg:2,breathed:32,"year-over-year":1,Unmanned:1,intrapulmonary:1,Spady:2,Subs:2,Halle:2,mayors:4,foci:4,SBA:2,hope:563,OBERMAIER:2,Spada:2,miscalculations:4,stimulating:30,metallurgical:1,relaying:8,Angier:2,nomenclatural:1,Resort:2,posing:8,Britons:65,Effie:2,matinees:4,Keck:2,infantile:1,writs:4,DATA:2,"home-service":1,"buttoned-up":1,flourishes:18,amputated:17,Spic:2,Addabbo:2,Kieffer:2,Spin:2,gobbling:8,Powder:11,teahouses:4,staffers:4,"kitchen-sink":1,"soil-removal":1,Krysalis:2,Malenkov:2,ADVERTISERS:4,heroes:4,Shagan:2,Wilhite:2,"center-vented":1,futures:4,Chayefsky:2,"big-tube":1,Hamburgers:113,fortuitously:6,STRUCK:32,Exporting:2,"space-time":1,Phnom:2,"risk-takers":4,curiosities:4,"F-4":2,Amcor:2,aiding:8,"working-capital":3,"fund-raising":22,bartered:17,Hindes:2,tending:55,Pravo:2,Mesta:2,curly:1,birthdays:4,curls:18,unuttered:1,distortable:1,analeptic:1,incumbencies:4,Grubb:2,Norfolk:2,disparate:1,lumbering:3,Dynoriders:2,gouverne:64,"thin-tired":1,Kenosha:2,"age-discrimination":3,shoplifters:4,Ludwigshafen:2,discuss:42,expedite:39,calipers:4,commercialized:17,Mountaineering:2,prospers:20,Regulations:57,cliffs:4,"bas-reliefs":4,uncoiling:8,Swaps:4,woolens:4,oppposes:20,Barkin:2,supplant:39,Tumazos:2,Swapo:2,counteract:39,avoided:81,Verloop:2,Krohley:2,Oskar:2,accomplish:42,Substances:4,Vermouth:2,"per-day":1,snidely:6,rebuilding:55,"cross-cultural":3,Pierson:2,"most-prestigious":1,offhandedly:6,riskier:964,Blind:66,"white-columned":1,Shelbyville:2,Tournament:11,kingdoms:4,"discount-store":22,Shawn:2,"blue-black":1,"Swiss-German":1,"travel-related":1,inevitabilities:4,Tsunozaki:2,Almanac:2,"hurricane-ravaged":1,TED:2,Landry:2,yourself:53,Hollywood:2,monopolizing:8,Briksa:2,Sparta:2,dawns:20,victorious:1,Schorr:2,artless:1,thar:6,thaw:25,that:988,inmates:4,flowers:4,than:989,Conferences:41,REVISED:17,reconvened:17,Fogelman:2,"not-quite-mainstream":1,DeMunn:2,gobble:25,reconvenes:20,"non-traditional":1,Veronique:2,Vallee:2,Leverkusen:2,Cherry:2,"W.J.":2,FXTV:2,Dynapert:2,"less-sweeping":1,"just-completed":1,Valley:2,Playes:2,lumpy:1,nervy:1,lumps:18,terrific:1,Hoyle:2,nuances:4,similiar:1,swelled:112,Sean:2,"Dingell-Waxman":2,Kimmelman:2,heaters:4,winless:1,"Sleep-disorder":1,Bahre:2,"man-bites-dog":1,expertly:6,analytically:6,"hot-shot":3,interacting:55,"storm-damaged":1,"bicycle-auto":1,Bursting:8,Akademie:2,McArthur:2,Gidwani:2,"growth-oriented":1,"see-through":1,"well-stuffed":1,erred:54,Ghazel:2,concurs:20,excerpts:4,battens:4,"Maoist-style":1,Proskauer:2,watching:55,"MSX-run":1,pastrami:4,MARCUS:2,trenchant:1,antithyroid:1,Northfield:2,Okla:2,leather:22,Felix:2,Buker:2,reorganized:81,"long-opposed":1,"Pro-Iranian":2,Invariably:6,reorganizes:20,Jock:2,Yugolsavia:2,"tax-advantaged":1,derogatory:1,examinin:8,Mandarin:40,Finks:2,flatly:6,hypodermic:1,"mom-and-pop":1,Bobo:2,feuds:18,Varitronic:2,Maneuvers:4,garde:64,analyzes:20,Matritech:2,Marco:2,analyzed:54,Squadron:2,vrai:64,stipends:4,revellings:4,"Mayor-nominate":2,Cinema:2,tutors:4,Primary:66,Moraine:2,segmental:1,assaulting:8,reluctantly:6,wheels:4,Sulka:2,nearby:97,Feenberg:2,monochromes:4,fungicides:4,"KLM-Northwest":2,Bourguiba:2,Holzfaster:2,"no-smoking":1,"no-load":1,pulverized:17,Bets:4,olives:4,cycling:21,Frohock:2,cares:72,"low-class":1,invert:39,"Six-Day":2,cared:32,Beta:129,"credit-financed":1,wolde:190,"two-mark":1,outweighed:32,Beth:2,"Assn.":2,Marcy:2,avian:1,magnetics:4,Kozintsev:2,Yokuts:2,homely:1,file:182,foggy:1,"cost-prohibitive":1,Flick:47,"ex-furniture":1,Yamada:2,UFO:2,Northington:2,grevouselye:6,OWNER:2,"Alaska-based":1,"trade-up":1,"legislation-delaying":1,"political-reform":1,"two-fisted":1,Flexible:66,Hitch:2,"co-managers":4,worry:182,Gritten:2,widows:4,Complete:990,Sixth:40,Moira:2,hartes:4,Lannon:2,poetic:1,"cc.":19,NSPA:2,figures:18,outmaneuver:39,centuries:4,"BIO-RAD":2,nestled:54,Rafter:2,patchwork:22,immeasurably:6,Outboard:40,agreeing:8,immeasurable:1,Andres:2,coordinate:551,defers:20,Nazi:40,charged:45,"rail-mobile":1,Jimmie:2,Biagi:2,"Kool-Aid":2,"Zen-like":1,Poseidon:2,dancers:4,beveling:8,"Minn.":2,"spots...":102,wrecks:4,Maruzen:2,Loudspeakers:4,Swissair:2,Nueva:2,thinking:9,ketches:4,Winchell:2,Kolpakova:2,congeal:39,seams:4,conferees:4,Minna:2,Grands:2,seamy:1,typographic:1,allocates:20,Occidental:2,warehouse:25,Grande:87,Fishermen:4,Minny:2,Andrea:2,dumpy:1,burrowing:8,outcrops:4,streamers:4,Effectively:6,Raskolnikov:2,Aroused:17,apologists:4,"counter-cyclical":1,orgiastic:1,ghostlike:1,Telephone:11,USSR:2,"Squat-style":1,Scrimgeour:2,"Hoa-whup":106,Asbestos:11,Woodrow:2,Cressidas:28,"on-set":1,Luger:2,copings:4,hustle:63,Rimanelli:2,uncorrected:1,chefs:4,flinched:16,"still-ticking":1,sniffs:20,"Trans-Mediterranean":2,"seat-back":1,sniffy:1,vacillate:39,hampers:20,"just-announced":1,HOT:66,"stake-holding":1,Ventures:74,Galecke:2,"D.,Texas":4,Story:11,"less-than-carload":1,unbounded:1,"color-coded":17,Stork:2,organics:4,Ade:2,Storm:47,Ada:2,elementary:1,Ado:2,garrisoned:17,nowadays:6,Store:2,Adi:2,Tactically:6,grates:4,Chiappa:2,forwarded:17,"orange-and-white":1,exonerated:54,Gendron:2,mellowed:17,cats:4,reintegrated:17,"anti-Japanese":1,"computer-assisted":1,burnings:4,tabulations:4,Mushkat:2,Mollusks:4,Richey:2,J:403,gunners:4,posterior:1,multitasking:55,attainable:1,Ruskin:2,"on-sure":1,whirring:8,"middle-sized":1,communitarians:4,Geo:2,"U.S.-backed":1,lawfully:6,disbanding:55,farrowings:4,Respecting:8,overpay:39,Shochiku:2,tones:4,sallying:8,cowbirds:4,Satoh:2,Biomet:2,Labans:2,remembrances:4,Yonkers:2,Coasts:111,Duque:2,restores:20,midweek:3,godamit:39,gradients:4,Monica:2,elemental:3,"million-dollar-a-year":1,afflicting:8,semiarid:1,Colon:47,Malvern:2,Baldrige:2,authoritarian:1,perils:4,Roscoe:2,teeth:991,NewVector:2,unattractive:1,Mexican:66,Modern:129,homered:16,"merchant-banking":3,repay:42,"M.G.":2,embracing:8,"optical-products":4,Prideaux:2,"home-market":1,Tilly:2,infestations:4,twigged:16,upholds:20,renege:39,messy:1,revoke:39,"duty-free":1,brunettes:4,dreadful:3,mating:122,Lipsky:2,icons:4,eventfully:6,"deep-rooted":1,Pilate:2,azaleas:4,lifters:4,"single-job":1,transducers:4,voicing:8,Ashkhabad:2,coups:4,Prechter:2,"alternative-fuels":176,"nuclear-powered":1,"single-A-plus":117,Undertaken:17,securely:6,"common-share":1,Bentley:2,heaved:32,"Price-earnings":1,"En-lai":2,inversions:4,heaves:602,"defense-related":1,Schlesinger:2,"cost-cutting":3,"three-spoked":1,Goliaths:65,excitements:4,attributable:1,Egan:2,"forward-rate":1,Egad:106,Bratislava:2,Lumiere:2,belching:21,Takayama:2,amatory:1,certificates:4,"highest-volume":1,"bit-like":1,peptidases:4,rutabagas:4,edited:54,Stokely:2,Rabbi:2,modular:1,"B-1B":129,grudges:4,Hatchett:2,Jerald:2,Azara:2,multipartisan:1,"B-1s":28,Northampton:11,exceptionally:6,Pothitos:2,creepy:1,SIDE:2,Zappa:2,amount:44,fancier:12,"refined-petroleum-products":1,"Sharp-witted":1,shuffle:44,Plateadas:2,Sparkling:2,Boake:2,locates:20,analyzing:55,trained:45,pulverize:39,Dinkins:2,ripe:1,Asarco:2,"drought-ravaged":1,watersheds:4,bilking:8,"whole-word":1,autographs:4,swiped:32,Maximizing:8,ejected:54,regrettable:1,"tri-state":1,"Australian-based":1,Fastenal:2,commenced:32,moistened:249,regrettably:6,Blackhawk:2,Justinian:2,weathering:21,jackhammers:4,synthetical:1,Steppan:2,Calverley:2,polysiloxanes:4,Globex:2,hairdos:4,playable:1,fancied:16,velociter:64,biographers:4,Buyers:4,thermostatics:4,Legion:2,COHERENT:2,fillies:4,"no-mistakes":1,orators:4,Tanii:2,ledges:4,"one-ship":1,woodsy:1,Barrett:2,Kaminski:2,"board-level":1,"three-boiler":1,Birgit:2,"Japan-U.S.":1,Lestoil:2,headquartered:17,Recruit:11,"beyond-normal":1,Kaminsky:2,malnourished:1,UNVEILED:16,Matisse:2,contrived:14,Researching:8,"index-arbitrage":22,snazzier:12,McKENZIE:2,"methanol-gasoline":1,Domenici:2,"T.S.":2,Illinois:2,"brown-edged":1,Horst:2,unfertilized:14,estancieros:4,Dresbach:2,reminiscences:4,dummies:4,"benefits-for-all":1,Vizas:2,AON:2,lateral:1,solving:8,interloping:8,Ahlerich:2,followeth:20,relate:149,peanuts:4,Surgeon:2,Zayed:2,Macari:2,temperatures:4,repatriating:8,BROAD:2,demographics:4,Bulow:2,Macare:2,motivates:20,moaning:8,ADVERTISING:2,"training-wage":1,"belt-tightening":4,towering:13,Dominic:2,Sturch:2,Allemands:2,dulled:17,attacks:18,"out-of-synch":1,cleaners:4,duller:136,yearningly:6,"middle-priced":1,Threadgill:2,Exhibition:11,tode:17,inspections:4,steered:32,Pagong:2,Mangino:2,"cave-like":1,bale:78,grimace:25,meteoric:1,Locate:39,expansive:1,bald:1,"wine-making":22,Plaza:2,According:229,MediVision:2,vigorous:1,touchstones:4,resettle:39,earliest:380,Researchers:123,"poultry-loving":1,revolutionary:3,"Front-line":3,Pater:2,liaison:22,Patel:2,"Euro-ashtrays":4,corrupting:5,financed:81,"cut-and-dried":1,cetera:80,booboos:4,Manson:2,Durable:1,whirling:5,industrially:6,"Detroit-area":1,loadings:4,Callender:2,Waksman:2,harmlessly:6,SHAREDATA:2,generalities:4,"line-hand-wired":1,Feels:20,LaCroix:2,Threaded:17,antibacterial:1,biochemists:4,blindly:6,taxable:1,Prosser:2,Parkway:11,Athalie:2,Gravelle:2,"debt-happy":1,lament:25,"Winn-Dixie":2,McKellar:2,Stiling:2,Turchin:2,Officials:92,Mimesis:47,Guillermo:2,quacked:16,sentenced:54,forensics:4,Selkin:2,Regions:57,Kimberly:2,"political-action":1,Kasper:2,policymakers:4,sentences:4,congresssional:1,Kaman:2,Kamal:2,soubriquet:64,Witt:2,curbside:22,"anti-U.S.":1,Stram:2,Galilee:2,Drogerias:2,comprehended:32,showcases:4,Galileo:11,Forked:2,With:124,Spirit:11,Obligingly:6,Celtona:2,Zalubice:2,Permanente:2,approves:20,Chagall:2,Ragu:2,Economically:6,mobile:1,performances:4,Brachfeld:2,snapping:55,Melodramatic:1,Seagle:2,hints:18,nonspecific:1,"Colgate-Palmolive":2,Etsuko:2,Zuckerman:2,stunned:112,celebrities:4,"plastic-body":1,impressively:6,multilateral:1,octaves:4,dimension:25,Dandy:2,grafted:7,Populaires:2,parameters:4,Braathens:2,Transports:4,"pooling-of-interests":1,SENATE:2,flights:4,"prior-notice":1,beauteous:1,inadvisable:1,flighty:1,Guys:4,frogmen:4,Hypotheekkas:2,quibusdam:64,"once-sleepy":1,albeit:206,"blood-flow":4,dealings:4,Pesticide:2,Jefferies:113,"Eq.":47,Bottorff:2,intensify:42,representives:4,Brecht:2,gels:20,transgenic:1,vanquish:39,hobbles:20,"Ying-shek":2,Lorentz:2,double:647,hobbled:17,Huron:2,Hurok:2,Wustman:2,throwing:55,plausibly:6,plausible:3,accelerators:4,probable:1,Brains:4,"Minato-Mirai":2,Wirth:2,Blain:2,probably:6,cautions:72,Wirtz:2,bigots:4,Sant:2,"less-binding":1,unserious:1,Prandini:2,subnational:1,Constable:2,generous:1,Conceding:8,Sang:172,Sand:11,Sane:2,Chemfix:2,Sann:2,"pinstripe-suited":1,JUDGES:4,delimit:39,"Pte.":2,polyrhythms:4,"Playboy-at-Night":2,"truck-rental":1,vaster:12,Keegan:2,Wooten:2,breakneck:1,parakeets:4,whatever:992,steely:1,homogeneously:6,Love:936,steels:4,"Hanover-Justitia":2,Shaker:2,Khartoum:2,hirelings:4,Shaken:14,collectible:1,"art-acquisition":1,Metronome:2,ruble:80,deter:42,"Universal-Rundle":2,VaxSyn:2,tactual:1,Todays:2,battling:55,animates:20,Cursed:17,"shop-by-catalog":1,fleas:4,fleet:22,animated:103,"debt-restructuring":1,flees:20,gala:3,clobbers:20,"topof-the-line":1,Bauernfeind:2,copiers:4,bellowed:32,"steel-recycling":1,loosened:54,simian:1,Mysteries:74,faires:4,fairer:12,riotous:1,Industriel:64,autopsied:17,FAX:2,counterclaims:4,seismographs:4,FAR:6,Understanding:55,subliminal:1,unpromising:1,FAI:2,autopsies:4,"mid-November":11,FAC:2,Schimberg:2,lawyers:4,Testaments:2,robustly:6,cleaning:21,ENFIELD:2,Payco:2,Standardized:1,indefinable:1,Distances:4,comas:4,Kurtz:2,"bank-embezzlement":1,"shoe-horned":17,headlining:8,Savimbi:2,Kurth:2,savvy:412,Interama:2,abstain:42,Exchequer:11,judgments:4,CCT:2,"game-shows":4,Bernard:2,CCK:2,CCD:2,CCC:2,"Middle-South":40,"cast-iron":22,"over-the-counter":34,Gratt:2,Proving:2,Pimen:2,buckboards:4,Rafael:2,"heavy-faced":1,Cerinvest:2,fabulously:6,defies:20,Shimson:2,Arkoma:2,LASHED:16,"Messrs.":993,overthrown:17,defied:32,Cincinnati:113,outselling:8,manifest:586,Surgical:2,"R.B.":2,Celimene:2,ingratiating:1,"Britain-dominated":1,"mouth-to-mouth":1,"G-24":2,refracted:16,saddled:45,centralize:39,Little:294,parade:78,fathers:4,some:994,wohaws:4,"one-way":1,saddles:4,Boddington:2,lifelike:1,Donors:4,Moscow:2,stagger:39,Moscom:2,sophomores:4,Bonasorte:2,Arriving:8,slapstick:22,dehydrate:39,Cygnus:2,Schelling:2,fibrocalcific:1,raspberry:3,neutrophils:4,react:42,"good-humored":1,concretely:6,tracing:5,"in-depth":1,"Dyncorp.":2,Sandor:2,Committee:11,Committed:17,Sandoz:2,"Trans-illuminated":1,Silone:2,Eli:2,Elm:2,encircling:8,Turgut:2,"supra-personal":1,Ely:2,"half-swamped":1,Marlboros:28,Kamieniec:2,revealing:30,Designs:18,statistics:4,innate:1,pavian:64,Gathered:17,bantering:8,"bear-like":1,Gatherer:2,newsworthy:1,Needham:2,Sutton:2,"three-member":1,Pathet:2,approvingly:6,Peacocks:4,Klinico:2,reiterated:32,Microbiological:2,"get-rich-quick":1,"women-trodden":1,reiterates:20,"Tampa.":2,Lewiston:2,facilites:4,duds:4,microorganisms:4,restarted:54,stumbling:5,Packards:28,Helena:2,cautiously:6,Helene:2,Straub:2,Cremonie:2,Personnel:130,Elrick:2,overweighted:17,metals:4,Mahatma:2,"non-horticultural":1,"A$":84,deconstructed:1,Promenade:2,contenting:8,preflight:22,pronouns:4,Oncotech:2,indecipherable:1,Siebel:2,Weapon:2,"order-matching":4,AA:10,draw:95,Lutte:2,Reverse:42,Putas:2,crouching:8,NCTA:2,AM:158,AL:2,AN:246,Ziffren:2,drag:24,AT:124,drab:1,Coronation:2,Silvercrest:2,structure:25,"sun-warmed":1,Ad:47,Taunton:2,Ah:995,Am:31,Al:2,An:996,pamphlets:4,As:206,tandem:22,Au:280,"genetic-engineering":1,Aw:341,Av:2,Crete:2,Ax:2,bogging:8,Establish:39,BRAINTRUSTERS:4,Gie:2,Gin:2,Gil:2,Revision:2,"Anti-union":1,"obedience-trained":1,Benchmark:1,attackers:4,Garine:2,"small-town":1,moribund:1,Kaysersberg:2,"drab-haired":1,Xavier:2,Strieber:2,Feeling:8,slopped:16,Decoma:2,Wallachs:2,Christiania:2,homicidal:1,stiff:104,Brisbane:2,gender:25,button:25,Bizet:2,catastrophes:4,"Scotch-Irish-Scandinavian":2,comforts:4,"drag-down":1,"Euro-Communist":2,Marist:2,"anti-development":1,FOREIGN:66,naggings:4,carted:32,plays:639,Celebrating:2,ribald:1,Bronislaw:2,SLOGANS:4,Properly:6,poles:4,pristine:1,"more-mainstream":1,Jagt:2,Tipoff:2,Sealtest:2,filings:4,ventilates:20,adulterate:39,Egger:2,"L.F.":2,"news-oriented":1,Verde:2,withdrawing:55,"non-defense":1,Utter:2,commendable:1,addresses:18,lords:4,"C&D":2,Kurigalzu:2,Avantor:2,addressed:81,"C&W":2,"News-American":2,"C&P":2,inhumanities:4,"one-point":1,recused:17,SALARIES:4,"experimental-theater":1,popped:32,Disorderly:1,dentists:4,carvings:4,testified:32,Wednesday:2,Priorities:28,whisks:20,cackly:6,testifies:20,Sanaa:2,Mahwah:2,Panicked:1,"life-contracts":1,Cited:17,MARK:2,junkless:1,retried:17,Nevada:2,Cites:20,control:139,"business-oriented":1,Kenya:2,rejoining:8,thermally:6,Yost:2,hit:997,Sesshu:2,fearsome:1,stemmed:32,HIS:998,falls:72,"Jell-O":2,Tidewater:11,HIB:2,allrightniks:4,FICO:2,Rarer:12,"re-use":39,immoral:1,hafta:42,Jeyes:2,Nationalistic:1,Alaskan:66,Campania:2,afterburners:4,Thorpe:2,Figures:57,Perdue:2,whistle:44,"Suez-Hungary":2,gulps:4,Marcel:2,tendentious:1,hid:32,"uni-directional":1,Wilson:2,soggy:1,Phillipe:2,"mass-distribution":3,Scannell:2,Phillips:113,Holleran:2,"drug-seeking":1,cruise:78,tiptoed:32,EGA:2,Developers:123,WITH:127,hock:25,brood:70,Stanton:2,"pyramid-shaped":1,Exchange:11,masses:4,notebooks:4,"back-offices":4,pensioners:4,Bullets:4,"judge-made":1,massed:32,demoralize:42,surrounds:20,Dresbachs:28,Cowrtiers:4,nibs:4,front:168,announcers:4,refuel:39,"Guber-Peters":303,entitling:8,testings:4,muff:25,Alpharetta:2,seniors:4,showering:8,TRANSPORTATION:2,despots:4,flunked:32,Madden:2,crest:25,"local-control":1,Floss:2,"ill-disposed":1,corticosteroids:4,stimulants:4,Decimalists:28,shambled:16,swimmers:4,Vyquest:2,edentulous:1,Castile:2,Selecting:8,may:487,Fords:56,depreciating:8,"peace-loving":1,Philistines:28,Housewives:4,VisionQuest:2,Diron:2,Iberia:2,JOINS:20,undo:39,Outrageous:2,"care-free":1,"twenty-five-dollar":1,Traxel:2,lanced:17,"tailpipe-emission":3,Gilberto:2,globulins:4,strapping:450,Strindberg:2,prospective:1,Murjani:2,"Mor-ee-air-teeeee":2,pitied:32,"I.S.":2,art:78,quality:999,Thalbergs:28,overestimate:39,"Burroughs-Wellcome":2,journals:4,unequivocal:1,Employers:56,"non-network":1,"pro-ALPA":1,man:1000,"net-profits":1,"fine-tuning":1001,"nine-chambered":1,punish:42,"Vt.":2,Lacroix:2,Leaning:229,Argive:2,"Sauter\\/Piller\\/Percelay":2,"extended-wear":1,Dormitory:2,specimens:4,Waddell:2,function:44,"elections-an":1,Tenda:2,Richard:74,pampas:4,"small...":102,"\\*\\*\\*":451,recessed:17,Pugo:2,Pugh:125,need:1002,cosmopolitan:1,Caves:2,assurances:4,pursued:81,Vowels:4,aftermarket:3,purchasing:9,Shirl:2,"Rabble-rousing":1,Merry:40,Carboloy:2,"combat-tested":1,Steinhager:2,silicates:4,goddamned:1,refocusing:21,Amro:2,Builds:20,"on-campus":1,connected:81,Mississippian:2,stereo:22,topographic:1,scrambles:4,radiating:8,undeniable:1,"military-electronics":4,upset:1003,"Richardson-Merrell":2,scrambled:85,Kurtwood:2,Yujobo:2,Sonny:2,Ian:2,unmethodical:1,SERVE:33,Shakespearean:66,"well-being":22,"C-20":2,Stallone:2,soldiers:4,"low-sudsing":1,Public:129,"self-absorbed":1,creamed:17,CHARIOT:2,cavort:149,Underwriters:92,outflank:39,Aouelloul:2,expensive:97,thunderous:1,Specialists:4,thresholds:4,"post-electoral":1,gratify:39,Finney:2,improvident:1,Packard:2,"all-student":1,Coat:2,"non-New":1,Haber:2,manholes:4,joint:3,Coan:2,legitimate:1,joins:20,"Rangoon-Bangkok":2,sassy:1,Matthias:2,Zimbalist:2,conservators:4,incubi:4,Aramis:2,trammel:39,lyric:3,Cleland:2,computed:14,Wolfes:28,Zinman:2,"pension-fund":22,"three-to-five-page":1,Mysterious:66,Marunouchi:2,"health-expenditure":1,tabacs:4,"Western-Mobile":2,catecholamines:4,"French-language":1,Ticonderoga:2,Saitoti:2,realign:39,Harvard:11,masking:55,juggle:39,SWIFT:2,Transgenic:2,castoff:1,Mitsu:2,"simple-minded":1,Manganese:2,Thereafter:6,"Land-O-Sun":2,Kennel:2,eulogize:39,paraphrasing:8,"American-China":2,histrionics:4,BEEN:17,middles:4,"a.m.":1004,publicized:14,undermined:45,bearing:5,Matthew:11,Leeward:2,maximize:42,MAKERS:4,Goodson:2,"non-Tagalog":1,industrials:18,Malesherbes:2,Mired:2,Nourbakhsh:2,Rockfork:2,Develops:28,Ursuline:2,"Schmidl-Seeberg":2,"Pre-refunded":1,Invercalt:2,listing:21,c:1005,Livingston:2,Pasztor:2,corks:4,Aviacion:2,Masonry:2,shameless:1,Cartons:4,riddles:4,undermines:20,"bumper-to-bumper":1,harder:1006,"three-fold":1,"much-thumbed":1,harden:39,"negotiations...":102,Resrve:2,"Second-highest":1,Yom:2,Granted:17,Shanghai:2,"management...":102,"law-breaking":3,Rottosei:2,You:1007,Ringenbach:2,Upping:8,Hackettstown:2,Viking:2,Freund:2,midpriced:1,riddled:14,Palacio:2,embodiments:4,Ironside:2,KARL:2,schematic:1,habitats:4,prophesies:20,Raymont:2,"classification-angle":1,prodigiously:6,forgings:4,"market-share":3,sagged:32,"super-high":1,prophesied:32,pipedreams:4,homecomings:4,scourges:4,Mitchell:2,Kimco:2,"Alabama-Coushatta":1,obstacles:4,Idea:147,"position...":102,Idec:2,Idex:2,Entering:2,prodded:54,Tullio:2,glowed:16,Saucer:2,GSP:2,Normandy:2,evenhanded:1,GSX:2,Sargent:2,GSA:2,sources:4,GSI:2,Bloomington:2,clashing:8,lures:72,brothels:4,eclairs:4,barefooted:1,lured:54,curdling:8,impassable:1,"pooh-poohed":39,Dobi:2,crushed:81,"breach-of-contract":1,conquete:64,tarnish:39,contingents:4,Doordarshan:2,"Milling-Stanley":2,HUSBANDS:4,Poupin:2,doorways:4,Smetek:2,"chain-smoking":21,Alcinous:1,taping:21,Cheung:2,Beckett:2,Gouvernement:2,warmed:32,Thatcherite:1,warmer:136,Transcendental:1,CHAMBERS:2,Horrigan:2,Clever:66,Roseland:2,solicits:20,boggled:16,Attending:8,rewarding:13,Connie:2,weighs:20,filers:4,intersections:4,"test-marketing":5,"A.L.A.M.":2,Maitres:2,questioners:4,Zipser:2,shrilled:16,Rochdale:2,"sugar-growing":3,offset:1008,Seminary:11,shakily:6,Microsoft:2,Characterizing:8,enhancements:4,"Junk-bond":3,Johnny:2,"light-transmitting":1,cleans:20,"early-retirement":22,persuaded:54,overlook:42,Waslic:2,IDS:2,legitimizes:20,artists:4,legitimized:17,IDD:2,Industrikredit:2,IDB:2,"late-comers":4,doubtless:6,"second-guess":83,tidied:16,mufflers:4,Assistant:11,IDs:4,"Kansas-Nebraska":2,compartments:4,"business-partners":4,recruited:54,Sakata:2,Picassos:28,Boisbriant:2,Ekco:2,hazardous:1,Trucking:11,Bosphorus:2,tapers:72,Maslyukov:2,"green-tinted":1,"trade-liberalizing":1,Examiner:2,Veba:2,"one-in-four":1,"air-launched":1,signed:85,Fitzroy:2,converted:81,leathers:4,pumped:54,"U.S.-Mexico":66,piece:315,leathery:1,Chestnuts:4,Birinyi:2,enquetes:64,kanji:64,Seacomb:2,"full-year":1,NEWS:254,"media-conscious":1,Defining:8,"second-highest":186,Measuring:55,contest:25,NLRDA:2,offensive:3,chocks:4,Gilels:2,athletically:6,Boron:2,suspiciously:6,Parapsychology:2,Infertility:2,Suarez:2,Schindler:2,Tracinda:2,Dingman:2,"changes...":102,"cut-off":1,"non-European":1,Melville:2,paraxial:1,Yearbook:2,Pauletta:2,Vitamins:4,Bordel:2,Burnet:2,Burnes:2,Oshry:2,Otaiba:2,"post-minimalist":1,"bright-looking":1,apparatchiks:64,Burned:17,characterless:1,AirMalta:11,expatriates:4,"lower-rated":1,segments:4,unroll:33,extenuate:39,teaching:1009,updated:14,Toms:2,Brea:2,updates:18,betters:4,overcomes:20,"higher-income":1,accentual:1,soulfully:6,skills:4,decorators:4,"MIG-1":1,"yellow-brown":1,pardons:4,Matisses:28,"hard-charging":117,franchisees:4,Taps:20,Honan:2,force:1010,Waco:2,pleura:91,Demon:11,"semi-processed":1,Version:2,Tape:47,MBOs:28,Lamar:2,prisons:4,"wrinkle-fighting":1,Merkel:2,"Moscow-Shannon":1,lights:18,"yellow-bellied":1,sunder:39,Caribe:2,Chyron:2,tips:18,Gregorio:2,deemed:54,"ramrod-stiff":1,"ten-year":1,pancakes:4,cadres:4,"inner-city":3,active:3,demandingly:6,Ziggy:2,SWUNG:16,POWER:11,tapes:4,taper:63,taped:81,felonies:4,Advancing:8,Continent:47,Bottineau:2,eyebrows:4,chaperoned:1,fragrances:4,"Tiger-turned-Federal":1,"silk-stocking":1,Joerg:2,moral:3,suburbanites:4,bargelike:1,"value-judgments":4,Cattleguard:2,receivable:3,Accidental:1,Alcee:2,PACIFIC:2,tabulated:81,DIALING:229,"feed-lot":1,Greenberg:2,peeping:8,decencies:4,Spumoni:4,Norcross:2,Franciso:2,"inter-species":1,burglaries:4,eternally:6,Crupi:2,pacts:4,"arms-export":1,flora:91,pivoting:8,Breslin:2,Tim:2,Blinder:2,Traverso:2,Ramsperger:2,Borough:2,mountainsides:4,"Pre-shaped":1,defer:39,"baseball-watching":1,Keebler:2,Lil:2,Lim:2,Lin:2,Benedick:2,Visher:2,Liu:2,blistering:30,Chauncey:2,degenerate:82,Tie:216,Neurotron:2,cursory:1,"three-to-five":1,Greif:2,Josef:2,Siegler:2,currents:4,Hargett:2,"heat-and-eat":1,answer:44,prohibits:20,"personal-income":1,crowding:8,undergoing:8,Stehelin:2,Bonne:2,"word-weary":1,Hattie:2,hospitalizations:4,toilsome:1,manic:1,"labor-funded":1,maintain:42,capitalist:3,Festivals:4,Blue:40,Faye:2,imbruing:8,Blum:2,"CROSS-BRED":16,"pre-strike":1,"fiber-producing":1,sycophantically:6,neutered:17,scoring:55,"Campeau-unit":1,RENAISSANCE:2,"non-dealer":1,better:1011,differently:6,accusatory:1,Ahoy:2,Homart:2,overcome:538,pleasurable:1,regrouped:32,"S&Ls":56,Ditmar:2,"chicken-wire":3,dejeuner:64,DeConcini:2,Spahr:2,mamalian:1,unregistered:1,AMRO:2,Graeme:2,Cairo:11,Agreed:32,Harkins:2,Timna:2,placards:4,fringes:4,Trabold:2,went:32,sulphured:17,OUSTED:54,Agrees:20,successively:6,suspended:81,Hulks:4,upstaged:54,subjectivists:4,"best-gaited":1,principles:4,relentlessly:6,downplayed:16,hoteliers:4,projectiles:4,mandated:54,contend:149,"TRS-80":2,Lafarge:2,Karnsund:2,"government-funded":1,particles:4,Rhone:2,Snaresbrook:2,NLD:2,Ill:40,NLO:2,"post-Hugo":1,"B.B.":2,linear:1,PENNEY:2,Denshi:2,aborting:8,subtended:1,lineal:1,warmhearted:1,"NL.":2,"five-home-run":1,lacerated:17,Berthold:2,microchips:4,Diametric:1,swiping:8,Kivu:2,Kofcoh:2,Baldry:2,chronologically:6,"gas-saving":1,"pre-Civil":2,deplete:39,Commentary:2,myelogenous:1,"take-it-or-leave":1,MIGHT:190,masterfully:6,grads:4,Ketelsen:2,Fortenbaugh:2,Levi:2,"oriented-polypropylene":1,bleat:78,witnessing:8,clattering:8,Mariotta:2,somewhat:6,Crain:2,Cybex:2,"cold-bloodedly":6,prongs:4,Grizzlies:4,"frog-eating":1,mythic:1,"thousand-legged":1,Almost:477,silly:34,deserving:3,spoiled:81,Disasters:4,usages:4,Houlian:2,"demand...":102,"video-viewing":1,"Dingy-looking":1,elevating:8,Pickering:2,Odeon:2,emphasizing:8,Mineworkers:28,THROUGHOUT:127,"Government-mandated":1,closeted:103,GRAINS:57,Berardi:2,POW:47,"private-school":3,POP:11,desist:42,Grossner:2,payloads:4,panties:4,"TWO-A-DAY":1,"one-industry":1,"Western-Central":1,Confederates:4,"Gim-":2,Emshwiller:2,Vanguard:2,Lint:2,Alabama:2,Zeller:2,buts:4,Meson:2,Crow:2,nighttime:3,Meltzer:2,Single:2,definitely:6,Steelmakers:4,LSO:2,Copenhagen:2,Harnick:2,mailing:21,Carew:2,"oft-quoted":1,secondbiggest:51,lyrics:4,Taussig:2,Weill:2,Carey:2,ballfields:4,ending:1012,attempts:18,chartered:1013,Nite:2,Huhmun:2,Tamar:2,alcohols:4,acquit:39,Teikoku:2,"Jackson-Cross":2,coefficients:4,"above-target":1,scrubbing:21,Taconic:2,exports:18,Porsche:2,Crumb:2,establishes:20,compounded:81,Realist:2,retaliating:8,Albanian:2,perceive:42,Oneida:2,"Sydney-based":1,Heck:2,"equity-purchase":3,Stober:2,Crump:2,thoroughbreds:4,FARMING:2,Realism:2,Whitey:2,McMahon:2,cleanups:4,sallow:1,agglutinating:8,softly:6,Hippodrome:2,"fresh-fruit":3,THYSELF:53,flagged:16,"Al-Chalabi":2,Underwater:2,Ozal:2,District:11,Neurological:2,Christianity:11,vigilant:1,"Huang-ti":2,notions:4,said:758,shaven:1,Hideous:2,Registered:231,sail:95,shaved:54,reassigned:54,Ngo:2,"Negro-appeal":1,"ex-officio":3,shaves:20,"sea-blessed":1,HALT:2,"Asset-Backed":66,restricting:30,Tenneco:2,"split-bamboo":1,"fifth-biggest":1,"old-time":1,HALE:2,Chipping:8,"solid-fueled":1,Brazen:2,disinfected:17,Donating:8,Worship:2,archetypical:1,Trecker:2,hardworking:1,ACCO:2,lowly:97,CHECKOFF:47,"fine-chiseled":1,"line-item":1,"fur-making":1,recut:1,Chavez:2,targeting:498,"C.":1014,recur:42,mythological:1,"low-sulphur":1,"C$":84,"cash-flow":3,Telemetries:28,Coxon:2,"C1":2,"half-educated":1,CO:2,prosperous:1,CB:2,CG:2,Ruding:2,CD:835,tapping:55,CS:2,Claims:41,CP:2,CW:2,calcified:16,"half-swimming":1,CT:47,distorts:20,Trupin:2,Ch:2,Co:11,reddish:1,Ca:1015,economies:4,Cy:2,Agoglia:2,Cr:2,employees:18,Ct:2,spawn:42,Nae:106,Nan:2,Ideas:4,Nam:2,Ideal:129,aku:64,Nat:2,McAbee:2,grown:45,tucking:8,Connectors:74,speculating:8,Zimbabwe:2,Wattie:2,Britton:2,confronting:8,Puccio:2,Umschlagplatz:2,"then-biggest":1,"waste-to-energy":3,Raytheon:2,Morris:2,declarative:3,sacraments:4,Gasch:2,Schoeneman:2,overt:1,thoughts:4,"purple-black":1,yongst:51,"Multi-Income":2,Fulcrum:2,Caning:2,Vandiver:2,left:1016,Offsetting:8,just:1017,Fixing:8,abstained:16,Nutt:2,longish:1,habitues:4,alludes:20,Sedgwick:2,trestles:4,Lupo:2,Yemen:2,"six-man":1,Lupe:2,clampdowns:4,News:239,spasms:4,Newt:2,Westhampton:2,Building:321,chives:4,Empedocles:2,"hard-surface":22,relating:8,Carraway:2,background:22,farms:18,downtrodden:1,afire:218,Bait:2,Vogel:2,uncivil:1,Armour:2,Colonsville:2,intercollegiate:1,notorious:1,prepping:8,Bain:2,repudiate:39,Beloved:2,Moynihan:2,"now-evident":1,amiable:1,repelling:8,PTL:2,Rolaids:2,PTC:2,PTA:2,Moneyletter:2,maitre:87,SCRAMBLE:33,bold:1,ballerinas:4,"Paramount-MCA":66,"blue-chips":4,Slippery:2,bolt:25,Noyes:2,Milties:2,richly:6,Lolotte:2,Currie:2,"C.D.s":57,rhyming:8,lied:16,Nike:2,Vickie:2,commuters:4,lies:72,lieu:1018,errs:20,"Arnold-Foster":2,Laphroaig:2,"well-intentioned":1,"dealer-community":1,approximate:279,influencing:8,remained:32,Swearingen:2,impassioned:1,Chekovian:1,multiscreen:1,Passengers:123,secondhand:1,"ownership...":102,possemen:4,Gemayel:2,overburden:39,Jean:2,Melisande:2,Southfield:40,"mega-welfare":1,attached:81,Stoneman:2,boomerang:25,"Marxist-dominated":1,Aiwa:2,Cyanamid:2,"Three-fourths":4,hypertrophied:17,covert:1,covers:72,vacate:39,"purchase-and-lease":1,unholy:1,Worcestershire:1,Description:2,Balmer:2,Ruffo:2,excel:149,"get-along":1,adjourning:21,misinterpreted:54,Cobbs:4,Firm:213,Eben:2,Ebel:2,Eber:2,Accounting:321,"Falwell-like":1,unlocking:8,Skolovsky:2,Gatwick:2,militias:4,"Line-item":1,Exabyte:2,Departing:8,daily:34,Fire:11,premiums:4,"Invest\\":2,Pilevsky:2,pellets:4,"G.S.":2,overdue:1,Fibre:2,Shelby:2,deputized:17,peruse:42,souls:4,"three-stage":1,Scriptural:1,Linsert:2,milk:25,"Enviro-Gro":2,agleam:1,Zantac:2,"single-most-needed":1,disgusting:1,"blood-stained":1,"Apple-Microsoft":2,amaze:42,Boeings:28,unpleasant:1,harnessing:8,overproduce:39,"J.K.":2,misstatements:4,encircle:39,"record-keeping":22,inciting:8,permissive:1,Annamorena:2,nationalize:39,Sinemet:2,"acetylene-fueled":1,"case-by-case":1,Trumka:2,Rejoins:20,Recalls:20,pious:1,Evian:2,governments:4,materialize:42,Protocol:2,economize:39,Belanger:2,"semi-major":1,shod:1,overlaid:17,drawings:4,Faustian:1,Epidemiological:66,fearing:8,Slovakia:2,threshed:16,casks:4,dishonored:17,Toxicology:2,Bartok:2,"price-skirmishing":1,deerskins:4,Colquitt:2,"wage-price":1,MYSTERY:2,Raesz:2,unsmilingly:6,french:593,Eurodebt:2,Signed:17,brownouts:4,Changes:283,elegantly:6,trenchermen:4,Harkin:2,"dual-career":1,Hull:2,"high-tech":3,biopsies:4,Baldwin:2,"non-recourse":1,massage:25,validate:39,breathtaking:1,spatially:6,Whee:2,"one-night":1,Admission:47,Villalobos:2,When:394,Stopping:8,Holabird:2,Fountain:2,licensing:27,ailing:30,Toyoda:2,sported:16,Specialist:2,Australia:2,weeklong:3,intensively:6,perk:82,Giselle:2,franca:64,Kleber:2,creamy:1,Conchita:2,pert:1,francs:4,"mushroom-processing":1,creams:4,Turtle:11,MicroBilt:2,drinkable:1,cremate:39,hurlers:4,"fine-tuned":1,Lusignan:2,mouthing:8,superhighways:4,Dependency:2,beholden:1,"ex-liberals":4,Pyramid:11,recites:20,gassy:1,armpits:4,deformed:7,Bath:2,quivers:4,"farmer-type":1,supportable:1,Basing:8,claim:24,Voluntary:40,Headline:2,photofinishers:4,Commenting:8,"Ohio-chartered":1,Dilzem:2,Alger:2,recited:16,Everhart:2,"Sa-Duk":2,Prometheus:2,Whiteman:2,marbleized:17,"mandatory-retirement":1,Pye:2,"employee-owned":1,staying:5,"budget-wise":1,accessory:22,Versicherungs:2,epileptics:4,aisles:4,REMICs:4,Junsheng:2,holdouts:4,Ribozymes:4,instills:20,switch:44,downsized:17,longhand:3,Commentators:4,Masket:2,technophiliac:1,Fella:106,frittered:17,seizing:8,Suburbs:113,Covington:2,Coconuts:65,sculpts:20,spinoff:22,irresolute:1,Elsewhere:150,Hokuriku:2,Nintendos:28,Psychiatric:2,Lugosi:2,Amis:2,ours:1019,secondary:1,"multi-billion-dollar":1,Scenario:47,Manas:2,bein:1020,drowsing:8,sarcastic:1,"cross-shareholdings":4,Mussorgsky:2,Retailers:123,"no-muss":1,Manac:2,Tyson:2,developments:4,Everything:47,chockfull:1,unvisited:17,Monteverdi:2,Francaises:2,discourages:20,"post-Black":1,Affliction:11,Dowguard:2,Event:47,liberating:30,Zealand:2,"non-institutionalized":1,"pre-merger":3,slaughters:20,"shack-up":1,"dainty-legged":1,"judicial-bypass":1,Unitas:2,Badder:2,"electro-optics":4,Rieslings:28,McGuigan:2,"many-fold":6,"self-deceiving":1,Strangler:2,Riverfront:2,RTS:2,dominate:42,"stock-fund":3,ethicists:4,Yves:2,Responding:8,Malizia:2,bootlegged:17,therefores:4,mortared:17,musing:8,forbids:20,Misdemeanors:4,Remics:57,Walking:8,Kimpton:2,standby:3,exhaustingly:6,Yogi:2,"trans-political":1,Dubinin:2,physicals:4,Brock:2,oafs:4,philosophized:16,Helix:2,Gestapo:2,HealthAmerica:2,Hefner:2,personalities:4,Huaqiong:2,"J.P.":2,Terra:2,inflight:1,"mare-COOR":2,masquers:4,amphetamines:4,mining:21,Marni:2,Talton:2,Bioanalytical:2,loneliest:51,Doak:2,sequels:4,Trumps:111,Santamaria:2,Toffenetti:2,Martens:2,relative:3,exclusionary:1,Horicon:2,WordStar:2,Maloney:2,CHINA:2,scaffoldings:4,LISA:2,Rampell:2,Crashing:8,Kuehn:2,Tunisian:2,Court:11,"state-local":1,occupies:20,dash:25,Respiratory:40,greet:42,Animals:92,occupied:81,TGS:2,clung:32,stopgap:22,Zambia:2,upgrading:55,Clothiers:74,Corvus:2,strengtened:17,cooing:8,theatre:80,normal:97,blackest:51,McColl:2,McColm:2,Tredding:2,hardships:4,Courtney:2,especially:6,"hand-picked":7,"three-snake":1,"Double-Figure":2,"gimmick-ridden":1,Amsterdam:11,withdrawals:4,precise:1,Germeten:2,Tese:2,Demographie:2,Assassination:2,Mazzoni:2,"habeas-corpus":1,Wondering:8,Test:128,Chamberlain:2,"K-9":2,"re-emerged":16,"committee...":102,soliciting:8,Overbuilt:1,lauded:32,Unresolved:1,"empty-handed":1,reps:4,RISC:2,milkshakes:4,Turn:260,killers:4,Turk:2,Turf:2,marooned:16,astounds:20,"conceived...":102,Alliance:2,"order-delivery":1,"K-H":2,Fiala:2,panjandrums:4,photographically:6,Murata:2,Educational:40,declarations:4,milling:21,"heavier-than-normal":1,Hotel:11,Goddess:2,workweeks:4,"seven-point":1,envisioning:8,chronically:6,AHEAD:6,gags:4,"get-out-the-vote":1,LJN:2,gage:25,enumerated:14,SCIENTISTS:4,moaned:16,brokenly:6,whispered:112,Ballinger:2,parent:22,Visually:6,FOOD:11,"preferred-dividend":1,pained:103,Overnight:6,Merryman:2,countenance:25,unanalyzed:1,singers:4,wounds:4,"under-performing":1,Corrective:1,"lbs.":4,Brockway:2,trades:18,typify:149,dedicate:39,patrons:4,traded:1021,"Kan.-based":1,arcaded:1,terse:1,Fulmar:2,Ouray:2,maintained:54,grants:18,arcades:4,disciplinary:1,Poconos:28,unopened:1,Sure:1022,Comission:2,undertake:39,"employee-contributed":1,Schiele:2,Bohrer:2,employments:4,Expressions:4,devilish:1,"base-rate":1,gripped:32,referrin:8,"upper-middle-income":3,"fear-filled":1,Provato:2,Scotch:129,stacked:54,turtles:4,outspends:20,Caused:17,sobbed:32,Ruark:2,"steel-exporting":1,Hessan:2,Causes:2,Muzzling:1,"U.S.-Israel-Egyptian":1,bathrooms:4,tirades:4,characteristics:4,Honjo:2,them:1023,reignited:32,sprained:17,cluster:78,"defense-equipment":1,dangerously:6,Alasdair:2,underweighted:17,traffickers:4,obnoxious:1,everyday:1,overshoes:4,uneconomic:1,par:1024,pas:64,pat:104,paw:25,"cotton-ginning":1,Notre:2,steppes:4,heirs:4,Bucaramanga:2,thinning:8,pad:25,Muskegon:2,stepped:32,Fretting:8,pal:22,thee:53,pan:25,McDermid:2,claps:18,Commanders:28,seagulls:4,"sub-headlines":4,"one-paragraph":1,running:1025,"Ill.-based":66,"goal-values":4,mortgaged:17,haint:20,"Knight-Ridder":2,"twin-jets":19,"four-page":1,gates:18,they:53,Meyers:2,Paramedics:4,OVER:127,Scopo:2,"mutual-assured":1,Pershing:116,Hadrian:2,shying:8,doctoral:1,Inefficient:1,Symbolizing:8,Wolpe:2,recopied:17,extensive:1,"Inflation-adjusted":7,safeguarded:17,McCarran:2,defected:32,"off-level":1,Schicchi:280,Georges:2,mos:4,mor:12,Paxus:11,mop:63,mow:39,mot:64,moi:64,mon:64,intracompany:1,underwriting:21,aiming:8,disappointed:81,scrounged:16,Stabat:2,gossipy:1,Kampen:2,gossips:18,acidly:6,"English-speakers":4,Thynnes:28,Borax:2,miraculous:1,laughing:5,undifferentiated:1,Somalis:28,Texaco:2,Somalia:11,Convict:2,organizing:55,Bubba:2,"jobs-tears":4,Stearns:74,Receave:33,relished:16,Geer:2,"listener-supported":1,fluids:4,Kissak:2,Bridgeview:2,expressing:8,"larger-capitalization":1,Sonora:47,"oil-transport":1,dimensionally:6,Ferber:2,"Seattle-First":2,manufactured:45,notable:1,"vinyl-laminated":1,notably:6,plastisols:4,Klondike:2,Berkley:2,pinnings:4,preoccupied:14,unissued:1,roar:25,classifies:20,Kumagai:2,unclassified:1,preoccupies:20,Commissioners:41,solidify:42,roam:42,sadistic:1,Underhill:2,nonessential:1,Hooghli:2,quietly:6,Hermanovski:2,"industrial-gases":1,amasses:20,uptown:22,amassed:54,Week:11,"stock-ownership":1,downed:32,styling:21,compliant:1,lions:4,Plenty:669,suject:1,decisive:1,Weep:216,hysterical:1,agricole:64,granules:4,BOAST:39,gory:1,Bashers:2,"four-stock":1,"quarter-million-dollar":1,gore:39,Chartwell:2,DeSio:2,porches:4,Trailer:2,"offering-price":1,flamboyant:1,"v.B.":2,proceeds:18,Kajar:2,grudging:1,"midsized-car":3,Cirino:2,CRRES:2,"minimum-capital":1,emissions:4,Thistle:2,"half-expressed":1,celestial:1,Farmers:130,cabled:16,Stanza:2,fellow:22,Percussive:2,allocating:55,Moto:2,"less-than-expected":1,flock:44,"fee-producing":3,WHEN:293,"job-seekers":4,KLUC:2,Najarian:2,"steel-import":1,unturned:1,"textile-exporting":1,PERKS:4,princesse:3,dunked:16,Cheez:2,prudent:1,"resource-intensive":1,"low-growth":1,Baeyenses:2,demonstratively:6,casts:72,forts:4,Rica:2,Yeah:1026,Year:47,craftsmen:4,corporeal:1,Klinsky:2,forges:20,forget:42,Moog:2,disassembled:16,Moon:11,SIA:2,goofy:1,Amenities:4,forged:81,nonreactors:4,huggings:4,"M-4":2,Gizenga:2,Tertre:2,servings:4,Skipper:2,Vernava:2,"test-coaching":1,"medical-support":1,INRA:2,parcel:205,translations:4,"M-K":2,Mannheim:2,Ware:2,worded:81,invigorate:39,Owing:6,disused:1,exemptions:4,hoped:32,"short-haul":1,Riunitie:2,Autumnal:1,preordained:17,Valuable:40,Brevetti:2,further:1027,Salhany:2,"short-lived":1,overshot:16,magnifying:55,"face-to-wall":6,faded:45,judicious:1,"House-passed":1,Pagan:2,doting:30,Arena:2,"entry-level":1,Gift:11,"image-building":1,wrangling:55,Sylvester:2,puddles:4,"long-successful":1,cylindrical:1,Nazarene:2,Greases:4,speeches:4,"free-world":1,leveling:21,Kawecki:2,Grayhound:2,chipper:1,copycats:4,Nyckeln:2,Kirov:2,"sentence-structure":1,"wine-buying":1,Jameson:2,Gough:2,Macaroni:2,score:44,nothings:4,distinct:1,Towne:2,dispatching:8,Picasso:11,Towns:113,"wood-grain":1,Promazine:1,staggering:13,reeked:16,Yamata:2,particular:34,Haile:2,UAE:2,"post-Oct":2,Tonight:431,unindicted:1,categorizing:8,Wood:11,taut:97,appendages:4,"Trans-Pacific":2,Tessler:2,unrevealing:8,Kossuth:2,stacking:8,expeditiously:6,prods:72,share:205,"best-financed":1,Sable:2,sharp:1,Valdemar:2,siren:3,Paramount:11,sired:17,Furlett:2,turnpikes:4,Outlays:4,dramatists:4,Liss:2,List:128,Lish:2,Petaluma:2,uninspired:1,Blier:2,Lisa:2,Ozzie:2,hedgehogs:4,uncongenial:1,Stevens:2,bathed:54,"federal-state-local":1,porticoes:4,"morning-frightened":1,chopped:103,Texan:129,"Ba2":1,"Ba3":3,puttered:16,hyaluronic:1,minincomputer:12,Warnaco:2,deterring:8,Roxanne:2,Income:11,Cooper:2,arrogant:1,Vilgrain:2,arteries:4,possessions:4,forthwith:6,Wechsler:2,Lanin:2,crawls:18,triumphantly:6,oks:20,good:34,Bar:128,Bas:2,Interiors:4,Baz:2,pinafores:4,Bay:11,Bad:66,DePaul:2,nonwhites:4,Lautenbach:2,declamatory:1,Bal:2,"nine-point":1,conspires:20,Bah:106,easily:6,"three-hundred-foot":1,pregnant:1,Potter:2,FINANCES:4,CRASHED:16,ports:4,obtaine:39,"rule-making":3,"budget-reduction":1,"anti-Phnom":2,monks:4,recreational:1,wiggling:8,deluged:54,"Mauve-colored":1,samovars:4,Flat:66,lovers:4,effete:1,Poyne:2,trundling:8,Mira:2,byinge:8,roughnecks:4,rankest:51,"stage-plays":4,"E5":2,"three-quarter":1,"pre-natal":1,Erickson:11,bully:24,EK:2,"decision-makers":4,Junkins:2,Lenaghan:2,hosted:81,recoveries:4,wanting:8,terminals:4,EX:2,EZ:2,ET:2,Propaganda:11,ES:2,launderers:4,Belding:2,En:587,Eh:125,Evans:2,Gunlocke:2,Ed:2,"W.A.":2,Haan:2,Bickel:2,"Fla.":2,Hornets:28,Haag:2,Stengel:2,Prattville:2,"James-the-Less":2,disregarded:32,Vandervoort:2,slithers:20,"Melbourne-based":1,canneries:4,precariously:6,curtly:6,Okay:1028,Murderous:1,divorce:44,Lapointe:2,Airplanes:56,Incentives:4,Sven:2,Shangkun:2,weave:63,VISTA:2,muscles:4,"free-fall":3,muscled:32,Problem:2,tacking:8,Lenin:2,horizons:4,gotten:17,"cross-pollinated":17,Caulfield:2,damaging:13,sole:3,Coatings:2,Boun:2,totter:39,outta:127,Kuniji:2,"non-polygynous":1,ages:18,"Washington-Oregon":2,roughly:6,"trend-setting":1,headings:4,manipulating:8,meltdown:22,dismember:39,Gollich:2,Menenendez:2,Pausing:8,reconciliations:4,appellate:3,keypads:4,Sider:2,Sides:2,Teller:11,Ate:16,"Tracy-Locke":2,soldierly:6,engagements:4,fluctuate:149,Martini:47,Linz:2,esterases:4,Shlenker:2,Jonni:2,Poach:39,"a-stoopin":8,Sample:47,Canteloube:2,dodging:8,SNIA:2,"deep-eyed":1,"Canadian-owned":1,FORMERLY:6,wailing:55,toxics:4,carne:64,socalled:7,Hedquist:2,perched:54,hopped:16,"cellular-telephone":3,multichannel:1,giant:22,depended:32,dividing:1029,"soldier-masters":4,"Victor-Butler":2,"center-right":1,Pooh:2,WCVB:2,Pool:11,Cyriac:2,adjustments:4,"hand-in-glove":1,Omani:1,"pre-determined":1,"non-durable":1,relocate:182,elapse:39,Lind:2,Renville:2,Bouillaire:2,Seimei:2,Harmonia:2,brooken:17,Solder:39,Assessment:11,"crude-oil":22,Tempest:2,semiannually:6,wrongfully:6,pneumatic:1,devils:18,"oil-bearing":1,Sez:2,glottal:1,Berniece:2,surrendered:32,Bewkes:2,IGS:2,Firms:92,noninstitutionalized:1,"much-awaited":1,tunneled:16,glorifies:20,See:1030,"per-pupil":1,Ohbayashi:113,multiples:4,Terry:2,feasted:17,donate:42,consonants:4,"financial-industrial":1,Azabu:2,Weede:2,declaratory:1,Limiting:8,renews:20,Calamity:2,tuitions:4,"quiet-spoken":1,alters:20,cubes:4,"health-benefits":1,"peel-off":1,annual:3,mistrusted:112,cubed:17,spiritless:1,"fin-syn":1,"fail-safe":1,consume:149,Phillipines:4,Tahse:2,unremitting:1,jerks:4,"U.S.-European":1,volunteered:32,"computer-integrated-manufacturing":1,GHKM:2,headaches:4,Belatedly:6,Esteli:2,Cicognani:2,Angelenos:2,devouring:8,"non-state":1,Ripper:2,meeting:21,subfigures:4,"machinery-trading":1,"MacNeil\\/Lehrer":2,nihilistic:1,fending:8,Studios:46,"Nu-Med":2,Logica:2,foreshadowed:17,schmumpered:16,interposing:8,Hating:8,"tape-recorded":187,Walters:2,"thrift-related":1,adjusts:20,"pre-packed":1,Uhhu:106,embarks:20,moralistic:1,drawbacks:4,itself:53,ruts:4,"monsoon-shrouded":1,parroting:8,Inspect:39,"sit-in":22,unregisterd:1,Candid:66,"cost-accounting":1,Beatitudes:28,Ludmilla:2,definitional:1,"last-named":1,Embry:2,Ago:6,yesterday:163,Connick:2,solicited:85,flurry:78,Nancy:2,NAACP:2,CUTTY:2,Teheran:2,Vetere:2,axiomatic:1,plinking:1,Veteri:2,Spitzenburg:2,orthopedic:1,Farneses:28,Racial:1,"One-Step":2,parametric:1,Gruber:2,"one-year":3,mind:275,Darrow:2,Klux:2,fundamentalists:4,LaBerge:2,"earth-colored":1,"itty-bitty":1,"anti-assignment":1,Wilmette:2,Bibb:2,snag:25,makers:4,snap:50,shoring:8,ridiculously:6,bio:22,Did:16,big:532,bid:181,Dig:39,redeem:42,Ekaterinoslav:2,bit:1031,Lesko:2,Dip:39,pollinate:42,Kyowa:2,"run-of-the-mill":1,Gonzaga:2,conducive:1,Keeeerist:106,often:6,Falconer:2,"pay-as-you-go":1,Commercials:4,Istituto:2,abundantly:6,extremist:3,Friesen:2,Origen:2,accelerate:42,Nagle:2,Muncie:2,Commerciale:2,ourselves:53,"fought-for":1,"brown-paper":1,"social-welfare":1,scald:39,scale:25,Merritt:2,resonances:4,Reitman:2,eliminate:42,Nothing:47,"defined-benefit":1,"seventy-eight":1,depressions:4,squalls:4,Tempesst:2,continuing:30,costumes:4,Hisaya:2,blockbusters:4,"alternative-energy":1,lounges:18,costumed:17,Stendler:2,gynecologic:1,Pauling:2,Rebs:57,fairgoers:4,deductibles:4,belting:21,Bueky:2,"Flyer-Castle":2,Stadtisches:2,daisies:4,Mead:11,Hunters:65,"auto\\/homeowners":4,Literal:1,Sanderson:2,Paulus:2,proportional:3,Deidre:2,downhill:218,Rabkin:2,"after-duty":1,Conrad:2,multilayer:1,Bong:106,"solar-cell":1,Auckland:2,Caporale:2,misappropriating:8,overpower:39,"garbage-disposal":22,Wanted:231,Pavlova:2,Painter:11,Steel:11,Steen:2,PharmaKinetics:2,Itagaki:2,"investment-bank":1,"tree-lined":1,quiescent:1,unstimulated:1,Alusuisse:2,Fla:2,migrating:8,Steep:2,calico:3,Steer:39,presentments:4,Untold:66,originals:4,mavericks:4,clips:4,"tax-sheltered":1,Kringle:2,"information-system":1,Dreman:2,McCaskey:2,"mid-sized":1,"Huo-Shan":2,female:3,Overhead:163,cabs:4,dragging:55,Ragnar:2,"Rowland-Molina":2,streamlining:55,Barrier:2,humanities:4,Mormon:2,"post-earthquake":1,sterilize:39,"at-large":1,"log-rolled":16,pesticides:4,Rises:511,Medal:2,Relying:8,Rawl:2,announcing:8,IMELDA:2,likeliest:51,"ORGAN-TRANSPLANT":1,Pierpont:2,regionals:4,Gallon:2,Boutwell:2,rinse:25,"thirty-sixth":1,"treaty-negotiating":1,crofters:4,angriest:51,"high-rise-project":1,pulsing:8,Sumatra:2,Sentiments:4,intricate:1,"FHA-insured":1,breached:32,intensive:3,Barbee:2,CRITICAL:2,blaze:44,quarterly:34,mowed:17,staffing:5,"UBS-Phillips":2,annoy:42,"short-sale":1,"Gar-Dene":2,Tenite:2,"tire-patching":1,Chaplin:2,understandings:4,uncovering:8,populist:3,Crumble:2,fragmentations:4,"state-funded":1,"and...":102,"Pride-Starlette":2,Chapter:47,grooved:17,NTT:2,"post-bellum":64,uncomfortable:1,replicated:17,grooves:4,"lower-priced":1,formats:4,transplanted:14,advertised:81,falcons:4,Hammond:2,Hammons:2,Barnhardt:2,chasers:4,"material-formal":1,"casualty-insurance":22,Cassius:2,sins:4,Brandywine:2,Norge:2,sink:95,others:4,"non-Socialist":1,sing:42,sind:64,sine:147,irritating:1,widening:55,PIERCE:2,"employee-benefits":176,dispensers:4,tat:39,appended:17,"J.V":2,presidents:4,diagonalizable:1,silkily:6,"grade-A":1,"J.J":2,clockwise:6,Weber:11,Dale:11,taxiing:8,Jackstadt:2,glasnost:147,Brisk:1,determining:5,Dali:2,Daly:2,matinee:1,Laser:2,airlifted:17,"S&P":11,"S&L":11,Flanders:2,Lieppe:2,"strategic-planning":1,"high-inflation":1,debtors:4,Tharp:2,Reward:39,DFC:2,Weems:2,Marketplace:2,inclinations:4,MacLellan:2,tunnel:78,crickets:4,industrial:1,Chadbourne:2,unpacking:8,"drug-financed":1,Seizin:8,"e.g.":147,"higher-technology":12,Grosset:2,Indira:2,Halsmuseum:2,sanding:21,Artificial:1,recklessly:6,expandable:1,patisseries:4,serial:3,SynOptics:28,dinners:4,Krause:2,Paper:11,Ohls:2,Krauss:2,Alarmed:7,meditated:16,stock:205,Adenauer:2,ABB:2,railings:4,Dionigi:2,"car-market":3,"Index-related":1,Outperform:2,ABM:47,ABO:2,ABS:2,Sparkman:2,Depositary:40,yielded:32,Reye:2,drape:25,Carews:28,Principia:2,separations:4,Salisbury:2,Horns:4,"demi-monde":64,anionic:1,Yonehara:2,Ruettgers:2,languorous:1,"credit-data":670,Dudley:2,"razor-thin":1,preclinical:1,repentant:1,"split-fingered":1,Prielipp:2,shreds:4,subpoenaed:54,Gospelers:4,fortunate:1,envisage:39,bridges:18,negotiated:81,Disposable:1,whereof:736,labor:24,squatting:8,"junior-senior":1,NCAAs:4,"<":451,lunatic:1,infrequent:1,dam:569,Repnin:2,gauging:8,COMPANIES:123,Concorde:11,wiggier:12,rebel:205,Heitman:2,das:4,serpentine:1,Crampton:2,slacken:39,Poor:40,verifying:8,warned:32,radiant:1,"Oerlikon-Buehrle":2,constraints:4,federalists:4,Injuns:28,Armor:2,strip:44,"four-star":1,Roaring:2,Bonuses:4,Africanist:2,wolfishly:6,slumped:32,Comissioner:2,unstuck:1,thermoplastic:1,"R.R.":2,labile:1,Delbridge:2,Stalag:2,postpone:42,Bidermann:2,"fringed-wrapped":1,affirming:8,centrifuging:8,CSO:2,CSI:2,CSK:2,CSF:2,"majority-held":1,CSX:2,CST:2,CSV:2,Vries:2,CSS:2,CSR:2,turbans:4,wagged:16,Grade:2,"Tex-Mex":2,Fold:39,Grady:2,sorrowful:1,Folk:11,Developer:2,Whinney:2,"microprocessor-based":1,bleeps:4,improvements:4,Bethesda:2,"beer-related":1,commendations:4,expressionistic:1,covenants:18,sadly:6,laps:18,chased:54,Tbond:1,establishments:4,"non-encapsulating":1,time:25,natty:1,Spegititgninino:2,Canned:1,gear:44,unscrupulous:1,Huppert:2,retrench:33,"chemical-and-resource":1,unending:1,Cannes:2,Canner:2,loved:112,glamorous:1,Alakshak:2,BellSouth:2,Vacaville:2,spookiest:51,halcyon:1,"railroad-holding":1,propagandize:39,loves:72,Bolker:2,"seventy-fifth":1,"tax-writers":4,Perrier:2,"export-related":1,Blatz:2,sublunary:1,connectors:4,"fifty-ninth":1,ethnically:6,"mass-faxing":1,sayings:4,papiers:64,minimally:6,Dostoevsky:2,Enthusiastically:6,builtin:1,replanted:17,rediscovered:17,scimitars:4,trundles:20,trundled:32,Priest:2,Ernst:2,reveling:8,profoundest:51,YEEECH:106,Burma:2,allegorical:1,"Co-Renitec":2,hostesses:4,gather:42,"Movietime\\/Alfalfa":2,capita:504,gulled:17,Ashok:2,"Government-Sponsored":2,humanizing:8,kits:4,"Jerr-Dan":2,Banvel:2,shrugs:72,camping:21,circumpolar:1,"dealer-to-dealer":3,"NEC-compatible":1,Chanos:2,scuttling:8,resubmit:39,Bogartian:1,Kaul:2,exceptional:1,Brezhnevite:2,Kishimoto:2,stripes:4,enunciating:8,accrue:39,deputies:4,humanely:6,striped:1,Stockton:2,Provincetown:2,Cleaner:2,densities:4,Buchanan:2,calling:55,serviettes:4,Cleaned:17,ballplayers:4,Traders:56,dislodge:39,Constar:2,Parrillo:2,Grows:20,Chemists:4,phases:18,Mellon:2,"current-year":1,clearing:5,Aurora:2,peripherally:6,routing:55,derisively:6,routine:3,Mellow:1,Mellor:2,alveolar:22,nudged:16,"Canadian-U.S.":1,Kittler:2,packaged:14,Smoky:2,Silicon:2,Edgar:2,Smoke:2,Ave:2,"health-club":3,sou:64,straights:4,Bontempo:2,corroborees:4,Concurrently:150,Ethel:2,Ambrosiano:2,Louvre:2,wiederum:64,"credit-easing":3,"electronic-systems":4,embryos:4,sexes:4,"vantage-points":4,otherwise:218,fester:39,"make-overs":4,invasive:1,fostering:55,Hashidate:2,ASEAN:2,Blot:2,Segovia:2,glassless:1,Tocqueville:2,Muramatsu:2,LOTUS:2,crassest:51,Oranges:65,USO:2,Radiation:47,"most-indebted":51,Goldinger:2,upbeat:3,Hoskyns:2,Germantown:11,define:42,Taito:2,Marico:2,Winkler:2,Barell:2,Lynde:2,"rock-carved":1,USI:2,general:3,plaid:3,Glumly:6,cow:25,plain:34,rectangular:1,Uzbekistan:2,"high-ticket":1,deem:149,promoted:54,Bloc:2,revisited:32,Somerville:2,"late-afternoon":1,Tash:2,cereals:4,Hine:2,Rudolph:2,helped:151,preconference:1,landfills:4,tampered:16,claimed:32,Kerlone:2,exogamous:1,watchful:1,Winking:8,Kongsberg:2,Hino:2,Lenobel:2,cabinetmakers:4,BetaWest:2,Persianesque:1,"sweet-faced":1,blooms:18,injured:45,Resolved:17,tighten:42,taverns:4,sensed:32,"extra-caffeine":1,genres:4,Doppler:2,Teachers:41,injures:20,tighter:136,Bashir:2,raping:55,Eurobond:11,"Start-up":1,Nonconformist:2,Kihei:2,sets:18,Chimanbhai:2,position:24,Serbantian:2,Rattzhenfuut:2,"gas-fired":1,executive:22,"hoped-for":1,Tabak:2,Furuta:2,DePugh:2,topping:55,Instrumental:2,Teflon:2,Tass:2,terrorized:54,Amvest:2,Crus:2,Kraft:2,Itzhak:2,Coles:2,roofers:4,audibly:6,diehards:4,drugless:1,inviting:30,qualitative:1,Lintas:2,heed:95,Fear:47,soft:726,audible:1,Castillo:2,Gargery:2,cellists:4,Villamiel:2,Excel:2,Irina:2,swimsuits:4,Forte:2,Darvon:2,Zayadi:2,Oedipal:1,stuffy:1,"debate...":102,highlighting:8,treacheries:4,"parallel-computing":1,"then-pending":1,"technology-based":1,chains:4,regain:42,plumped:16,hose:25,"lower-tech":1,Lokey:2,unflaggingly:6,Maronite:1,host:25,expire:42,hoss:19,whacky:1,christened:32,KinderCare:2,Igor:2,greedier:12,blessings:4,"lower-than-forecast":1,Mayor:11,Giggey:2,"triple-A\\":1,"cha-chas":4,"over-arranged":1,chronic:3,lobbies:4,"non-callable":1,buckle:63,adversarial:1,awarded:54,Gaon:2,utopian:3,GRAB:2,conclusive:1,relishing:8,Queried:17,ivory:22,"Duro-Test":2,brand:1032,"Cavin-Morris":2,reminds:20,"Cmdr.":2,"money-fund":3,flexible:1,editing:21,Aquifers:4,Krepon:2,Compare:42,dozens:4,dangerous:1,annoying:3,backfires:20,contadini:4,avaliable:1,judiciaries:4,Gazeta:2,Arcadian:2,Arte:2,backfired:32,"cooperative-care":1,deaths:4,"boyish-looking":1,Ihmsen:2,barnyards:4,Jars:4,shooting:191,tarpaulins:4,misstated:54,unintelligible:1,Hawes:2,Vice:11,individuate:39,surreal:1,"poor-performing":1,misstates:20,Honeysuckle:2,Varo:2,handcrafted:17,insupportable:1,"Yankees-Mets":1,"eight-mile-long":1,"regular-season":1,nozzles:4,"zero-gravity":1,Rooney:2,misgauged:17,Shatilov:2,"Softer-than-expected":1,prevalent:3,oral:1,Thus:6,"Acting-President":2,Thun:2,Munchen:2,meteoritic:1,Marinaro:2,"Zero-coupon":3,thunderstorms:4,Packwood:2,legacies:4,levers:4,Coincidentally:6,Mandina:2,assembles:20,"all-cash":1,sleek:1,sleep:182,winningest:51,assembled:45,"G7":2,feeding:55,vile:1,expedients:4,Connoisseurs:4,Heimbold:2,Vernier:2,"C-V":2,"C-S":2,"juice-storage":1,lure:63,GT:2,GS:2,Fremantle:2,incurs:20,lurk:42,amorphous:1,Withhold:39,GF:2,GE:2,GD:2,Willamette:11,GA:2,GO:39,"Scrooge-like":1,GL:2,GI:11,"get-togethers":4,"program-bashing":1,Campaign:11,sunk:54,"water-proof":1,zing:2,admissible:1,Station:2,"mid-March":2,Go:216,smoky:1,Allegheny:2,Tenth:40,Windsor:2,osmotic:1,Mitch:2,razed:17,Taffner:2,Skypak:2,scrutinize:42,borrowings:4,"Claude-Eric":2,voluminous:1,Harrington:2,sulphurous:1,steriles:4,Barenholtz:2,"tile-roofed":1,frizzled:1,seeks:20,Marche:2,Barbanell:2,"six-gallon":1,digits:4,Wortham:2,changed:45,Rendering:8,donning:8,"gastro-intestinal":1,"card-member":3,changes:18,Peeter:2,glinted:16,yukked:16,Boxes:74,Decrying:8,Baily:2,"joint-research":1,punching:55,Cole:2,forums:4,anyhow:6,ebony:22,"fire-fighting":3,omits:20,"oil-poor":1,phenomenological:1,asses:4,slaughtered:54,ensnared:17,naive:3,"M.P.":2,Askington:2,muse:25,brushy:1,Pasatieri:2,pinching:55,arms:4,Fernandes:2,adjourn:39,Fernandez:2,must:1033,Claim:63,Oakbrook:2,ratifiers:4,cancellations:4,Cichan:2,Muhammad:2,Baptists:123,pavements:4,Clair:2,tugged:32,turnips:4,"Liberty-and-Union":47,scheduling:21,Huey:2,"quick-fired":17,unmeasurable:1,thoriated:17,Deli:2,intruders:4,grammatically:6,bunt:25,adjacent:1,iconoclastic:1,nonsingular:1,"pre-approved":7,predicated:17,Oooo:106,Yorker:2,predicates:4,burly:1,mourned:16,"self-ordained":1,Gradco:2,transcultural:1,hypnotic:1,"Del.":2,hypotheses:4,"spun-off":1,narcos:4,Podell:2,Sterilized:1,Irene:2,"heart-warming":1,Zapata:2,expects:20,Montgomery:11,reorient:39,Publicis:2,SharesBase:2,frightfully:6,carnal:1,talkative:1,digest:63,Addison:2,Simplesse:2,Dorr:2,writing:55,edits:20,Dora:2,stifling:30,"Institutional-type":1,tantalized:17,appoint:39,Reveals:20,"ten-day":1,Strasser:2,Reserves:92,JAL:2,publicizing:8,plates:4,Carballo:2,JAC:2,Winsett:2,obligingly:6,indeed:67,privileging:8,Radnor:2,explode:42,holdin:8,Adjustment:11,Transport:128,"USDA-sponsored":1,Duncan:2,Advil:2,unscrew:39,"production-rate":1,celebrating:8,Copying:116,Hatch:2,Duchenne:2,"COCA-COLA":2,reused:17,Netherland:2,iodothyronines:4,driving:5,Marguerite:2,bonnets:4,"knock-offs":152,"abortion-related":1,Toasting:8,Junior:1034,hemorrhaging:5,rail:25,Carreon:2,Gothicism:2,Roth:2,whereupon:127,"non-airline":3,superimpose:42,Carleton:2,fret:256,Mickey:2,Vic:2,Via:2,anthropomorphic:1,Vie:2,"mega-hit":3,Centre:2,foibles:4,Hotline:2,"stabilizing-conserving":1,corrections:4,inspectors:18,narratives:4,Rheinholdt:2,Borghese:2,Outreach:2,philosophical:1,decorticated:17,Delon:2,Haworth:2,scissors:4,Poorer:12,blunts:20,withheld:54,minaces:4,Pitcher:47,greedily:6,staminate:1,kinder:12,meanders:20,consented:32,montmorillonites:4,centered:54,conspicuously:6,"cross-fertilized":17,injected:54,kept:32,Georg:2,mercifully:6,expressionists:4,Minn:2,Previewing:8,nonperforming:450,nominate:42,Confession:47,reconstructing:8,preceeding:8,diuretic:22,Pierluigi:2,skinless:1,taint:78,"interest-rate-type":1,"catastrophic-illness":22,Asians:65,relayed:32,reminding:8,isolated:81,laughed:32,isolates:20,Gave:16,rides:18,"go-to-war":1,"married-put":1,Burling:2,Reports:1035,Prototypes:4,Ashley:2,delousing:8,genital:1,inexcusable:1,illogical:1,"radical-moderate":1,crazing:8,Gerstner:2,"WFAA-TV":2,"tool-and-die":1,Cleary:2,Rooms:4,"after-tax":3,Aeritalia:2,Dyke:2,Ku:2,"seven-fold":1,aromatics:4,mishandling:8,pops:20,"little-understood":1,worthiest:51,queer:1,Saxton:2,"circumvent...":102,"Flushing-Main":2,curricular:1,square:414,commence:42,Piepsam:2,enslave:149,Knit:39,"E-Z":1,squeaking:21,Chiodo:2,Molson:2,Wendler:2,Kiefferm:2,Grauer:2,uhhu:106,hobbing:8,dumpsters:4,CalMat:11,Hochiminh:2,licking:8,Duarte:2,CLAIMANTS:4,DeShano:2,"large-scale":1,Merkur:2,Hanaspur:2,"SS-20s":28,Hammett:2,"two-family":1,Duracell:2,Esquivel:2,sectionalized:1,richer:12,sporadic:1,"performing-arts":4,Lotteries:4,machinists:4,startle:39,Fallon:2,"ground-support":1,abstractionists:4,cajun:1,Pinnacle:2,bargains:18,Seaquarium:2,pegboards:4,brooked:16,Weidenfeld:2,yearago:1,faced:54,"alter-parents":4,Workstations:4,rightward:1,Contribute:39,players:4,Contact:269,"straw-hat":1,faces:72,hypocrites:4,"Freeport-McMoRan":2,"pay-for-performance":1,"luncheon-table":1,confide:42,betting:55,"governmental-affairs":152,dabbles:20,Samples:4,Geatish:1,redistributive:1,comical:1,jobless:1,Predicting:8,Renfrew:2,"John-and-Linda":2,confident:1,spread:1036,"Minneapolis-based":1,Shegog:2,Glenbrook:2,Nationale:2,affixed:14,bible:3,Cowen:2,catch:95,Johanson:2,"Cross-border":1,Klaus:2,greeters:4,Deland:2,"bingo-like":1,inviolable:1,Schoeppner:2,strangest:51,Wash:2,subjugate:39,cracked:112,transfering:8,precede:42,Aril:2,Edelstein:2,Outplacement:47,Ariz:2,lasciviously:6,Chipmunks:28,Historically:150,Schultz:2,profiteers:4,Obermaier:2,"Har-Lev":2,outface:39,Snoopy:2,heeded:32,Vacancies:4,Schulte:2,"Sweet-scented":1,Room:11,"A.H.":2,purposely:6,Petrossian:2,Roof:2,Latvia:2,Audubon:2,Roos:2,Root:47,cycle:25,censures:4,Gates:2,Patrol:11,neurologists:4,Apartments:2,Alton:11,frankest:51,Lockian:1,hearty:1,detained:54,censured:32,hearts:4,Mobil:2,"guitar-strumming":8,outnumbered:32,whimsical:1,Angleterre:64,"beggar-thy-neighbor":1,motherless:1,"stand-by":1,"non-Federal":1,pyknotic:1,"Janus-faced":1,Kryuchkov:2,IOU:2,Krug:11,IOS:2,exempting:8,NICHOLS:2,pitiful:1,EXPENSIVE:1,Krishna:2,submissive:1,casting:55,accede:39,Handstands:4,advances:18,"right-wing":3,bungling:8,toadying:1,slanders:4,convalescing:8,spawns:20,advanced:1037,"when-issued":7,"Garrick-Aug":2,Wilberforce:2,Lys:2,Kenmore:2,gifted:7,"near-equivalents":4,unsuspecting:1,informative:1,Shemona:2,diaphanous:1,Cascades:2,Lyn:2,"nuclear-arms":4,Badges:4,Horsely:2,deWindt:2,Casassa:2,"Euro-caps":4,"op-ed":1,tristate:1,exhausts:18,"FIRST-TIME":1,"precedent-based":1,Somay:2,convict:25,Astec:2,Scull:2,Syracuse:2,Yiren:2,arbitrated:17,feted:85,jejune:1,dropped:32,Greenstein:2,Titanic:2,Monieson:2,reassign:39,Revell:2,fetes:4,arbitrates:20,mooncursers:4,endorsing:55,Fair:129,"Castro-held":1,Seats:4,calculating:5,Fain:2,Birds:46,puzzle:25,Messaggero:2,uncontrolled:1,finely:6,Meriden:2,Profitt:2,rounds:18,EWDB:2,Abraham:2,Karpov:2,Puttnam:2,forbad:16,Herberet:2,Horne:2,prayerbooks:4,dank:1,Todman:2,"of...":102,Maryville:2,Pauley:2,"triple-B-plus":117,underreacting:8,solar:1,widgets:4,plumps:20,Salted:1,viva:147,Interlink:2,Gosset:2,vivo:80,wipes:20,prematurely:6,latch:44,Indonesians:28,Shriver:2,"front-line":3,Introduction:47,Caught:17,Furukawa:2,pawing:8,"per-capita":176,Micron:2,Melissa:2,Berne:2,blatantly:6,radioed:249,radically:6,Tatras:4,"right-angled":1,vanishes:20,"signal-to-noise":3,luscious:1,Thalmann:2,"Colorado-Ute":2,vanished:32,"hand-filed":1,permitting:8,KLA:2,Scandanavian:1,Double:1038,gallants:4,propelling:8,endorsers:4,stinkin:1,Permian:2,younger:12,apologizing:8,ineluctable:1,twotiming:8,serious:1,stacks:4,remarkable:1,Edge:11,alternatives:4,obviate:39,"PRO-CHOICE":1,Zagros:2,comments:18,remarkably:6,Pride:2,"prescription-drug":22,lisping:8,Reuschel:2,PepsiCo:2,"price-based":1,mistook:16,Mourning:8,abhorrent:1,Gevergeyeva:2,Jiotto:2,Seebohm:2,overwrought:1,"more-general":1,Intan:2,Eleanor:2,"ex-trucking":1,leathered:1,Athletics:46,Tractor:11,tortillas:4,Mycenae:2,unlaced:32,kingpins:4,Wycliffe:2,Unofficial:1,"red-faced":1,svelte:1,"tree-farming":1,slower:136,Coosa:2,Baptiste:2,"common-position":1,"less-than-exacting":1,slowed:32,"f-Includes":20,Midgetman:2,shulde:190,"Schering-Plough":2,"spin-off":22,"heavy-framed":1,Cocktails:4,orthodontics:4,stressful:1,Finmeccanica:2,Automotive:40,"tax-paying":1,Schulof:2,Streeters:113,Manzanec:2,"one-page":1,amounting:8,"multi-valued":152,Glennon:2,SUSPENDED:16,Translant:2,"push-offs":4,"cost-recovery":1,KLM:2,crippled:81,hoarse:1,tallying:8,Helmsley:2,Postipankki:2,"Hart-Scott-Rodino":40,snubbed:54,Crimes:113,"law-abiding":1,Pumblechook:2,mutters:18,rededicate:39,"socio-structural":1,"sawed-off":1,Ariel:2,chaired:81,modifying:8,graduated:45,"light-colored":1,Bengals:28,"not-so-favorite":1,dervishes:4,XFI:2,"post-midnight":1,dolphins:4,confounded:32,"middle-age":3,Owasso:2,"Ninety-Two":2,hawkish:1,Bengali:66,vaguest:51,Benefits:4,Ramble:2,"two-tail":1,"ex-convicts":4,"steel-hungry":1,Summary:11,Stride:2,dismal:1,shafts:4,Apocalypse:2,Sarney:2,"all-too-brief":1,contradicts:20,"third-rate":1,modified:81,resembles:20,ferry:25,modifies:20,"semi-automatic":1,"multiple-column":1,trump:25,intimating:8,tinted:14,"debt-free":1,Buxton:2,"Farvel-Topsy":2,inclosed:17,recuperating:8,bleary:1,"non-annualized":1,levy:24,"Soviet-made":1,Mahe:2,bonfires:4,filmstrips:4,heartbreaking:1,typewritten:7,doggone:461,Mid:2,COMPARE:39,branches:4,stupidly:6,branched:81,"public-fund":1,imagining:8,scammers:4,"taut-nerved":1,constituents:4,preening:8,motions:18,Zia:2,Wardwell:2,Folkerts:2,Glickman:2,Rinsing:8,LUTHER:2,paradoxically:6,redheaded:1,duplex:22,"ICL-GE":2,Effects:28,Barristers:4,"ex-Cubs":4,Voyles:2,"work-study":3,formidably:6,devastated:45,Odetics:2,LINTAS:2,Vogue:2,Tokuo:2,Platonic:66,Beutel:2,"frequency-control":1,"open-end":1,realistic:1,rangers:4,Heels:4,Brokaw:2,friendlily:6,rethinking:8,wearisome:1,"most-recent":186,footing:21,Exploratory:1,Abstractions:4,Miraculously:6,flaccid:1,Rosenwald:2,keno:1,"pollen-inhibiting":1,securites:4,opportunists:4,Cominco:2,Experts:4,Currys:2,"money-lending":1,"pound-deutsche":1,Nude:2,electrified:17,unfriendly:1,Musicians:57,Ruling:268,Cattolica:2,delude:42,"fair-use":1,Worriers:4,roosters:4,flare:44,peppering:8,econometric:1,Folkston:2,Welfare:11,Touch:2,Griselda:2,view:24,discontinued:81,programing:21,Muskoka:2,Giant:129,surviving:8,Dietrich:2,symbolic:1,exhaustible:1,retainers:4,Citizen:11,"W/NNP.R.G.":2,"non-packaging":1,Sonuvabitch:106,lootings:4,"anti-men":1,Saperstein:2,Capcom:2,Stegemeier:2,persuasions:4,"fifteen-sixteenths":4,EARNINGS:4,lobbyists:4,socialites:4,white:3,"question-and-answer":1,"accounting-rules":1,appointees:4,PDT:2,"anti-vivisectionists":4,PDN:2,"down-and-out":1,PDI:2,Indelicato:2,Disclosures:4,wide:97,DiGiorgio:2,survivals:4,crowded:45,poisoning:308,"recreational-vehicle":22,Thorstein:2,confessed:32,"pre-Gorbachev":1,Lavin:2,"Consumer-electronics":4,Cartridge:2,"balance-sheet":22,Yankton:2,fondest:51,"product-monoclonal":1,keynotes:4,strengths:4,dynamited:17,hyperfine:1,Vuitton:2,multiple:3,MLD:2,MLR:2,boiling:55,Nissin:2,moldy:1,multiply:42,MLX:2,"dried-up":1,"Maize-Products":28,nonaddictive:1,Verbal:66,Salads:4,Corabi:2,playing:5,mountainous:1,Beadles:2,readjust:39,cuddled:16,Lukman:2,Sorenson:2,idealisms:4,hack:25,"pre-emptive":1,"blue-eyed":1,multiplexers:4,crimped:7,Lyndon:2,"well-wishers":4,Concurrent:1,fickle:1,"Jordan\\/Zalaznick":2,Gallen:2,"blue-eyes":4,Telling:8,cautioned:32,subjugated:1,welled:16,lighted:45,Loewenson:2,lighten:39,Violence:11,Athenian:1,Sieux:2,Gwendolyn:2,radiations:4,clerks:4,Eleazar:2,Similar:1,veiled:14,aluminum:22,Sankai:2,Kona:2,impolite:1,Kong:2,naked:1,Minute:2,Cycle:2,Collector:11,ignored:54,"head-butting":1,encourages:20,professes:20,emote:39,Westford:2,"downfall...":102,Ettore:2,ignores:20,"state-federal":1,professed:112,encouraged:45,"non-systematic":1,visceral:1,addled:7,"truck-manufacturing":1,spoons:4,"husband-wife":1,Quennell:2,unappealing:30,Differential:1,Frampton:2,thunderstruck:1,originated:1039,scavengers:4,"George-Barden":2,Renchard:2,fiddling:122,Reasonable:1,comb:25,come:1040,interdicting:8,Muffin:2,Freedman:2,"Winterthur-based":1,"non-oil":1,"power-generation":22,swaggering:8,"single-season":1,dispatch:25,Futotsu:64,Retails:4,ZBB:2,Morcott:2,Teodulo:2,Bicycling:2,TRUSTS:4,"finger-tips":4,deposited:54,declining:5,Herscu:2,Excess:1,enraptured:32,Peale:2,religiously:6,"Neb.":2,Rosemont:2,Deanna:2,"Mass.-based":66,Inouye:2,Yukio:2,twigs:4,assessories:4,WEIRTON:2,allnight:1,"Al-Faqih":2,"movie-production":22,shops:18,"war-damaged":1,Alexander:2,Brosterman:2,bunters:4,Zendo:2,capping:55,Jacinto:2,Followin:8,whirred:16,"about-faced":16,"employment-tax":1,mold:44,locking:13,attributing:8,bows:18,"less-experienced":1,Hazards:4,physical:3,"cost-to-benefit":1,circulatory:1,"high-production":1,"I\\":2,IS:20,barges:18,IT:53,muffled:103,IV:2,macroeconomic:1,IN:245,IC:2,barged:54,Dynamics:74,IG:2,IF:127,longing:21,sed:16,perennial:1,swatches:4,caressing:55,It:38,Yakovlevich:2,Il:280,Io:2,In:1041,Philmont:2,tweedy:1,desolate:1,tweeds:4,captures:72,drafters:4,Woodland:2,violent:1,Farnworth:2,"cable-TV":47,kneeling:8,captured:320,Broadly:6,Lanham:2,MacLean:2,worthier:12,Jets:113,styles:4,mugged:17,Terminaling:2,Solomon:2,styled:45,Aber:64,correcting:55,unwilling:1,Came:16,championing:8,"N.V.":2,Thermopylae:2,Pin:39,Pia:2,Pic:2,Turbulent:1,Pie:2,clays:4,Spoken:2,Hafner:2,"most-likely-successor":1,Pip:2,shunned:32,Chapin:2,Since:206,"value-added":1,Abex:2,"multimillion-dollar":3,Destroy:2,"Three-part":1,"pre-Hugo":1,slice:44,Dulaney:2,slick:3,Creditanstalt:2,"Right-to-Die":1,Perennial:66,Castellanos:2,"self-chosen":1,Raether:2,"foreign-loan":1,itching:55,inspect:42,loudest:380,voracious:1,"seven-year":1,fabled:1,VOTED:16,healthiest:51,"insurance-rate":1,earlier:1042,baffled:81,Snakes:4,"non-productive":1,"self-fulfilling":1,Bufton:2,scornful:1,Datacrime:2,Cubism:47,Eddington:2,Dairl:2,modernists:4,"industry-funded":1,revolutionaries:4,scoffed:32,Coykendall:2,determing:8,determine:42,inadvertent:1,Stoyer:2,backwater:22,calamities:4,funerals:4,hoarding:21,disposed:81,ferris:1,"Hanover-Chalidale":2,expatriate:1,disposes:20,municipalities:4,rainless:1,vested:14,fundamentals:4,"first-phase":1,docks:4,RDF:2,OOH:2,fabricate:42,temperaments:4,Brinker:2,Wacky:2,tiptoe:39,Koepf:2,"sure-enough":1,"life-insurance":22,POWERS:4,Special:66,"personal-injury":3,surly:1,contributors:4,modules:4,Herry:2,contributory:1,Merrimack:2,Mission:11,"high-spirited":1,toiled:32,trundle:78,together:1043,ingeniously:6,Shimizu:2,spends:20,tracings:4,Golomb:2,"area-code":1,swords:4,Avalon:2,"tax-deferred":1,"Motoren-und":2,Plessis:11,Naval:40,whiskery:1,Ghormley:2,Poduska:2,staunchly:6,Refiners:4,"hawk-hatching":1,Additives:28,booked:54,calls:132,synergies:4,associatively:6,"thirty-caliber":1,exhausting:30,"Republican-controlled":1,"endangered-species":4,Gateway:2,nurseries:4,Tube:2,"small-cap":1,outpacing:8,Pharmical:2,"lower-court":3,Evansville:2,propagandizes:20,"long-deprived":1,Jutting:8,"Major-League":2,Baytos:2,"desktop-presentation":1,"high-security":1,"Japanese-supplied":1,Trees:113,longtime:3,"St.-Pol":2,"Iowa-based":1,grinds:72,Choong:2,howlers:4,ultraviolet:3,reordering:21,Bawer:2,prolonged:45,Trimble:2,RICO:2,"cement-mixing":1,quipped:250,Rarely:6,Lathouris:2,Hellfire:2,Rancho:2,Bridgestone:2,professing:8,"Corp.-Toyota":1,busing:8,Shopping:321,Hilliard:2,resettled:17,aptly:6,Theological:2,Subsidiaries:4,"well-prepared":1,Gilborn:2,oncoming:1,Brigadoon:2,disburses:20,"Neo-Ecclesiasticism":2,disbursed:54,frightens:20,Zermatt:2,Pauline:2,Short:301,prognoses:4,Helpern:2,supposedly:6,wild:97,Shore:11,Ankeny:2,Shorn:17,somewheres:6,skidded:32,observing:8,handlers:4,"Richardson-Vicks":2,allows:20,Halleck:2,Sponge:2,TEAMSTERS:28,MORE:458,Sheriff:11,suddenly:6,semiconductors:18,vertebral:1,genealogies:4,fearfully:6,Gant:2,"much-revised":1,vertebrae:4,Evaluation:47,Columbus:11,Comerica:2,wield:42,"T-shirt":19,demeaned:17,permanently:6,pausing:8,Tobacco:11,Bandow:2,"re-elected":81,"Ten-year-old":40,Shropshire:2,"Francisco-area":66,Barriers:4,MobiTel:2,"three-masted":1,soloists:4,Approaching:8,undreamed:14,Kabul:2,Toulouse:2,trappings:4,"location-minded":1,"instrumental-reward":1,shielded:54,infests:20,Goldwater:2,"oat-based":1,"cross-react":33,Sows:4,CARE:2,palest:51,Brahmsian:1,prompting:55,joints:4,Cresswell:2,"super-strict":1,Lyphomed:2,"trading-house":1,Speaker:11,urinals:4,Paterson:2,"drug-consuming":1,"more-efficient":1,chores:4,Dresden:129,benzodiazepines:4,Electron:11,stemming:8,hoaxes:4,Improve:39,mould:39,"three-lawyer":1,Lowell:2,Metzenbaums:28,Hanft:2,reflect:42,"Etch-a-Sketch":2,Mackinac:2,ballads:4,"equivalent-choice":1,replete:1,shortcomings:4,Fairbrothers:2,Seas:74,Sear:39,"counter-intelligence":1,groundless:1,"funeral-accessories":4,"cross-legged":1,Seal:2,Psithyrus:2,Witman:2,Describing:8,"best-case":1,Oce:2,Weizsaecker:2,dissolving:30,quarrels:18,unusually:6,Shillong:2,"Asian-American":1,Brunswick:2,forgiving:30,Polyakova:2,March:2,"reference-points":4,"bridged-T":2,inward:218,"appeals.":4,harmless:1,verifiably:6,"self-willed":1,Bowing:8,Shaiken:2,"public...":102,cantons:4,"MGM\\/UA":129,return:205,racoons:4,Downbeat:2,Mephistopheles:2,"state-of-the-market":1,cigarettes:4,Rotenberg:2,"dividend-related":1,SURGED:16,Rag:2,Rae:2,Ran:16,"penalty-lending":1,Ram:2,Raj:2,reservists:4,"Eight-foot-tall":1,cobblestones:4,Rat:2,Sport:11,McNeil:2,Rax:2,Ray:144,pirates:4,needless:1,Fichte:2,Foothills:113,"Burke-Rostagno":2,pirated:17,Complex:40,"are...":102,Warehouse:11,Vappenfabrikk:2,wangled:16,theologians:4,Fiap:2,Cinemactor:2,Lakes:111,"sea-turtle-saving":1,Pullover:2,Prophet:2,mildewy:1,kilns:4,Univest:2,gimbaled:1,causally:6,Camerino:2,enveloping:8,"big-deposit":1,Tambo:2,pullbacks:4,MTU:2,Playworld:2,Wingback:2,Breakthrough:2,Dorian:2,Scherer:2,WGBH:2,Praises:20,"wide-scale":1,radical:3,churning:55,Westdeutsche:2,unredeemed:1,Jacky:2,abrogated:17,"semi-minor":1,Olof:2,interact:149,coasts:4,Clancy:2,Aircraft:113,"ever-so-Oxonian":1,pitted:54,finances:18,imperfect:1,Rollie:2,gagwriters:4,dethroned:17,exploded:32,litigated:17,convinces:20,"Boston-based":1,Rollin:2,indecisively:6,"non-competitive":1,Unifil:2,convinced:212,explodes:20,"time-servers":4,dans:64,stall:25,stalk:33,"consumer-finance":1,"cradle-to-grave":1,dang:1,"Winthrop-University":2,stale:1,"MD-82s":28,cleaner:515,depletes:20,IIcx:2,gals:4,imports:18,Reilly:2,decadent:1,needs:1044,IIci:2,oaken:1,depleted:54,cleaned:54,gall:25,Steinkuehler:2,"federal-state":3,Perkins:2,Agoeng:2,"seven-story":1,Bullet:2,cropped:32,gains:170,unperturbed:1,broadcastings:4,ARF:2,headstones:4,park:25,Klopfenstein:2,Benzes:2,Meltex:2,"little-girl":1,coastal:1,Melted:17,Gotschall:2,Tabarro:64,explicable:1,seasons:4,infrastructures:4,Volta:2,doggie:1,"lowest-paying":1,Straus:2,unheralded:1,Gracie:2,spiralis:4,fond:104,"changed...":102,antilock:1,Suor:64,endocrinologists:4,Launder:2,Reaganauts:4,technologically:6,"ground-based":1,Masato:2,reconnoiter:33,Highest:51,arrowheads:4,sacking:8,Antinori:2,Haijac:2,"better-off":335,citybred:1,"Russian-language":1,"bug-free":1,concededly:6,relational:1,instinctive:1,Yorkshire:2,Institutions:56,Passenger:47,"Bible-loving":1,crucifying:8,Marchers:28,Chamorro:2,sacrificium:64,cartoons:4,Litvack:2,baroque:3,Jellison:2,stump:25,dump:95,CITIZEN:2,boulders:4,Negotiators:4,arc:25,dumb:1,are:230,facings:4,cleverly:6,unsure:1,arm:25,Mineral:2,Pavlov:2,"book-publishing":22,"EP-3E":2,roundhead:22,freshmen:4,unpaved:1,drooping:8,Dongen:2,unions:4,banalities:4,Finders:2,Commerzbank:2,Streisand:2,ulcerative:1,Fax:11,dandily:6,Fay:2,importers:4,fetchingly:6,Zara:2,Hardee:2,clods:4,MINOR:66,movers:4,fascicles:4,"textile-producing":1,"no-fat":1,Appropriate:1,Cornfield:2,axiological:1,reassessed:16,enchained:17,finds:72,Hallowell:2,Birch:2,unsigned:1,renationalize:39,incandescent:1,untracked:1,pursue:42,semipublic:1,acrid:1,eyewitness:22,sever:42,suspenders:4,thermodynamics:4,"AT&T-sponsored":1,Indocin:2,Kompakt:2,Plan:11,"per-sale":1,Fan:59,debasing:8,"super-secret":1,"loan-by-phone":1,"ten-hour":1,misbehaving:8,heighten:39,Mindscape:2,Motsoaledi:2,churchly:1,"long-hoped-for":1,Examiners:113,"all-black":1,"Jaguar-GM":40,Colonia:2,Affaire:2,Tip:2,rip:63,Tin:2,rim:78,"TRACY-LOCKE":2,rig:24,rid:1045,"earnings-related":1,"Interest-rate":1,lengthy:1,Bipartisan:1,minin:8,"U.S.-based":1,lengths:4,"debt-riddled":1,ideologies:4,propping:8,Jiffy:40,"farm-state":40,"time-&-motion":1,Schroders:2,prosodies:4,fastens:20,Blyth:2,"one-gee":1,brooding:5,Kipling:116,moving:5,Drug:11,uneasily:6,deluding:8,Duzan:2,Lilien:2,castigates:20,"junk-market":3,"Harbor\\/Save":2,metis:4,Smyrna:2,thermostated:17,"two-edged":1,solids:4,castigated:54,broods:4,Myrdal:2,starved:17,"information-products":4,"two-step":1,Takes:20,Measurements:123,Kochola:2,reincarnated:32,Everly:2,Taken:17,retired:81,Nope:106,Triomphe:2,"old-name":1,Adventurers:4,"Sundance-based":1,violations:4,incomes:4,"non-algebraically":1,joyless:1,Desprez:2,Arapacis:2,Continential:2,"off-network":1,Kia:2,Jehovah:2,pithy:1,recond:16,Brealey:2,incidental:1,Manthey:2,"chin-ups":4,"hawk-faced":1,PATOIS:2,resourcefully:6,"anti-heroes":4,eluding:8,traits:4,Libor:2,Channel:11,Milgrim:2,Discovered:17,Fledermaus:2,compressors:4,nosing:8,pros:4,Albuquerque:2,prop:95,Reflecting:8,Comiskey:2,Adelman:2,"business....":102,prod:63,"red-handed":1,apathetic:1,Substance:47,ecumenicists:4,scalawags:4,firebombed:17,denationalizations:4,Dreiser:2,Lackland:2,"price-level":1,Translated:17,Edley:2,intense:1,Signet:2,Malamud:2,Lanyi:2,bleeders:4,seeped:32,most:1046,tortuous:1,Liqueur:2,Petco:2,subvert:42,greets:20,Azalea:2,modal:1,Dittamore:2,"Wood-products":4,credible:1,cutoff:22,Hawkins:2,Robards:2,hoodle:106,resigns:20,Approximately:6,piteous:1,"non-interest-bearing":1,Hawking:2,paradigmatic:1,credibly:6,Speidel:2,MACHINES:2,Shulman:2,"securities-trading":3,unstructured:1,osseous:1,pallid:1,signifies:20,unadorned:1,signified:32,Thermoforming:8,Povich:2,Shape:11,"cash-value":1,perplexing:1,Compeyson:2,Backstitch:39,girlfriends:4,tasting:55,crank:63,Chesaning:2,"in-accord-with-nature":1,crane:25,billed:81,"Roto-Rooter":2,"then-senior":1,REIT:2,Partlow:2,"good-cop":1,Leon:2,Thatcher:2,torpedoing:8,Mirabella:2,Rabb:2,Mirabello:2,called:506,"single-domain":1,Cooperation:2,soars:4,bluechip:1,"long-established":1,ether:281,Pagni:2,Faxes:4,tentative:3,ulcerations:4,Nyers:2,towers:18,Mount:128,Saylor:2,Junkerdom:2,WITHHELD:17,Bahamian:1,Skills:4,"six-cent":1,"auto-safety":1,inflame:39,Arbeitskommando:2,Meekison:2,Discussing:8,Nautilus:40,Kanab:2,we:1047,Kanan:2,Sevigny:2,Piccadilly:40,Rawson:2,reproaches:20,extruding:8,Mott:2,Rugeroni:2,"farm-equipment":22,"pur-poises":4,Casualty:2,"sale-lease-back":1,"politico-sociological":1,Monthly:40,Wagnerian:1,locating:8,Asses:4,Asser:2,Bureau:2,Asset:11,contributions:4,Mound:2,cupboards:4,Howry:2,pax:64,Leber:2,sniped:250,fenced:7,McQuown:2,UAW:2,mEq:2,UAL:2,"bullet-proof":1,fences:4,snipes:20,wished:32,lynch:39,bedrooms:4,melding:55,wishes:72,Masterpieces:28,Giraldi:2,Flattau:2,Oliveira:2,"fast-paced":1,descend:42,quintuple:1048,BCE:2,"electronic-publishing":1,"CFC-12":47,outdo:42,noted:85,Gevurtz:2,Teletypes:4,Pyle:2,malignant:1,REALLY:2,Upper:40,"pro-Republican":1,fermenting:8,Sections:4,Morgenzon:2,Responses:4,astounded:14,Antwerpsche:2,waiting:267,Link:158,Linh:2,"half-seriously":6,Line:11,fastenings:4,Moxley:2,"cf.":80,Affaires:2,Wiess:2,Dotson:2,Reebok:2,"anti-homosexual":1,Dictionaries:4,rosaries:4,"far-afield":1,tarred:54,"non-public":1,"non-conformists":4,Walinsky:2,MMG:2,Bathing:21,jeweled:1,skyrocketed:32,spiced:1,"e-Ames":2,evading:8,territoire:64,Nowak:2,spices:4,initials:4,Copeland:2,Beneficiaries:4,Minks:2,miscreant:3,Robert:2,endotoxins:4,offends:20,Soria:2,Pyszkiewicz:2,Survanta:2,unhappy:1,motor:70,apply:42,"cross-purposes":4,"Accounts-a":74,discerns:20,Chemistry:2,carcinogenic:1,iced:1,Maxell:2,Guiftes:4,Curiously:150,weeping:55,Secrecy:47,Rocco:2,Willem:2,Feis:2,credulous:1,Wilcke:2,cooperate:42,Choir:47,archangels:4,faultless:1,Scouts:28,benignant:1,Creighton:2,Whirlwind:2,paralleled:17,"do-gooders":4,slaps:72,Fonseca:11,Balaguer:2,instrumentalities:4,splinters:4,Bis:2,Northeners:2,tour:315,proof:22,brightening:8,Nielson:2,tap:182,immediacies:4,Photoprotective:2,Czerny:2,tax:44,tad:163,tae:64,tag:25,tam:64,tan:3,onions:4,hyacinths:4,"Sixty-eighth":2,decorating:21,"Middle-aged":1,inaugural:3,actualities:4,Jist:6,"Second-half":1,"base-metals":4,panic:44,trusses:4,"E.Y.":2,Ringwood:2,Fossey:2,Groot:2,BANK:11,Cadet:2,Tallahassee:2,"semi-conscious":1,Repertory:2,"drought-stunted":1,Texts:4,crawling:8,pharamaceuticals:4,sweetens:20,Wrightson:2,demonstrations:4,Birr:2,unjustified:1,Walpole:2,Birk:2,Ursa:2,Santovenia:2,Bird:11,underwater:34,voiceless:1,terriers:4,Grandsire:2,unpaintable:1,Dyk:2,Margler:2,violating:8,crash:205,"multibillion-dollar":1,Ilotycin:2,flotillas:4,"two-inch-square":1,practice:44,"socio-archaeological":1,commended:54,CRSS:2,emanations:4,Successors:4,sinners:4,Summer:77,entrench:39,"recorded-music":1,Arbitragers:4,tallied:54,Accurate:1,eased:32,Unloved:2,"building-related":1,paleocortical:1,trap:25,eases:20,upheavals:4,Bobbie:2,Edson:2,eloquent:1,Auditors:4,Sidra:2,Narcotics:111,jollying:8,Owings:2,"semi-isolated":1,Lamborghini:2,RUSH:25,Festiva:2,Frantisek:2,contradictions:4,Aon:2,WAVE:2,Stowe:2,janglers:4,outings:4,Nearly:6,grits:4,brilliantly:6,"four-foot-high":1,adhesives:4,"once-staid":1,unenunciated:1,Older:1049,dusts:4,pleas:4,"Hyatt-Clark":2,Entree:2,bedazzled:17,tyrannis:64,dormitories:4,flotations:4,segregated:45,barns:4,substantiate:39,Americanized:16,Currency:47,"German-language":1,cain:190,ionic:1,precepts:4,timbers:4,Prussian:2,McNally:305,"K.":2,hitherto:6,Cradle:2,gratuitously:6,homers:4,Local:66,destinations:4,Wised:2,individualizing:8,droop:174,"top-ranking":1,accent:25,Rankin:2,Exhibited:17,Illingworth:2,"long-dollar":1,Wings:65,Ke:2,Ko:2,Swiveling:8,resurrects:20,"skip-a-month":1,"sherbet-colored":1,"low-ability":1,constituent:22,Ky:2,KC:2,KB:2,Maxine:2,Outstanding:66,KK:2,KN:2,Boxy:1,Strekel:2,"long-shanked":1,Italianate:1,Harrold:2,outsmarted:32,"U.Cal-Davis":2,woebegone:1,Veteran:66,"U.S.concerns":4,outstrip:39,Terex:2,Soccer:2,excusable:1,"non-defense-related":1,florid:1,allergies:4,oozing:8,"Southmark\\/Envicon":11,divert:42,divers:152,standup:3,McGuire:2,repairs:18,Bedfellows:4,McGuirk:2,Solution:11,offend:39,Zilligen:2,"specialty-metals":4,"Lappenburg-Kemble":2,Whimsey:2,deny:42,Customary:2,Bent:2,neoconservative:1,dens:4,Hazeltine:2,Benz:2,dent:25,Bend:59,Beng:2,Earth:11,Benj:2,inane:1,Carlyle:2,illuminations:4,upright:218,BGS:2,Stoddard:2,Anastasio:2,narcotraficantes:64,wry:1,holistic:1,Fibreboard:2,Inaugurates:20,humanitarian:3,"Karl-Birger":2,candidates:4,procreative:1,"kapok-filled":1,Textron:2,"hurricane-related":1,horns:4,Baringer:2,workin:8,Folklore:47,diagnosing:55,fronting:55,Parodi:2,Whiskey:11,Paragraph:11,Gladius:87,words:4,merchandised:17,"self-evident":1,penetrate:42,wordy:1,Humboldt:2,Nikita:2,Derchin:2,Lieber:2,waterfalls:4,generations:4,Wiggins:2,"investment-area":1,ebb:25,Thinking:217,Irvine:2,Nanook:2,gutters:4,scoured:81,recanted:32,closer:1050,closes:132,Olissa:2,Ravitch:2,gliders:4,congressionally:6,complementary:1,proteases:4,Slavs:28,rumblings:4,closed:1051,cinders:4,masterful:1,pants:91,audiovisual:1,ribonucleic:1,beverages:4,Minnie:2,"snap-in":1,Facing:8,tiers:4,"Self-designated":1,"beautifully-built":1,broadside:34,Modesto:2,Sprecher:2,blackbirds:4,safely:6,withdraws:20,Schockler:2,Satisfying:8,Podufaly:2,shoving:8,"CD-ROM":11,"VA-backed":1,RICOed:249,Earlham:2,Brice:2,Zapotec:1,Brick:11,withdrawn:17,"three-fourths":176,freedmen:4,"unable-to-locate":1,BiiN:11,Makes:20,thumbed:32,broadcasts:18,swabbed:16,"corporate-securities":1,validating:8,Heflin:2,agreements:4,monoclonal:1,butchers:18,"property-and-casualty":1,yff:127,merrily:6,Masada:2,Gerrard:2,"time-sensitive":1,saner:12,"Mortgage-Backed":66,Castles:4,readied:54,Fogler:2,Halloween:2,irate:1,Sanchez:2,Shylockian:1,Greenberger:2,Targets:20,Quieter:12,Gypsum:2,Arnott:2,"smashed-out":1,chanter:64,Yokosuka:2,Gaveston:2,"Anti-apartheid":1,"fourth-fifths":4,"capitalist-exploiters-greedy-American-consumers-global":1,"Bellomo-McGee":2,Briton:11,"credit-services":4,stadiums:4,vintage:3,"English-speaking":1,fusillades:4,adverse:1,Ponchartrain:2,"down-the-line":1,merciful:1,panning:8,Olick:2,"last-ditch":1,sweetened:45,Resource:2,tactful:1,Reis:2,Entex:2,Terrours:4,coalfields:4,Rein:2,Euroyen:2,Reik:2,appropriated:54,Adults:4,contendere:64,superconcentrates:4,"light-blue":1,ARA:2,"fourteen-year-old":1,appropriates:20,ARE:33,Ancinec:2,Piraeus:2,outgrow:39,superconcentrated:1,ARM:11,contenders:4,Eaux:2,boos:4,boot:25,cloaks:4,"me/PRP":2,"hard-to-get":1,Aruba:2,rocked:32,danced:32,"every-day":1,"pro-consumer":3,InfoCorp:2,Far:294,overspending:21,Fat:129,Stalins:28,Fab:2,Mokhiber:2,ski:139,Joynt:2,branch:25,knoe:39,monetarists:4,tawny:1,jocund:1,protesters:4,Grundfest:2,Recording:11,KerrMcGee:2,know:182,knot:25,"food-aid":1,Newspaper:11,Hesperus:2,variants:4,"anti-terrorism":1,LIMITED:66,Compromising:8,bedfellows:4,Reuveni:2,taxpayers:4,"most-desired":1,"mid-December":11,Stephan:2,starred:32,majesterial:1,Gibraltar:2,JONES:2,traitors:4,because:206,shabby:1,mosquitoes:4,Boucheron:2,"shorter-term":200,Wishart:2,holler:39,"price-to-book":1,leaden:1,"first-six":1,Singapore:2,Manaifatturiera:2,leaded:1,Pickfair:2,Glazes:4,Glazer:2,outrageously:6,scalpels:4,Mosettig:2,Glazed:17,Stairs:2,Population:11,STANLEY:2,poets:4,miniskirts:4,codetermines:20,idlers:4,kernels:4,Ptolemaic:66,Mediation:2,Rothschild:2,leased:45,guffaws:4,"Large-deposit":1,nationalities:4,Acoustic:2,Canning:2,after:245,throng:78,squealed:32,getting:8,"high-end":1,"let-the-locals-decide":1,"owl-shaped":1,Outer:983,Suffice:39,Gelder:2,corralling:8,Wildwater:2,"computer-integrated":1,"flower-bordered":1,dispossessed:14,"knife-men":4,Weaver:2,fired:54,centurions:4,dagers:4,"best-educated":1,noxious:1,Duse:2,indictments:4,Flavus:2,Dust:11,uncontrollable:1,Alps:74,Lezovich:2,piously:6,contradictory:3,"percentage-point":1,"policy-setting":1,"Hans-Dietrich":2,Alpo:2,"hearing-impaired":17,instructive:1,Ruysch:2,Dowie:2,lubricated:17,McMoRan:2,"non-existent":1,heralding:8,"no-driving":1,Kankakee:2,meaningless:1,Bailout:2,dives:18,Josephson:2,Sessions:113,"cut-to-a-familiar-pattern":1,"scandal-tripped":1,immobilized:17,Kalikow:11,roars:20,sick:1,Improving:55,"long-time":1,Manufacturing:11,Milburn:2,Applebee:2,Sandifer:2,Attlee:2,shown:54,contends:20,interventionists:4,supple:1,geysers:4,SELL:39,Riyadh:2,mosaics:4,outslugged:17,problematics:4,expands:20,footloose:1};
+
+var LEXICON_TAG_MAP = [["NNP"],["JJ"],["NNP"],["JJ","NN"],["NNS"],["VBG","JJ","NN"],["RB"],["JJ","VBN"],["VBG"],["VBG","VBG|NN","JJ","NN"],["JJ","NN","NNP"],["NNP","NN"],["JJR"],["JJ","VBG"],["VBN","JJ"],[],["VBD"],["VBN"],["NNS","VBZ"],["NN","NNS"],["VBZ"],["NN","VBG"],["NN","JJ"],["NNP","JJ","NN","UH"],["NN","VBP","VB"],["NN","VB"],["VBP","JJ","VB"],["NN","VBG","JJ"],["NNPS"],["JJ","LS|JJ"],["VBG","JJ"],["NNP","VBP"],["VBD","VBN"],["VBP"],["JJ","NN","RB"],["PRP$","NNP"],["VBN","VBP","NN","VB"],["VB","VBN","VBP","JJ","NN","RB","VBD"],["PRP","NNP"],["VB"],["NNP","JJ"],["NNPS","NNP","NNS"],["VB","VBP"],["RB","NN"],["NN","VB","VBP"],["VBN","VBD","JJ"],["NNP","NNPS","NNS"],["NN","NNP"],["VBN","VBN|JJ","JJ","VBD"],["NN","JJ","VB","JJR"],["VB","VBP","JJ","NN"],["JJS"],["PRP","NNP","DT"],["PRP"],["VBN","VBD"],["VBG","NN"],["NNS","NNP","NNPS"],["NNS","NNPS"],["VB","VBP","VBZ"],["NNP","VB"],["."],["JJ","DT","NN","RB","RB|JJ"],["VB","NN","VBD"],["VB","NN"],["FW"],["NNPS","NNS"],["JJ","NNP"],["RB","UH"],["RBR"],["VBZ","VBN","."],["NN","JJ","VB"],["NNP","JJ","VBN"],["VBZ","NNS"],["NNS","VBZ","NNPS"],["NNP","NNPS"],["NNS","UH"],["WP","NNP"],["NNP","NN","NNPS"],["NN","VBP"],["WP"],["NN","FW"],["VBN","JJ","VBD"],["JJ","VB"],["VB","JJ"],["$"],["VBD","JJ","VBN"],["PRP","NNP","VBP"],["NNP","FW"],["PRP$","NN","NNP"],["DT","NNP"],["VBP","VB","NN"],["NNS","NN"],["NNS","NNPS","NNP"],["NNS","JJ","NN"],["JJ","IN","NN"],["VB","VBP","NN"],["NN","JJ","RB","JJS"],["JJ","RB"],["NNP","VBN","JJ"],["NNP","JJ","NN","VB"],["NNP","MD"],["VBG","JJ","NN","VBG|JJ"],[":"],["JJ","VBD","VBN"],["JJ","NN","VB"],["IN","JJ","RB","RP"],["UH"],["JJ","RB","RBR"],["IN","RB","NNP"],["VBZ","NNP"],["VBD","FW"],["NNPS","NNP"],["VBD","VBN","JJ"],["NNP","NNS"],["VBN","VBD","NNP"],["NNP","NN","VB","VBP"],["NNP","VBG"],["JJ","NNP","NN"],["VBN","VB","VBD"],["CC"],["NNP","VB","VBP","NN"],["JJ","RB","VB"],["NN","JJ","VBG"],["NNS","NNP"],["IN","NNP"],["UH","NNP"],["JJ","RB","UH"],["IN"],["NNP","NN","VB"],["NNP","JJ","NN"],["NNP","NNS","NNPS"],["JJ","NNP","RB","VB"],["VBZ","NNS","NN"],["``"],["NNS","NNPS|NNS","NNPS"],["JJ","NNS","NN"],["JJR","RBR"],["IN","RB|IN","JJ","NN","RB","RP"],["JJS","JJ"],["NN","JJ","VB","VBP"],["VB","VBD","VBN","VBP"],["NNP","JJR"],["NN",","],["RB","NNP","NN"],["NNP","NNPS","NN"],["FW","JJ"],["JJ","IN","NN","RB","VBN","VBP"],["FW","NN"],["JJ","VBN","NNP"],["VBP","VB"],["RB","NNP"],["VBD","VBN","VBP"],["NNS","JJ"],["NN","JJ","VB","NNP","NN|JJ"],["JJR","RB"],["NNP|NP"],["DT","JJ","NN"],["NNP","VBN"],["NNP","VBP","NN"],["VBN|JJ"],["VBN","NN"],["NNS","VBZ","VB","UH"],["JJ","NN","RB","VB","VBP"],["NN","RB"],["NNP","FW","NN"],["RB|VBG"],["DT","NNP","RB"],[")"],["NN","JJ","RB"],["NN","VB","NNP"],["NNS","NN","VBZ"],["NNP","JJ","NNPS","NNS"],["NNP","VBD"],["RB","JJ","NN","VB"],["VBP","NN"],["UH","NN"],["JJ","NNS"],["VBG","JJ","RB"],["NN","JJ","RB","NN|JJ","NN|RB","NN|JJ|RB","RB|NN|JJ"],["NNPS","NNS","NN"],["NNP","JJ","NN","RB"],["NN","VBD","VBN","VBP","VB"],["VB","NN","VBP"],["NNP","UH"],["NNP","RBR","RB","JJR"],["VBN","JJ","NN"],["JJ","JJS"],["VBD","JJ"],["VB","NNP","VBP"],["NN","VB","JJR","VBP"],["MD"],["NN","VBG","VBG|NN"],["NNP","JJS"],["NNP","VBG","JJ","NN"],["RB","NNP","CC","IN","UH"],["JJR","NNP"],["VB","VBN"],["RB","JJ","NNP"],["JJ","NNP","NNS","NNPS"],["VBG","JJ","VBG|JJ"],["JJ","JJR"],["NNP|VBN"],["JJ","NN","NN|JJ"],["RB","NNP","DT"],["NN","JJ","VB","NNP"],["NN","VBP","JJ","VB"],["IN","RB"],["RB","NN","RP","NNP","VBP","JJ"],["NNS","VBZ","NN"],["NNP","JJ","NNPS"],["VBG","NNP","NN"],["NNS","VBZ","CC","RB"],["VBN","VBN|JJ","VBD","JJ"],["NN","JJ","NNP"],["VBD","NN","NNS","VBN"],["NN","JJR"],["VB","NNP"],["VBG","NN","NNP"],["RB","JJ"],["NNS","VBP","VBZ"],["RB","NN","JJS","JJ"],["IN","RB","RP","NNP"],["NNP","NNPS","PRP"],["IN","RP","NNP"],["JJS","RB","RBS"],["NN","NN|VBG","VBG|NN","JJ","VBG"],["NN","NN|JJ","JJ","VB"],["PRP","JJ"],["NNP","VBZ","NN"],["VBG","NNP"],["VBP","NNP"],["VBN","NNP"],["JJ","NN","RB","UH"],["RB","IN|RB","RBR","VBP","IN","JJ","NN","RP","VB"],["VBP","JJ","NN","VB"],["NN","UH"],["JJR","JJ","NN"],["NN","VB","NNS"],["NN","NNP","LS"],["NNP","NN","NNS","NNPS"],["JJ","VBP","VB"],["PRP","NNP","NN"],["NNP",","],["RB","NNP","JJ","NN","UH"],["NNP","FW","JJ"],["IN","RB","RP"],["DT"],["VB","FW","NN"],["RB","JJR"],["JJ","VBD"],["VBD","NN"],["PRP","NN"],["JJ","JJ|NN","NN"],["JJ","VB","NNP"],["NN","NNP","NNS"],["JJ","NN","VB","VBP"],["VBP","NN","VB"],["RB","RB|CC","CC"],["NNP","NN","VBG"],["VBP","JJ"],["VB","NN","NNP"],["JJ","NN","VBG"],["NNP","RP","NNPS"],["VBG","JJ","NN","VBG|NN"],["VBP","JJ","NN","VB","VBN"],["NN","LS|NN"],["NNS","NNS|NPS","NNPS","NNP"],["VBG","NN","JJ"],["NN","NNP","VBG"],["NN","NNP","VB"],["IN","JJ","NN","VB","VBP"],["VBN","VBD","JJ","NN"],["NNP","NNPS","JJ","NN"],["IN","SYM"],["JJ","VBP","RB","VB"],["NN","RB","VB"],["VBZ","JJ","NNS"],["RB","JJ","NN"],["JJ","RB","VB","VBP","NN"],["JJ","VBP","NN","VB"],["FW","NNP"],["NN","CC"],["RB","NN","JJ"],["NNS","NNP","VBZ"],["NNP","JJ","NN","JJR"],["JJR","RBR|NN","JJ","JJR|RBR","NN","RB","RP","RBR|JJR","RBR"],["RBR","JJR","RB"],["SYM","NN"],["NN","VB","VBP","VBZ"],["NNPS","NN","NNS"],["JJ","NNP","NN","UH"],["VBN","VBD","VBN|JJ"],["NN","JJ","VB","VBD","VBN","VBP"],["WRB"],["NNP","JJ","RB"],["NNP","NNPS","JJ","NN","RB","NNS"],["NNS","FW"],["VBG","JJ|VBG","VBG|JJ","JJ","NN"],["NN","JJ","RB|JJ","VB"],["JJR","RB","RBR"],["NN","PRP"],["JJ","RB","NNP"],["JJ","VBP","RB"],["NNP","NNS","JJ"],["VBP","VBN","VB"],["NNP","RB"],["WP$"],["PRP","VB"],["NN","VBG|NN","VBG"],["JJ|NP"],["NN","VBD","VBN"],["VBN","JJ","NN","VB","VBD","VBP"],["NNP","VBP","NNPS","NNS"],["VB","RB","UH","NNP"],["JJS","RBS","JJSS","NN","RB"],["NN","FW","VB"],["IN","NNP","RB"],["VBP","VB","NNP"],["NN","JJS"],["VB","VBP","NNP"],["VBN","VBN|JJ","VBD"],["NNP","VBG","NN"],["JJ","VBN","VB"],["NNS","NN|NNS","NNS|NN","NN"],["IN","RP"],["IN","NN"],["NN","NNP","JJ"],["VBG","NN","JJ","VBG|NN"],["RB","VB","NNP","VBP","JJ"],["VBN","JJ","VBN|JJ"],["UH","VBP"],["VBP","FW","RB"],["IN","NNP","JJ","RB"],["IN","VBD","RB","RP"],["VBZ","NN","NNS"],["JJR","JJ"],["VB","UH","VBP"],["JJ","NN","RB","NNS"],["JJ","NN","VBN"],["JJ","IN","RB"],["JJ","VB","NNP","VBP"],["UH","RB"],["VBN","VB"],["VBG","JJ","NN|VBG"],["JJ","VBN","NN"],["VBD","VBN","VB"],["NN","VBP","NN|JJ","JJ","VB"],["VB","JJ","VBP"],["NN","NN|NNS"],["RB","RP"],["NNP|JJ"],["NNP","PRP","FW","JJ","NN"],["VB","NNP","VBD"],["VB","VBP","NN","NNP"],["NN","VBN","JJ","VB"],["RB","PDT","JJ"],["NN","VBG","NN|VBG","JJ"],["VB","RB","VBP","JJ"],["VBZ","VB"],["IN","FW","RB"],["FW","VBD","CC","NNP"],["NNS","RB"],["VB","NNP","NN"],["JJ","VBN","VBP"],["VB","NN","VBP|VBD","VBD","VBN","VBP","VBD|VBP"],["NNS","JJ","VBZ"],["JJ","JJ|VBG"],["NNS","NN","NNP"],["NNPS","VBP"],["PRP","PRP$"],["DT","NNP","JJ","NN","VB"],["JJS","NNP","RBS","RB"],["JJ","NN","VBD","VB","VBP"],["VB","VBD","VBN","VBP","NN"],["NNP","VBD","NN"],["VB","JJ","NN","RP","VBP"],["NNP","NN","VBP"],["JJ","PRP$"],["NN","RB","VB","VBD","VBN","VBP"],["DT","NN","RB","CC"],["JJS","RBS"],["RB","RBR"],["NNP","FW","NN","RB"],["NNP","SYM"],["VBG","JJ","NN","RB"],["VBD","VB"],["VBN","VBD","VBP"],["IN","RB","VB","JJ"],["VBZ","RB","NNS","VBP"],["IN","FW","NN","RB","RP","IN|RP","NNP","RP|IN","RBR","VBD"],["FW","JJ","NN"],["VBN","JJ","VBD","VBP"],["VB","VBP","JJ"],["NN","VB","VBD"],["WRB","NNP"],["NNP","NN","UH"],["JJ","NNPS","NNP"],["IN","VB"],["RBR","RB"],["VB","VBN","VBP","VBN|TO","VBP|TO"],["RB","IN"],["NNP","NN","NNS"],["NNS",","],["NNP","LS","NN"],["PRP$"],["UH","VB"],["WP","NNP","PDT","WDT"],["NNS","NNPS","NN","NNP"],["IN","FW","RP","NNP"],["WP","WDT"],["RB","FW","VB"],["VB","NN","RB"],["JJ","VB","NN"],["NNS","VBN"],["NN","JJ","RB","VB","VBP"],["NNS","NN|POS"],["VB","VBP","VB|NN","JJ","NN"],["CC","IN","JJ","RB"],["PRP$","UH","PRP","JJ"],["NN","VBP","JJ","RB","VB"],["JJ","NNP","VBN"],["VBD","VBN","VBP","VB"],["NN","RB","VB","VBP","JJ"],["NNP","JJ","NN","VBG"],["VBG","NN","NN|VBG"],["VB","IN","JJ","JJ|IN"],["JJ","VBG","RB"],["JJ","NN","NNP","VBN"],["NN","VBD","VBN","VB"],["NN","LS","NNP"],["RB","RP","JJ"],["NNP","NN","RB"],["NNP","NN","VBG","VBG|NN"],["JJ","VBN","LS|JJ"],["VBD","NN","VB","VBN","VBP"],["IN","NNP","RBR","JJ","RB","RP"],["JJ","NN","UH"],["EX","LS|EX"],["IN","JJ","NN"],["NN|JJ"],["NNP","JJ","LS","RB"],["JJR","RBR","VBP","JJ","RB","VB"],["VBG","VBG|NN"],["NNP","NNS","NN"],["VBG","NNP","JJ"],["NNP","VBP","VB"],["JJ","NNP","NNPS"],["WDT"],["NN","JJ","NN|JJ"],["NN","VBP","JJ"],["JJ","VBG","NN"],["SYM"],["VBD","JJ","VB","VBN"],["NNP","NN","FW"],["JJ","VBN","VBP","VB"],["JJR","RBR","JJ"],["JJ","RB","VB","UH"],["RBR","JJR","NNP"],["JJR","RBR","RB"],["JJ","NNP","RB"],["VBN","JJ","NN","VB","VBD"],["JJ","UH"],["WDT","DT"],["VBG|NN","VBG"],["IN","JJ","NN","RB"],["NN","VB","JJ"],["JJ","NN","VBP"],["VBN","JJ","VB","VBD"],["RB","CC","FW","IN"],["FW","IN","NN","PRP"],["JJ","VBP","NN","RB","RP","VB"],["VBN","VBD","JJ","VBN|JJ"],["RB","FW"],["DT","NNP","PDT","IN","RB","WP","WDT"],["NNPS","NNP","NNS","VBP"],["IN","RB","RP","RB|RP"],["FW","IN"],["RB","NNP","IN"],["PRP$","PRP","PRP$R"],["NN","JJ","RB","VB"],["VBD","JJ","NN","VB"],["VBG","JJ|VBG","JJ"],["JJ","PRP"],["NN","RP","VB","VBP"],["RP"],["FW","LS","NN"],["NN","VBP","RB","VB"],["MD","NNP"],["NNP","JJ","NN","NNP|JJ"],["IN","JJ","IN|RB","RB","RP","VB","NNP",",","RBR"],["FW","UH","PRP"],["JJ","JJ|RB"],["VBG","VBG|JJ","JJ"],["VBD","NNP","VBN"],["NNPS","NNP","VBZ"],["NNP","JJ","NNS"],["VB","JJ","NN","VBP|VB","VBD","VBN","VBP"],["VB","NNP","MD","NN","VBP"],["VBG","VBG|NN","NN"],["UH","IN"],["NN","RB","NNP"],["IN","CC","FW"],["CC","FW","IN","JJ","NN"],["NNP","RB","JJ"],["NNS","FW","NN"],["NN","VB","VBN","VBP"],["VBN","VBD","VB"],["NN|SYM"],["VBN","JJ","NN","VBD"],["NNP","VBD","VBN","JJ","NN","RB"],["RB","NNP","JJ"],["NNP","VBZ"],["JJS","RBS","RB"],["MD","NN","VB"],["IN","NN","RB"],["JJR","NN"],["NNS","NNP","NNPS","RB"],["JJ","NN","VB","VBN"],["JJ","RB","VB","RB|RP"],["PRP","SYM","NN"],["VB","JJ","NN"],["VBD","VBN","NNP","VB"],["VBN","VBD","VBP","VB"],["VBN","VBN|JJ","JJ"],["NNP","NNS|VBZ","VBZ"],["VBD","JJ","VBN","VB"],["NNP|NN"],["VB","VBP","JJ","NN","RB"],["("],["RB","VBP","JJ","NN","VB","UH"],["IN","NNP","NNS"],["NNPS","NNP","JJ"],["JJ","RB|JJ"],["RB","RB|JJ","JJ"],["RBS"],["VBP","FW","NN","NNP","VB","UH"],["NN","JJ","MD"],["VBG","NN","VBG|NN"],["VB","VBN","VBP"],["RB","VBN"],["TO"],["VBG","VB"],["!"],["VBN","JJ","RB","VBD"],["WRB","RB"],["FW","IN","JJ","NNP"],["DT","PDT"],["VBG","JJ|VBG"],["NN","VBP","VB","UH"],["NN|NN"],["NN","VB","NNP","VBP"],["VB","JJ","NN","VBP"],["FW","NNS"],["CC","IN","JJ","NN","RB"],["NN","JJR","RBR"],["NN","VB","UH","VBP"],["VB","NN","NNP","VBP"],["NNPS","VBZ","NNP","NNS"],["VBD","VBP","JJ","NN"],["NNP","NNS","NNPS","JJ","NN","RB"],["DT","RB|DT","DT|RB","RB","PDT"],["VBP","VB","IN"],["RBR","JJ","NN","JJR","JJS","RBR|JJR","NNP"],["NN","VB","VBD","VBP"],["PDT","NNP"],["VB","FW","VBP"],["NNP","NNPS","JJ","NN","RB"],["FW","NN","RP"],["NNS","LS|NNS"],["NN","JJ","UH"],["IN","CC"],["VBD","JJ","VB","VBN","VBP"],["VB","VB|NN","NN","RB","VBP"],["DT","NNP","NNS","PRP","FW","JJ","LS","NN","NNPS","VB"],["JJ","NN|NNS"],["NN","JJ|RB","VB"],["NN","NNP","VBP","VB"],["VBD","VBN","JJ","VBN|JJ"],["NNS","NNPS","NN"],["DT","RB"],["JJ","PDT","DT"],["NNP","NN","UH","VB"],["NN","JJ","VBP","VB","NN|VB"],["VB","NNP","VBP","NN"],["NN","RB","VB","VBP"],["NNS","JJ","NNPS"],["JJ","VB","VBP"],["NNP","IN"],["VBG","NN",","],["NNS|NN"],["JJ","NN","RB","VB"],["RB","IN","JJ"],["NN","VBG|NN","JJ","NN|VBG","VBG"],["JJ","NN","NNS"],["WP|MD|NP"],["DT","RB","PDT"],["CC","NNP"],["NNP","NNS","NNPS","JJ"],["VBD","NNP"],["VBN","JJ","VB","VBD","VBN|JJ"],["IN","NNP","NN","RB"],["VBN","VBD","JJ","NN","VB"],["NN","VBD"],["MD","NNP","NN","VB"],["NN","VBP","IN","VB"],["VBG","VBG|JJ","JJ","NN"],["JJ","VBD","VBG","VBN"],["JJ","NNS","NN","RB"],["JJ","JJS","NN"],["JJ","NN","RB","VBN"],["JJ","NN","RB","VB","NNP"],["NN","VBD","VBP","JJ","VB"],["NNP","JJ","UH"],["JJ","NN|JJ","NN"],["IN","VB","NNP"],["VBN","JJ","NNP"],["EX","NN","RB","UH"],["NN","JJ","JJR"],["JJ","VBN","NNS"],["JJ","JJ|RB","RB"],["PRP$","PRP|VBP"],["NNP","VBD","VBP","VB"],["NNS","NN","NNPS","NNP"],["FW","NN","RB"],["DT","VB",",","VBN","NNP","FW","JJ","LS","NN"],["VBN","JJ","VBN|JJ","VB","VBD","VBD|VBN"],["VBD","VBN","JJ","NN"],["JJ","RB|JJ","RB","VB","VBP"],["IN","JJ","NN","RB","VB"],["JJ|CC"],["UH","NN","RB","NNP"],["VBP","NNP","VB"],["IN","RB","NNP","UH"],["NNP",".","LS","NN"],["JJ","IN","NN","RB","NNS"],["RB","JJ","VB","RB|JJ"],["DT","RB","NNP","PDT","NNS|DT"],[","],["NNPS","VBZ","NNS"],["VBZ","NNS","VBP"],["NNP","NNPS","NN","VB"],["WP","NN"],["JJ","FW"],["VB","NNPS","VBP"],["VB","VBP","FW","NN"],["VB","FW","NN","VBP"],["NNS","NNP","NN"],["JJ","VBP","NN","RB","VB"],["NN","JJ","VBG","VBG|NN"],["NN","JJ","NNS"],["VBG","NN","JJ|VBG"],["NN","JJ|NN","JJ"],["NN","VB","VBP","JJ"],["JJ","RB","JJR"],["NNS","NNPS|VBZ"],["NNPS","NN"],["VBP","VB","VBZ"],["VB","VBP","NNP","NN"],["VB","JJ","NN","VBD","VBN","VBP"],["NN","VBN","JJ"],["NN|JJ","JJ"],["NNP","POS","NN"],["VBD","NN","VBN"],["IN","RP","JJ","RP|RB","RB"],["RB","RBR","WRB"],["JJ","NNPS"],["VBD","VBN","VBP","NN","VB"],["JJS","NNP","RBS|JJS","RBS"],["RB",",","JJR","RBR"],["NN","NNP","RB"],["NN|NNS"],["NN","VBG","JJ","VBG|NN"],["VB","NNP","IN","RB"],["NNP","JJ","VBP"],["VBN","JJ","VBN|JJ","VBD"],["RB","."],["RB","JJR","RBR","JJ"],["IN","JJ"],["NNS","VBZ","RB"],["VB","NN","VBP","JJ"],["PRP$","PRP"],["JJ","NN","NNPS","NNP","NNS","VBP"],["NNP","NNS","NNPS","VBZ"],["VBN","JJ","VB"],["VB","VBP","UH"],["PRP$","NN","RB"],["IN","NNS"],["NN","VBP","JJ","VB","JJR"],["MD","VBP","NN","RB","VB"],["VB","VBN","VBP","JJ","NN"],["RB","UH","NNP"],["RB","CC"],["NN","VBN|JJ","JJ","VB","VBD","VBN","VBP"],["NN","RB","VB","NNS"],["NN","NNP","JJ","LS"],["VBG","VBG|JJ","VBG|NN","JJ","NN"],["NNP","VBP","JJ","VB"],["NN","NNP","PDT","DT","RB"],["NNP","NNPS","NNS","NN"],["NNS","VBN","VBZ"],["DT","NN","RB","UH","NNP"],["DT","RB","UH"],["JJ","VBN","IN","NN","RB"],["VBD","VBN|VBD","JJ","VBN"],["UH","VBN","JJ"],["JJS","NNP"],["VBD","VB","VBN"],["NN","FW","NNP"],["NNP","JJ","VBD"],["RB","RB|RP","RP"],["NNS","JJ","NN","NNS|NN"],["VB","JJ","VBP","NN"],["VBD","VBP","JJ","NN","VB"],["IN","JJ","NNP"],["NN","VBP","JJR","VB"],["NNP","VBZ","NNPS"],["JJ","NN","JJR"],["VBD","VBN","VBD|VBN"],["RB","JJ","NN","UH"],["JJ","NNS","NN","VB"],["IN","NNP","RB","RP"],["JJR","RBR|JJR","JJ","JJR|RBR","NNP","RBR"],["VB","VBP","NN","RP"],["NNS","JJ","NN","RB"],["NNPS","VBP","NNP|NPS","NNP","NNS"],["LS"],["JJ","NNS","RB"],["NNP","VBG","JJ"],["NNP|VB"],["TO","NNP","NN"],["NN","VB","VBG","VBP"],["VBN","VBD|VBN","VBD","JJ"],["CC","DT","NNP"],["IN","WRB"],["NNP","CC","IN"],["VB","IN","VBP"],["RB","WRB"],["VBG","VBG|NN|JJ","JJ","NN"],["NN","IN","JJ","VBP","RB","VB"],["JJS","RBS","IN"],["JJ","VBN","VBN|JJ"],["NNP","."],["NN","JJ","RB","VB","VBP","VBZ"],["JJ","DT","NN","RB","VB","NNS","PDT"],["NNP","NNS","NNPS","FW"],["NNS","NNP","NNPS","NN"],["NNP","FW","VBD","VBN"],["VBG","VBG|JJ","NN"],["RB","NNP","FW","JJ","NN"],["NNPS","NNP","NNS","FW","VBZ"],["JJ","JJ|VBG","VBG"],["VB","VBD","VBN","VBP","JJ","NN"],["NNP","NNS","JJ","NN"],["NN","NNP","UH"],["FW","WDT","NN"],["RB","NNS","JJ"],["VBN","JJ","VBD","VBD|VBN"],["RB","WP"],["VBD","VBN","JJ","VB"],["NN|IN"],["JJR","JJ","RBR"],["VBN","VBD","VBP","VBN|JJ","JJ"],["UH","FW","JJ","NNP"],["WRB","IN"],["VB","NN","RB","VBP"],["NNP","FW","JJ","NN"],["JJ","PDT","RB","UH"],["RB","JJ","RP","JJR","RBR"],["NNP","JJ","VB"],["SYM","LS","NN"],["JJ","RB","NNP","PDT","DT"],["EX","RB","UH"],["NN","NN|JJ","VB"],["NN","IN"],["VBN","RBR","VBD","JJ"],["IN","JJ","NN","RB","RP"],["JJ","RB|JJ","NN|JJ","NN","RB"],["JJR","IN","RBR"],["NNPS","JJ"],["NN","JJ","VBP"],["NNP","JJ","VBN|JJ","VBN"],["VBN","JJ","NN","VB"],["IN","NNP","CC","JJ","RB","RP"],["VBG","UH"],["MD|VB"],["JJ","NNP","RB","UH"],["VB","VBD","VBN"],["NN","NNP","VB","VBP"],["NN","VB","UH","JJ"],["JJ","CC"],["WRB","NNP","UH"],["NN","NN|JJ"],["UH","NNP","NN"],["VB","NN","UH","NNP"],["JJ","VBP","NN"],["UH","NNS"],["NN","JJ","LS","NNP"],["VBG","VBG|NN","JJ"],["VBN","NNP","JJ"],["UH","RB","NNP"],["IN","JJ","RB"],["VBN","JJ","VBD","JJ|VBN"],["DT","NN","VB"],["RB","EX","JJR","PRP$"],["NNP","JJ","LS","NN"],["VB","VBN","NNP"],["VBP","FW","NN","VB","NNS","VBZ"],["JJ","NN","RB","VB","FW","IN"],["NN|DT"],["JJ","PRP$","PRP"],["NNP","PRP","JJ"],["DT","VBD","VBP","NN|DT","IN","JJ","NN","NNP","PDT"],["NNP","NN|JJ","JJ","NN|JJ|RB","NN","RB","RB|NN|JJ"],["VBP","NNP","VBZ"],["VBD","VBN","JJ","RB","VB"],["JJR","JJ","NN","JJ|JJR"],["CC","DT","IN","RB"],["LS|NN"],["IN","JJ","RB","NNP"],[";"],["IN","CC","FW","JJ","NN"],["NN","VBP","FW","IN","RB","VB"],["VBG","IN"],["RB","FW","NN"],["NN","NNS","JJ"],["NN","FW","NNP","NNS"],["NN","DT","JJ","RB","UH","NNP","NNS","NN|POS",",","VBG","VBP"],["VB","VBD","VBN","JJ","NN"],["VBD","JJ","NN","VBN"],["JJ","LS","RB","NNP"],["NNP","NN","JJR"],["NNP","CC"],["NN","JJ","VB","VBP","VBZ"],["NN","VBG","VBG|JJ"],["VBN","VBD","VBN|JJ","JJ"],["NNP","NN","JJ"],["NNPS","NNP","NN"],["VBN","JJ","VBD","VBN|JJ"],["NNS","NNP","NNPS","VBZ"],["NNP","VBD","VBN"],["NNP|CC|NP"],["NNP","JJR","FW","NN"],["NNP","DT","FW"],["VB","VBD","VBP","NN"],["VBN","NN","VB"],["NN","VBG","NN|JJ"],["NN","LS"],["RB","IN","JJ","NN","RP","VB","VBP"],["VB","VBN","VBP","NNP"],["FW","DT"],["FW","NNP","DT","NN"],["DT","NN"],["MD","NN"],["VBN","NNP","VB"],["NNP","NN","VB","UH"],["NN","VBN"],["VBN","VBP"],["NNP","UH","NN"],["DT","JJ","NN","RB","UH"],["TO","VBG"],["NNP","JJ","NN","NNS"],["NNP","JJ|NP","JJ","NN"],["JJ","DT","NNP","PDT"],["CC","VBP","JJ","RB","NNP"],["FW","IN","JJ","NN"],["VB","JJ","NNP"],["CC","NNP","IN"],["JJS","RBS","JJ"],["NNP","NNS","VBZ"],["VBN","JJ","NNS","VBD"],["VB","VBN","VBP","NN"],["RB","JJ","NN","RP"],["VBG","JJ","NNP"],["CC","NNP","SYM"],["NNS","NNPS","NNP","NN"],["VB","JJ","NN","RB","VBP"],["VBD","NN","VBP"],["RB","NNS"],["NNP","FW","VBP","VB"],["NNS","VBD"],["JJ","VBN","RB"],["FW","IN","NN"],["NN","JJ","VB","SYM"],["NN","VBP","VB|NN","RB","VB"],["VB","VBP","MD","NN"],["TO","RB"],["NNP","JJ","NN","VB","VBZ"],["NN","RB","JJ"],["NN","VBG|NN","JJ","VBG"],["DT","CC","PDT"],["NNP","NNS","NN","NNPS"],["NN","IN","JJ","RB","VB","IN|RB","VBP"],["VBG","NN|VBG"],["JJ|JJR"],["CC","IN","NN"],["VBN",".","JJ"],["VBN","VBD","VBD|VBN","JJ"],["NN","FW","IN","JJ","VB","VBD","VBP"],["VBD",":"],["RB","JJ","NN","JJS"],["NN","VBD","VBN","JJ","VB"],["JJ","NNP","NNS"],["NNP","JJS","JJ","NN"],["NNP","NNS","NNPS","NNS|LS"],["VBZ","NN"],["VBN","VBG"],["JJ","NN","RB","VB","UH"],["FW","NNS","NN"],["NNP","NNPS","NN","NNS"],["WP","NNP","PRP"],["NN|WRB"],["NN","RP"],["RB","VB","UH","VBP"],["JJ","RB","VB","VBP"],["VBN","NN","VBD"],["NN","VBZ"],["JJ","NN","RB","NNP"],["NN","JJ","VB","VBD","VBN"],["NN","CC","VBP","VB"],["JJ|IN"],["DT","CC","IN","RB","RBR"],["JJ",",","JJ|RB","RB","VB","VBP"],["NNS","VBZ","JJ"],["NN","UH","NNP"],["VBZ","VBP","NNS"],["JJ","NNPS","NNP","NNS","NN"],["DT","CC","JJ","NNP",","],["IN","JJ","RB","RP","RBR","IN|RB"],["VBG","NN","VB"],["JJ","NN","RB","RP"],["RB","RBR","RP"],["JJ","NN","VBP","RB","VB"],["IN","RB","VBD"],["NN",",","NNP"],["VBN","VBD","JJ","VB"],["VBD","VBN","NNP"],["NNP","VBP","NN","VB"],["RBS|JJ"],["WP","WDT","WP|IN"],["NN|VBG"],["JJ","NN","RB","RB|JJ"],["JJ","IN","NN","RB","NNP"],["NNS","."],["PRP","FW"],["PRP","VBP","RP"],["VBG","JJ","NN","NN|VBG"],["VBG","NN","RP"],["VBN","VBD","VBG"],["NN","FW","JJ","RB"],["JJ","RB","NNP","IN"],["VBN","VBD","VBP","VBD|VBN","JJ","NN","VB"],["IN","CC","NNP"],["IN","NNP","RB","IN|JJ"],["WDT","WP"],["JJ","VBP","RB|JJ","NN","RB","VB"],["JJ","NN","RP"],["NN","VBD","VBP","VB"],["SYM",",",":"],["NNP","IN","NN"],["VB","NN","VBD","VBN","VBP","JJ"],["NNP","NNS","NNP|NPS","NNPS","NN"],["RB","JJ","JJR","NNP","RBR"],["NN","RB","VB","IN","JJ"],["NNP","NNPS","JJ","LS","RB"],["JJR","RBR","NN"],["NN","VB|IN"],["RB","PDT"],["JJS","JJ","RB"],["NN","VB","VBN"],["WRB","NNP","RB"],["NN","NN|VBG","VBG|NN","VBG"],["#"],["NN","PRP$","JJ","VB","PRP","VBP"],["IN","NN","RB","RP"],["VBG","RB"],["VBN","VBD","JJ","VB","VBN|JJ"],["VB","FW","IN","VBP"],["NN","JJ","VB","NN|JJ"],["NNPS","NNS","VBZ"],["JJR","JJS","CC","RB","RBR","RBS","RBR|JJR"],["JJ","RB","VBG"],["VBD","VBP","JJ","VB"],["FW","VB"],["NNP","NNPS","JJ"],["VBD","JJ","VBN","JJ|VBN"],["NNP","JJ","NN","NNPS"],["JJ","JJR","RB"],["NN","VBP","VB","NN|VB"],["IN","DT","NN","RB","RP","UH","WP","VBP","WDT"],["IN","RB","IN|RB","RBR"],["JJ","NNP","VB"],["NNS","RP"],["WDT","RB","WP"],["NNPS","NN","NNP","NNS"],["DT","NN","RB"],["UH","PRP"],["DT","NNP","CC"],["VBD","JJ","NN","VB","VBN","VBP"],["NNP","JJ","PRP$"],["NN","JJ","JJ|NN"],["NN","JJ","VB","UH"],["NN","VBG","VB"],["NN","VBP","MD","VB"],["VBN","NN","VB","VBD","VBP","JJ"],["NN","FW","RB"],["NN","LS","NNP","NNS"],["JJR","RBR","JJ","RB"],["PRP","NN","NNP"],["VB","JJ","VBD","VBN","VBP"],["NN","NN|VBG","VBG"],["NN","FW","VB","NNP","VBP"],["JJR","JJR|RBR","RBR|JJR","JJ","RB","VB","RBR"],["VBG","JJ","NN","VBN"],["JJ","JJ|VBN","VBD","VBN"],["NNP","FW","LS","NN"],["MD","NNP","JJ"],["VBN","JJ","NN","RB","VBD"],["RB","JJ","RP"],["NN","FW","IN"],["PRP","JJ","PRP$"],["VBG","FW"],["VBN","VBD","VBN|VBD","JJ"],["RB","NNP","NNS","JJ","UH"],["PRP","DT"],["NN","FW","IN","JJ"],["VBG","NN|VBG","JJ","NN","RB"],["UH","NNP","RB"],["JJ","RB|RBR","JJR","RBR","RB","VB"],["UH","JJ"],["VBG","VBG|NN|JJ"],["VB","UH","NNP"],["NN","VBD","VBN","JJ","RB","VB"],["NN","VBP","JJ","RB"],["MD","JJ","NN"],["JJ","NNP","NNS","NN"],["NNS","VBZ","NNPS","NNP"],["NN","VBD","VBN","VBP","JJ","VB"],["VBD","VBN","JJ","VBN|VBD"],["NNP","JJ","RB","VB"],["VBD","JJ","VBN","VBP"],["VB","VBD","VBN","VBP","VBZ","JJ"],["IN","RBR","JJ","RB","NNP"],["RBR","JJR","JJ","NN","RB"],["RB","IN","RP"],["VBZ","NNS","VBP","VB"],["JJ","VBN|JJ","VBD","VBN","RB","VB"],["RBS","JJ","NN","RB","RBS|JJS","JJS"],["PRP","VBP"],["RB","VB"],["JJR","NNP","JJ"],["JJR","JJ","RB","RBR"],["VBD","VBN|VBD","VBN","JJ","NN","VB","VBN|JJ"]];
diff --git a/exampleData/ruleSets/language-processing/jspos/libpeerconnection.log b/exampleData/ruleSets/language-processing/jspos/libpeerconnection.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/libpeerconnection.log
diff --git a/exampleData/ruleSets/language-processing/jspos/license.txt b/exampleData/ruleSets/language-processing/jspos/license.txt
new file mode 100644
index 0000000..dac13dd
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/license.txt
@@ -0,0 +1,56 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
+
+0. Additional Definitions.
+As used herein, Òthis LicenseÓ refers to version 3 of the GNU Lesser General Public License, and the ÒGNU GPLÓ refers to version 3 of the GNU General Public License.
+
+ÒThe LibraryÓ refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
+
+An ÒApplicationÓ is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
+
+A ÒCombined WorkÓ is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the ÒLinked VersionÓ.
+
+The ÒMinimal Corresponding SourceÓ for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
+
+The ÒCorresponding Application CodeÓ for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
+
+1. Exception to Section 3 of the GNU GPL.
+You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
+
+2. Conveying Modified Versions.
+If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
+
+a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
+b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
+3. Object Code Incorporating Material from Library Header Files.
+The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
+
+a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
+b) Accompany the object code with a copy of the GNU GPL and this license document.
+4. Combined Works.
+You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
+
+a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
+b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
+c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
+d) Do one of the following:
+0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
+1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
+e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
+5. Combined Libraries.
+You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
+
+a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
+b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+6. Revised Versions of the GNU Lesser General Public License.
+The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License Òor any later versionÓ applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/jspos/sample.html b/exampleData/ruleSets/language-processing/jspos/sample.html
new file mode 100644
index 0000000..7f72089
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/sample.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Untitled Document</title>
+</head>
+
+<body>
+
+<script type="text/javascript" src="lexer.js"></script>
+<script type="text/javascript" src="lexicon.js_"></script>
+<script type="text/javascript" src="POSTagger.js"></script>
+
+<div>
+The below text is taken from <a href="http://www.archive.org/stream/cm56b10/cm56b10.txt">Memoirs of the Court of St. Cloud</a>
+</div>
+
+<h3>Sample Text</h3>
+
+<div id="input_text">
+Bonaparte has been as profuse in his disposal of the Imperial
+diadem of Germany, as in his promises of the papal tiara of Rome. The
+Houses of Austria and Brandenburgh, the Electors of Bavaria and Baden,
+have by turns been cajoled into a belief of his exclusive support towards
+obtaining it at the first vacancy. Those, however, who have paid
+attention to his machinations, and studied his actions; who remember his
+pedantic affectation of being considered a modern, or rather a second
+Charlemagne; and who have traced his steps through the labyrinth of folly
+and wickedness, of meanness and greatness, of art, corruption, and
+policy, which have seated him on the present throne, can entertain little
+doubt but that he is seriously bent on seizing and adding the sceptre of
+Germany to the crowns of France and Italy.
+
+During his stay last autumn at Mentz, all those German Electors who had
+spirit and dignity enough to refuse to attend on him there in person were
+obliged to send Extraordinary Ambassadors to wait on him, and to
+compliment him on their part. Though hardly one corner of the veil that
+covered the intrigues going forward there is yet lifted up, enough is
+already seen to warn Europe and alarm the world. The secret treaties he
+concluded there with most of the petty Princes of Germany, against the
+Chief of the German Empire which not only entirely detached them from
+their country and its legitimate Sovereign, but made their individual
+interests hostile and totally opposite to that of the German
+Commonwealth, transforming them also from independent Princes into
+vassals of France, both directly increased has already gigantic power,
+and indirectly encouraged him to extend it beyond what his most sanguine
+expectation had induced him to hope. I do not make this assertion from a
+mere supposition in consequence of ulterior occurrences. At a supper
+with Madame Talleyrand last March, I heard her husband, in a gay,
+unguarded, or perhaps premeditated moment, say, when mentioning his
+proposed journey to Italy:
+
+"I prepared myself to pass the Alps last October at Mentz. The first
+ground-stone of the throne of Italy was, strange as it may seem, laid on
+the banks of the Rhine: with such an extensive foundation, it must be
+difficult to shake, and impossible to overturn it."
+
+We were, in the whole, twenty-five persons at table when he spoke thus,
+many of whom, he well knew, were intimately acquainted both with the
+Austrian and Prussian Ambassadors, who by the bye, both on the next day
+sent couriers to their respective Courts.
+
+The French Revolution is neither seen in Germany in that dangerous light
+which might naturally be expected from the sufferings in which it has
+involved both Princes and subjects, nor are its future effects dreaded
+from its past enormities. The cause of this impolitic and anti-patriotic
+apathy is to be looked for in the palaces of Sovereigns, and not in the
+dwellings of their people. There exists hardly a single German Prince
+whose Ministers, courtiers and counsellors are not numbered, and have
+long been notorious among the anti-social conspirators, the Illuminati:
+most of them are knaves of abilities, who have usurped the easy direction
+of ignorance, or forced themselves as guides on weakness or folly, which
+bow to their charlatanism as if it was sublimity, and hail their
+sophistry and imposture as inspiration.
+
+Among Princes thus encompassed, the Elector of Bavaria must be allowed
+the first place. A younger brother of a younger branch, and a colonel in
+the service of Louis XVI., he neither acquired by education, nor
+inherited from nature, any talent to reign, nor possessed any one quality
+that fitted him for a higher situation than the head of a regiment or a
+lady's drawing-room. He made himself justly suspected of a moral
+corruption, as well as of a natural incapacity, when he announced his
+approbation of the Revolution against his benefactor, the late King of
+France, who, besides a regiment, had also given him a yearly pension of
+one hundred thousand livres. Immediately after his unexpected accession
+to the Electorate of Bavaria, he concluded a subsidiary treaty with your
+country, and his troops were ordered to combat rebellion, under the
+standard of Austrian loyalty. For some months it was believed that the
+Elector wished by his conduct to obliterate the memory of the errors,
+vices, and principles of the Duc de Deux-Ponts (his former title). But
+placing all his confidence in a political adventurer and revolutionary
+fanatic, Montgelas, without either consistency or firmness, without being
+either bent upon information or anxious about popularity, he threw the
+whole burden of State on the shoulders of this dangerous man, who soon
+showed the world that his master, by his first treaties, intended only to
+pocket your money without serving your cause or interest.
+
+This Montgelas is, on account of his cunning and long standing among
+them, worshipped by the gang of German Illuminati as an idol rather than
+revered as an apostle. He is their Baal, before whom they hope to oblige
+all nations upon earth to prostrate themselves as soon as infidelity has
+entirely banished Christianity; for the Illuminati do not expect to reign
+till the last Christian is buried under the rubbish of the last altar of
+Christ. It is not the fault of Montgelas if such an event has not
+already occurred in the Electorate of Bavaria.
+
+Within six months after the Treaty of Lundville, Montgelas began in that
+country his political and religious innovations. The nobility and the
+clergy were equally attacked; the privileges of the former were invaded,
+and the property of the latter confiscated; and had not his zeal carried
+him too far, so as to alarm our new nobles, our new men of property, and
+new Christians, it is very probable that atheism would have already,
+without opposition, reared its head in the midst of Germany, and
+proclaimed there the rights of man, and the code of liberty and equality.
+
+The inhabitants of Bavaria are, as you know, all Roman Catholics, and the
+most superstitious and ignorant Catholics of Germany. The step is but
+short from superstition to infidelity; and ignorance has furnished in
+France more sectaries of atheism than perversity. The Illuminati,
+brothers and friends of Montgelas, have not been idle in that country.
+Their writings have perverted those who had no opportunity to hear their
+speeches, or to witness their example; and I am assured by Count von
+Beust, who travelled in Bavaria last year, that their progress among the
+lower classes is astonishing, considering the short period these
+emissaries have laboured. To any one looking on the map of the
+Continent, and acquainted with the spirit of our times, this impious
+focus of illumination must be ominous.
+
+Among the members of the foreign diplomatic corps, there exists not the
+least doubt but that this Montgelas, as well as Bonaparte's Minister at
+Munich, Otto, was acquainted with the treacherous part Mehde de la Touche
+played against your Minister, Drake; and that it was planned between him
+and Talleyrand as the surest means to break off all political connections
+between your country and Bavaria. Mr. Drake was personally liked by the
+Elector, and was not inattentive either to the plans and views of
+Montgelas or to the intrigues of Otto. They were, therefore, both doubly
+interested to remove such a troublesome witness.
+
+M. de Montgelas is now a grand officer of Bonaparte's Legion of Honour,
+and he is one of the few foreigners nominated the most worthy of such a
+distinction. In France he would have been an acquisition either to the
+factions of a Murat, of a Brissot, or of a Robespierre; and the Goddess
+of Reason, as well as the God of the Theophilanthropists, might have been
+sure of counting him among their adorers. At the clubs of the Jacobins
+or Cordeliers, in the fraternal societies, or in a revolutionary
+tribunal; in the Committee of Public Safety, or in the council chamber of
+the Directory, he would equally have made himself notorious and been
+equally in his place. A stoic sans-culotte under Du Clots, a stanch
+republican under Robespierre, he would now have been the most pliant and
+brilliant courtier of Bonaparte.
+</div>
+
+<h3>Tagged Sample Text</h3>
+<div id="tagged_text"></div>
+
+<script type="text/javascript">
+// Note the \ at the end of the first line
+var words = new Lexer().lex(document.getElementById("input_text").innerHTML);
+var taggedWords = new POSTagger().tag(words);
+var result = "";
+for (i in taggedWords) {
+ var taggedWord = taggedWords[i];
+ var word = taggedWord[0];
+ var tag = taggedWord[1];
+ // Note the use of document.writeln instead of print
+ result += (word + " /" + tag + "<br/>");
+}
+document.getElementById("tagged_text").innerHTML = result;
+</script>
+
+</body>
+</html> \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/jspos/test.js b/exampleData/ruleSets/language-processing/jspos/test.js
new file mode 100644
index 0000000..f6a9c95
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/jspos/test.js
@@ -0,0 +1,23 @@
+var testString = "They are the most wired vehicles on the road, with dashboard computers, sophisticated radios, navigation systems and cellphones. While such gadgets are widely seen as distractions to be avoided behind the wheel, there are hundreds of thousands of drivers Ñ police officers and paramedics Ñ who are required to use them, sometimes at high speeds, while weaving through traffic, sirens blaring. The drivers say the technology is a huge boon for their jobs, saving valuable seconds and providing instant access to essential information. But it also presents a clear risk Ñ even the potential to take a life while they are trying to save one. Philip Macaluso, a New York paramedic, recalled a moment recently when he was rushing to the hospital while keying information into his dashboard computer. At the last second, he looked up from the control panel and slammed on his brakes to avoid a woman who stepped into the street. There is a potential for disaster here, Mr. Macaluso said. Data does not exist about crashes caused by police officers or medics distracted by their devices. But there are tragic anecdotes. In April 2008, an emergency medical technician in West Nyack, N.Y., looked at his GPS screen, swerved and hit a parked flatbed truck. The crash sheared off the side of the ambulance and left his partner, who was in the passenger seat, paralyzed. In June 2007, a sheriff's deputy in St. Clair County, Ill., was driving 35 miles per hour when a dispatcher radioed with an assignment. He entered the address into the mapping system and then looked up, too late to avoid hitting a sedan stopped in traffic. Its driver was seriously injured. Ambulances and police cars are becoming increasingly wired. Some 75 percent of police cruisers have on-board computers, a figure that has doubled over the last decade, says David Krebs, an industry analyst with the VDC Research Group. He estimates about 30 percent of ambulances have such technology. The use of such technology by so-called first responders comes as regulators, legislators and safety advocates seek to limit the use of gadgets by most drivers. Police officers, medics and others who study the field say they are searching to find the right balance between technology's risks and benefits. The computers allow police, for example, to check license plate data, find information about a suspect and exchange messages with dispatchers. Ambulances receive directions to accident scenes and can use the computers to send information about the patient before they arrive at hospitals. The technology is enormously beneficial, said Jeffrey Lindsey, a retired fire chief in Florida who now is an executive at the Health and Safety Institute, which provides continuing education for emergency services workers. But he said first responders generally did not have enough training to deal with diversions that could be almost exponential compared with those faced by most drivers. The New York Fire Department, which coordinates the city's largest ambulance system, said drivers were not supposed to use on-board computers in traffic. That is the role of the driver's partner, and if the partner is in the back tending to a patient, the driver is supposed to use devices before speeding off. There's no need for our drivers to get distracted, because the system has evolved to keep safety paramount, said Jerry Gombo, assistant chief for emergency service operations at the Fire Department. Drivers do get into accidents, he said, but he couldn't remember a single one caused by distraction from using a computer. He also estimates the technology saves 20 to 30 seconds per call. There's no doubt we're having quicker response time, Mr. Gombo added. But in interviews, medics and E.M.T.'s in New York and elsewhere say that although they are aware of the rules, they do use their on-board computers while driving because they can't wait for certain information. States that ban drivers from texting or using hand-held phones tend to exempt first responders. And in many places where even they are forbidden to use cellphones behind the wheel, the edict is often ignored.";
+var shortTestString = "This is some sample text. This text can contain multiple sentences.";
+var testWords = ["They", "are", "the", "most", "wired", "vehicles", "on", "the", "road", ",", "with", "dashboard", "computers", ",", "sophisticated", "radios", ",", "navigation", "systems", "and", "cellphones", ".", "While", "such", "gadgets", "are", "widely", "seen", "as", "distractions", "to", "be", "avoided", "behind", "the", "wheel", ",", "there", "are", "hundreds", "of", "thousands", "of", "drivers", "police", "officers", "and", "paramedics", "who", "are", "required", "to", "use", "them", ",", "sometimes", "at", "high", "speeds", ",", "while", "weaving", "through", "traffic", ",", "sirens", "blaring", ".", "The", "drivers", "say", "the", "technology", "is", "a", "huge", "boon", "for", "their", "jobs", ",", "saving", "valuable", "seconds", "and", "providing", "instant", "access", "to", "essential", "information", ".", "But", "it", "also", "presents", "a", "clear", "risk", "even", "the", "potential", "to", "take", "a", "life", "while", "they", "are", "trying", "to", "save", "one", ".", "Philip", "Macaluso", ",", "a", "New", "York", "paramedic", ",", "recalled", "a", "moment", "recently", "when", "he", "was", "rushing", "to", "the", "hospital", "while", "keying", "information", "into", "his", "dashboard", "computer", ".", "At", "the", "last", "second", ",", "he", "looked", "up", "from", "the", "control", "panel", "and", "slammed", "on", "his", "brakes", "to", "avoid", "a", "woman", "who", "stepped", "into", "the", "street", ".", "There", "is", "a", "potential", "for", "disaster", "here", ",", "Mr", ".", "Macaluso", "said", ".", "Data", "does", "not", "exist", "about", "crashes", "caused", "by", "police", "officers", "or", "medics", "distracted", "by", "their", "devices", ".", "But", "there", "are", "tragic", "anecdotes", ".", "In", "April", "2008", ",", "an", "emergency", "medical", "technician", "in", "West", "Nyack", ",", "N.Y.", ",", "looked", "at", "his", "GPS", "screen", ",", "swerved", "and", "hit", "a", "parked", "flatbed", "truck", ".", "The", "crash", "sheared", "off", "the", "side", "of", "the", "ambulance", "and", "left", "his", "partner", ",", "who", "was", "in", "the", "passenger", "seat", ",", "paralyzed", ".", "In", "June", "2007", ",", "a", "sheriff", "s", "deputy", "in", "St", ".", "Clair", "County", ",", "Ill", ".", ",", "was", "driving", "35", "miles", "per", "hour", "when", "a", "dispatcher", "radioed", "with", "an", "assignment", ".", "He", "entered", "the", "address", "into", "the", "mapping", "system", "and", "then", "looked", "up", ",", "too", "late", "to", "avoid", "hitting", "a", "sedan", "stopped", "in", "traffic", ".", "Its", "driver", "was", "seriously", "injured", ".", "Ambulances", "and", "police", "cars", "are", "becoming", "increasingly", "wired", ".", "Some", "75", "percent", "of", "police", "cruisers", "have", "on-board", "computers", ",", "a", "figure", "that", "has", "doubled", "over", "the", "last", "decade", ",", "says", "David", "Krebs", ",", "an", "industry", "analyst", "with", "the", "VDC", "Research", "Group", ".", "He", "estimates", "about", "30", "percent", "of", "ambulances", "have", "such", "technology", ".", "The", "use", "of", "such", "technology", "by", "so-called", "first", "responders", "comes", "as", "regulators", ",", "legislators", "and", "safety", "advocates", "seek", "to", "limit", "the", "use", "of", "gadgets", "by", "most", "drivers", ".", "Police", "officers", ",", "medics", "and", "others", "who", "study", "the", "field", "say", "they", "are", "searching", "to", "find", "the", "right", "balance", "between", "technology", "s", "risks", "and", "benefits", ".", "The", "computers", "allow", "police", ",", "for", "example", ",", "to", "check", "license", "plate", "data", ",", "find", "information", "about", "a", "suspect", "and", "exchange", "messages", "with", "dispatchers", ".", "Ambulances", "receive", "directions", "to", "accident", "scenes", "and", "can", "use", "the", "computers", "to", "send", "information", "about", "the", "patient", "before", "they", "arrive", "at", "hospitals", ".", "The", "technology", "is", "enormously", "beneficial", ",", "said", "Jeffrey", "Lindsey", ",", "a", "retired", "fire", "chief", "in", "Florida", "who", "now", "is", "an", "executive", "at", "the", "Health", "and", "Safety", "Institute", ",", "which", "provides", "continuing", "education", "for", "emergency", "services", "workers", ".", "But", "he", "said", "first", "responders", "generally", "did", "not", "have", "enough", "training", "to", "deal", "with", "diversions", "that", "could", "be", "almost", "exponential", "compared", "with", "those", "faced", "by", "most", "drivers", ".", "The", "New", "York", "Fire", "Department", ",", "which", "coordinates", "the", "city", "s", "largest", "ambulance", "system", ",", "said", "drivers", "were", "not", "supposed", "to", "use", "on-board", "computers", "in", "traffic", ".", "That", "is", "the", "role", "of", "the", "driver", "s", "partner", ",", "and", "if", "the", "partner", "is", "in", "the", "back", "tending", "to", "a", "patient", ",", "the", "driver", "is", "supposed", "to", "use", "devices", "before", "speeding", "off", ".", "There", "s", "no", "need", "for", "our", "drivers", "to", "get", "distracted", ",", "because", "the", "system", "has", "evolved", "to", "keep", "safety", "paramount", ",", "said", "Jerry", "Gombo", ",", "assistant", "chief", "for", "emergency", "service", "operations", "at", "the", "Fire", "Department", ".", "Drivers", "do", "get", "into", "accidents", ",", "he", "said", ",", "but", "he", "couldn", "t", "remember", "a", "single", "one", "caused", "by", "distraction", "from", "using", "a", "computer", ".", "He", "also", "estimates", "the", "technology", "saves", "20", "to", "30", "seconds", "per", "call", ".", "There", "s", "no", "doubt", "we", "re", "having", "quicker", "response", "time", ",", "Mr", ".", "Gombo", "added", ".", "But", "in", "interviews", ",", "medics", "and", "E.M.T.", "s", "in", "New", "York", "and", "elsewhere", "say", "that", "although", "they", "are", "aware", "of", "the", "rules", ",", "they", "do", "use", "their", "on-board", "computers", "while", "driving", "because", "they", "can", "t", "wait", "for", "certain", "information", ".", "States", "that", "ban", "drivers", "from", "texting", "or", "using", "hand-held", "phones", "tend", "to", "exempt", "first", "responders", ".", "And", "in", "many", "places", "where", "even", "they", "are", "forbidden", "to", "use", "cellphones", "behind", "the", "wheel", ",", "the", "edict", "is", "often", "ignored", "."];
+
+var lexer = new Lexer();
+var tagger = new POSTagger();
+var start = new Date().getTime();
+var words = lexer.lex(testString);
+var tags = tagger.tag(words);
+var end = new Date().getTime();
+difference = (end - start);
+for (i in tags) {
+ var tag = tags[i];
+ print(tag[0] + " /" + tag[1]);
+}
+//print ("Tokenized and tagged " + words.length + " words in " + difference + " milliseconds");
+var taggedWords = tagger.tag(testWords);
+var result = "[";
+for (i in taggedWords) {
+ result += taggedWords[i][1];
+ result += ", ";
+}
+print(result);
diff --git a/exampleData/ruleSets/language-processing/natural/1-1000.js b/exampleData/ruleSets/language-processing/natural/1-1000.js
new file mode 100644
index 0000000..939dc4c
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/1-1000.js
@@ -0,0 +1,133 @@
+module.exports = ['the', 'of', 'to', 'and', 'a', 'in', 'is', 'it',
+'you', 'that', 'he', 'was', 'for', 'on', 'are', 'with', 'as', 'I',
+'his', 'they', 'be', 'at', 'one', 'have', 'this', 'from', 'or', 'had',
+'by', 'hot', 'word', 'but', 'what', 'some', 'we', 'can', 'out',
+'other', 'were', 'all', 'there', 'when', 'up', 'use', 'your', 'how',
+'said', 'an', 'each', 'she', 'which', 'do', 'their', 'time', 'if',
+'will', 'way', 'about', 'many', 'then', 'them', 'write', 'would',
+'like', 'so', 'these', 'her', 'long', 'make', 'thing', 'see', 'him',
+'two', 'has', 'look', 'more', 'day', 'could', 'go', 'come', 'did',
+'number', 'sound', 'no', 'most', 'people', 'my', 'over', 'know',
+'water', 'than', 'call', 'first', 'who', 'may', 'down', 'side',
+'been', 'now', 'find', 'any', 'new', 'work', 'part', 'take', 'get',
+'place', 'made', 'live', 'where', 'after', 'back', 'little', 'only',
+'round', 'man', 'year', 'came', 'show', 'every', 'good', 'me', 'give',
+'our', 'under', 'name', 'very', 'through', 'just', 'form', 'sentence',
+'great', 'think', 'say', 'help', 'low', 'line', 'differ', 'turn',
+'cause', 'much', 'mean', 'before', 'move', 'right', 'boy', 'old',
+'too', 'same', 'tell', 'does', 'set', 'three', 'want', 'air', 'well',
+'also', 'play', 'small', 'end', 'put', 'home', 'read', 'hand', 'port',
+'large', 'spell', 'add', 'even', 'land', 'here', 'must', 'big',
+'high', 'such', 'follow', 'act', 'why', 'ask', 'men', 'change',
+'went', 'light', 'kind', 'off', 'need', 'house', 'picture', 'try',
+'us', 'again', 'animal', 'point', 'mother', 'world', 'near', 'build',
+'self', 'earth', 'father', 'head', 'stand', 'own', 'page', 'should',
+'country', 'found', 'answer', 'school', 'grow', 'study', 'still',
+'learn', 'plant', 'cover', 'food', 'sun', 'four', 'between', 'state',
+'keep', 'eye', 'never', 'last', 'let', 'thought', 'city', 'tree',
+'cross', 'farm', 'hard', 'start', 'might', 'story', 'saw', 'far',
+'sea', 'draw', 'left', 'late', 'run', 'don\'t', 'while', 'press',
+'close', 'night', 'real', 'life', 'few', 'north', 'open', 'seem',
+'together', 'next', 'white', 'children', 'begin', 'got', 'walk',
+'example', 'ease', 'paper', 'group', 'always', 'music', 'those',
+'both', 'mark', 'often', 'letter', 'until', 'mile', 'river', 'car',
+'feet', 'care', 'second', 'book', 'carry', 'took', 'science', 'eat',
+'room', 'friend', 'began', 'idea', 'fish', 'mountain', 'stop', 'once',
+'base', 'hear', 'horse', 'cut', 'sure', 'watch', 'color', 'face',
+'wood', 'main', 'enough', 'plain', 'girl', 'usual', 'young', 'ready',
+'above', 'ever', 'red', 'list', 'though', 'feel', 'talk', 'bird',
+'soon', 'body', 'dog', 'family', 'direct', 'pose', 'leave', 'song',
+'measure', 'door', 'product', 'black', 'short', 'numeral', 'class',
+'wind', 'question', 'happen', 'complete', 'ship', 'area', 'half',
+'rock', 'order', 'fire', 'south', 'problem', 'piece', 'told', 'knew',
+'pass', 'since', 'top', 'whole', 'king', 'space', 'heard', 'best',
+'hour', 'better', 'true .', 'during', 'hundred', 'five', 'remember',
+'step', 'early', 'hold', 'west', 'ground', 'interest', 'reach',
+'fast', 'verb', 'sing', 'listen', 'six', 'table', 'travel', 'less',
+'morning', 'ten', 'simple', 'several', 'vowel', 'toward', 'war',
+'lay', 'against', 'pattern', 'slow', 'center', 'love', 'person',
+'money', 'serve', 'appear', 'road', 'map', 'rain', 'rule', 'govern',
+'pull', 'cold', 'notice', 'voice', 'unit', 'power', 'town', 'fine',
+'certain', 'fly', 'fall', 'lead', 'cry', 'dark', 'machine', 'note',
+'wait', 'plan', 'figure', 'star', 'box', 'noun', 'field', 'rest',
+'correct', 'able', 'pound', 'done', 'beauty', 'drive', 'stood',
+'contain', 'front', 'teach', 'week', 'final', 'gave', 'green', 'oh',
+'quick', 'develop', 'ocean', 'warm', 'free', 'minute', 'strong',
+'special', 'mind', 'behind', 'clear', 'tail', 'produce', 'fact',
+'street', 'inch', 'multiply', 'nothing', 'course', 'stay', 'wheel',
+'full', 'force', 'blue', 'object', 'decide', 'surface', 'deep',
+'moon', 'island', 'foot', 'system', 'busy', 'test', 'record', 'boat',
+'common', 'gold', 'possible', 'plane', 'stead', 'dry', 'wonder',
+'laugh', 'thousand', 'ago', 'ran', 'check', 'game', 'shape', 'equate',
+'miss', 'brought', 'heat', 'snow', 'tire', 'bring', 'yes', 'distant',
+'fill', 'east', 'paint', 'language', 'among', 'grand', 'ball', 'yet',
+'wave', 'drop', 'heart', 'am', 'present', 'heavy', 'dance', 'engine',
+'position', 'arm', 'wide', 'sail', 'material', 'size', 'vary',
+'settle', 'speak', 'weight', 'general', 'ice', 'matter', 'circle',
+'pair', 'include', 'divide', 'syllable', 'felt', 'perhaps', 'pick',
+'sudden', 'count', 'square', 'reason', 'length', 'represent', 'art',
+'subject', 'region', 'energy', 'hunt', 'probable', 'bed', 'brother',
+'egg', 'ride', 'cell', 'believe', 'fraction', 'forest', 'sit', 'race',
+'window', 'store', 'summer', 'train', 'sleep', 'prove', 'lone', 'leg',
+'exercise', 'wall', 'catch', 'mount', 'wish', 'sky', 'board', 'joy',
+'winter', 'sat', 'written', 'wild', 'instrument', 'kept', 'glass',
+'grass', 'cow', 'job', 'edge', 'sign', 'visit', 'past', 'soft', 'fun',
+'bright', 'gas', 'weather', 'month', 'million', 'bear', 'finish',
+'happy', 'hope', 'flower', 'clothe', 'strange', 'gone', 'jump',
+'baby', 'eight', 'village', 'meet', 'root', 'buy', 'raise', 'solve',
+'metal', 'whether', 'push', 'seven', 'paragraph', 'third', 'shall',
+'held', 'hair', 'describe', 'cook', 'floor', 'either', 'result',
+'burn', 'hill', 'safe', 'cat', 'century', 'consider', 'type', 'law',
+'bit', 'coast', 'copy', 'phrase', 'silent', 'tall', 'sand', 'soil',
+'roll', 'temperature', 'finger', 'industry', 'value', 'fight', 'lie',
+'beat', 'excite', 'natural', 'view', 'sense', 'ear', 'else', 'quite',
+'broke', 'case', 'middle', 'kill', 'son', 'lake', 'moment', 'scale',
+'loud', 'spring', 'observe', 'child', 'straight', 'consonant',
+'nation', 'dictionary', 'milk', 'speed', 'method', 'organ', 'pay',
+'age', 'section', 'dress', 'cloud', 'surprise', 'quiet', 'stone',
+'tiny', 'climb', 'cool', 'design', 'poor', 'lot', 'experiment',
+'bottom', 'key', 'iron', 'single', 'stick', 'flat', 'twenty', 'skin',
+'smile', 'crease', 'hole', 'trade', 'melody', 'trip', 'office',
+'receive', 'row', 'mouth', 'exact', 'symbol', 'die', 'least',
+'trouble', 'shout', 'except', 'wrote', 'seed', 'tone', 'join',
+'suggest', 'clean', 'break', 'lady', 'yard', 'rise', 'bad', 'blow',
+'oil', 'blood', 'touch', 'grew', 'cent', 'mix', 'team', 'wire',
+'cost', 'lost', 'brown', 'wear', 'garden', 'equal', 'sent', 'choose',
+'fell', 'fit', 'flow', 'fair', 'bank', 'collect', 'save', 'control',
+'decimal', 'gentle', 'woman', 'captain', 'practice', 'separate',
+'difficult', 'doctor', 'please', 'protect', 'noon', 'whose', 'locate',
+'ring', 'character', 'insect', 'caught', 'period', 'indicate',
+'radio', 'spoke', 'atom', 'human', 'history', 'effect', 'electric',
+'expect', 'crop', 'modern', 'element', 'hit', 'student', 'corner',
+'party', 'supply', 'bone', 'rail', 'imagine', 'provide', 'agree',
+'thus', 'capital', 'won\'t', 'chair', 'danger', 'fruit', 'rich',
+'thick', 'soldier', 'process', 'operate', 'guess', 'necessary',
+'sharp', 'wing', 'create', 'neighbor', 'wash', 'bat', 'rather',
+'crowd', 'corn', 'compare', 'poem', 'string', 'bell', 'depend',
+'meat', 'rub', 'tube', 'famous', 'dollar', 'stream', 'fear', 'sight',
+'thin', 'triangle', 'planet', 'hurry', 'chief', 'colony', 'clock',
+'mine', 'tie', 'enter', 'major', 'fresh', 'search', 'send', 'yellow',
+'gun', 'allow', 'print', 'dead', 'spot', 'desert', 'suit', 'current',
+'lift', 'rose', 'continue', 'block', 'chart', 'hat', 'sell',
+'success', 'company', 'subtract', 'event', 'particular', 'deal',
+'swim', 'term', 'opposite', 'wife', 'shoe', 'shoulder', 'spread',
+'arrange', 'camp', 'invent', 'cotton', 'born', 'determine', 'quart',
+'nine', 'truck', 'noise', 'level', 'chance', 'gather', 'shop',
+'stretch', 'throw', 'shine', 'property', 'column', 'molecule',
+'select', 'wrong', 'gray', 'repeat', 'require', 'broad', 'prepare',
+'salt', 'nose', 'plural', 'anger', 'claim', 'continent', 'oxygen',
+'sugar', 'death', 'pretty', 'skill', 'women', 'season', 'solution',
+'magnet', 'silver', 'thank', 'branch', 'match', 'suffix',
+'especially', 'fig', 'afraid', 'huge', 'sister', 'steel', 'discuss',
+'forward', 'similar', 'guide', 'experience', 'score', 'apple',
+'bought', 'led', 'pitch', 'coat', 'mass', 'card', 'band', 'rope',
+'slip', 'win', 'dream', 'evening', 'condition', 'feed', 'tool',
+']total', 'basic', 'smell', 'valley', 'nor', 'double', 'seat',
+'arrive', 'master', 'track', 'parent', 'shore', 'division', 'sheet',
+'substance', 'favor', 'connect', 'post', 'spend', 'chord', 'fat',
+'glad', 'original', 'share', 'station', 'dad', 'bread', 'charge',
+'proper', 'bar', 'offer', 'segment', 'slave', 'duck', 'instant',
+'market', 'degree', 'populate', 'chick', 'dear', 'enemy', 'reply',
+'drink', 'occur', 'support', 'speech', 'nature', 'range', 'steam',
+'motion', 'path', 'liquid', 'log', 'meant', 'quotient', 'teeth',
+'shell', 'neck' ];
diff --git a/exampleData/ruleSets/language-processing/natural/1-1000.txt b/exampleData/ruleSets/language-processing/natural/1-1000.txt
new file mode 100644
index 0000000..0545de8
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/1-1000.txt
@@ -0,0 +1,133 @@
+var 1000words = ['the', 'of', 'to', 'and', 'a', 'in', 'is', 'it',
+'you', 'that', 'he', 'was', 'for', 'on', 'are', 'with', 'as', 'I',
+'his', 'they', 'be', 'at', 'one', 'have', 'this', 'from', 'or', 'had',
+'by', 'hot', 'word', 'but', 'what', 'some', 'we', 'can', 'out',
+'other', 'were', 'all', 'there', 'when', 'up', 'use', 'your', 'how',
+'said', 'an', 'each', 'she', 'which', 'do', 'their', 'time', 'if',
+'will', 'way', 'about', 'many', 'then', 'them', 'write', 'would',
+'like', 'so', 'these', 'her', 'long', 'make', 'thing', 'see', 'him',
+'two', 'has', 'look', 'more', 'day', 'could', 'go', 'come', 'did',
+'number', 'sound', 'no', 'most', 'people', 'my', 'over', 'know',
+'water', 'than', 'call', 'first', 'who', 'may', 'down', 'side',
+'been', 'now', 'find', 'any', 'new', 'work', 'part', 'take', 'get',
+'place', 'made', 'live', 'where', 'after', 'back', 'little', 'only',
+'round', 'man', 'year', 'came', 'show', 'every', 'good', 'me', 'give',
+'our', 'under', 'name', 'very', 'through', 'just', 'form', 'sentence',
+'great', 'think', 'say', 'help', 'low', 'line', 'differ', 'turn',
+'cause', 'much', 'mean', 'before', 'move', 'right', 'boy', 'old',
+'too', 'same', 'tell', 'does', 'set', 'three', 'want', 'air', 'well',
+'also', 'play', 'small', 'end', 'put', 'home', 'read', 'hand', 'port',
+'large', 'spell', 'add', 'even', 'land', 'here', 'must', 'big',
+'high', 'such', 'follow', 'act', 'why', 'ask', 'men', 'change',
+'went', 'light', 'kind', 'off', 'need', 'house', 'picture', 'try',
+'us', 'again', 'animal', 'point', 'mother', 'world', 'near', 'build',
+'self', 'earth', 'father', 'head', 'stand', 'own', 'page', 'should',
+'country', 'found', 'answer', 'school', 'grow', 'study', 'still',
+'learn', 'plant', 'cover', 'food', 'sun', 'four', 'between', 'state',
+'keep', 'eye', 'never', 'last', 'let', 'thought', 'city', 'tree',
+'cross', 'farm', 'hard', 'start', 'might', 'story', 'saw', 'far',
+'sea', 'draw', 'left', 'late', 'run', 'don't', 'while', 'press',
+'close', 'night', 'real', 'life', 'few', 'north', 'open', 'seem',
+'together', 'next', 'white', 'children', 'begin', 'got', 'walk',
+'example', 'ease', 'paper', 'group', 'always', 'music', 'those',
+'both', 'mark', 'often', 'letter', 'until', 'mile', 'river', 'car',
+'feet', 'care', 'second', 'book', 'carry', 'took', 'science', 'eat',
+'room', 'friend', 'began', 'idea', 'fish', 'mountain', 'stop', 'once',
+'base', 'hear', 'horse', 'cut', 'sure', 'watch', 'color', 'face',
+'wood', 'main', 'enough', 'plain', 'girl', 'usual', 'young', 'ready',
+'above', 'ever', 'red', 'list', 'though', 'feel', 'talk', 'bird',
+'soon', 'body', 'dog', 'family', 'direct', 'pose', 'leave', 'song',
+'measure', 'door', 'product', 'black', 'short', 'numeral', 'class',
+'wind', 'question', 'happen', 'complete', 'ship', 'area', 'half',
+'rock', 'order', 'fire', 'south', 'problem', 'piece', 'told', 'knew',
+'pass', 'since', 'top', 'whole', 'king', 'space', 'heard', 'best',
+'hour', 'better', 'true .', 'during', 'hundred', 'five', 'remember',
+'step', 'early', 'hold', 'west', 'ground', 'interest', 'reach',
+'fast', 'verb', 'sing', 'listen', 'six', 'table', 'travel', 'less',
+'morning', 'ten', 'simple', 'several', 'vowel', 'toward', 'war',
+'lay', 'against', 'pattern', 'slow', 'center', 'love', 'person',
+'money', 'serve', 'appear', 'road', 'map', 'rain', 'rule', 'govern',
+'pull', 'cold', 'notice', 'voice', 'unit', 'power', 'town', 'fine',
+'certain', 'fly', 'fall', 'lead', 'cry', 'dark', 'machine', 'note',
+'wait', 'plan', 'figure', 'star', 'box', 'noun', 'field', 'rest',
+'correct', 'able', 'pound', 'done', 'beauty', 'drive', 'stood',
+'contain', 'front', 'teach', 'week', 'final', 'gave', 'green', 'oh',
+'quick', 'develop', 'ocean', 'warm', 'free', 'minute', 'strong',
+'special', 'mind', 'behind', 'clear', 'tail', 'produce', 'fact',
+'street', 'inch', 'multiply', 'nothing', 'course', 'stay', 'wheel',
+'full', 'force', 'blue', 'object', 'decide', 'surface', 'deep',
+'moon', 'island', 'foot', 'system', 'busy', 'test', 'record', 'boat',
+'common', 'gold', 'possible', 'plane', 'stead', 'dry', 'wonder',
+'laugh', 'thousand', 'ago', 'ran', 'check', 'game', 'shape', 'equate',
+'miss', 'brought', 'heat', 'snow', 'tire', 'bring', 'yes', 'distant',
+'fill', 'east', 'paint', 'language', 'among', 'grand', 'ball', 'yet',
+'wave', 'drop', 'heart', 'am', 'present', 'heavy', 'dance', 'engine',
+'position', 'arm', 'wide', 'sail', 'material', 'size', 'vary',
+'settle', 'speak', 'weight', 'general', 'ice', 'matter', 'circle',
+'pair', 'include', 'divide', 'syllable', 'felt', 'perhaps', 'pick',
+'sudden', 'count', 'square', 'reason', 'length', 'represent', 'art',
+'subject', 'region', 'energy', 'hunt', 'probable', 'bed', 'brother',
+'egg', 'ride', 'cell', 'believe', 'fraction', 'forest', 'sit', 'race',
+'window', 'store', 'summer', 'train', 'sleep', 'prove', 'lone', 'leg',
+'exercise', 'wall', 'catch', 'mount', 'wish', 'sky', 'board', 'joy',
+'winter', 'sat', 'written', 'wild', 'instrument', 'kept', 'glass',
+'grass', 'cow', 'job', 'edge', 'sign', 'visit', 'past', 'soft', 'fun',
+'bright', 'gas', 'weather', 'month', 'million', 'bear', 'finish',
+'happy', 'hope', 'flower', 'clothe', 'strange', 'gone', 'jump',
+'baby', 'eight', 'village', 'meet', 'root', 'buy', 'raise', 'solve',
+'metal', 'whether', 'push', 'seven', 'paragraph', 'third', 'shall',
+'held', 'hair', 'describe', 'cook', 'floor', 'either', 'result',
+'burn', 'hill', 'safe', 'cat', 'century', 'consider', 'type', 'law',
+'bit', 'coast', 'copy', 'phrase', 'silent', 'tall', 'sand', 'soil',
+'roll', 'temperature', 'finger', 'industry', 'value', 'fight', 'lie',
+'beat', 'excite', 'natural', 'view', 'sense', 'ear', 'else', 'quite',
+'broke', 'case', 'middle', 'kill', 'son', 'lake', 'moment', 'scale',
+'loud', 'spring', 'observe', 'child', 'straight', 'consonant',
+'nation', 'dictionary', 'milk', 'speed', 'method', 'organ', 'pay',
+'age', 'section', 'dress', 'cloud', 'surprise', 'quiet', 'stone',
+'tiny', 'climb', 'cool', 'design', 'poor', 'lot', 'experiment',
+'bottom', 'key', 'iron', 'single', 'stick', 'flat', 'twenty', 'skin',
+'smile', 'crease', 'hole', 'trade', 'melody', 'trip', 'office',
+'receive', 'row', 'mouth', 'exact', 'symbol', 'die', 'least',
+'trouble', 'shout', 'except', 'wrote', 'seed', 'tone', 'join',
+'suggest', 'clean', 'break', 'lady', 'yard', 'rise', 'bad', 'blow',
+'oil', 'blood', 'touch', 'grew', 'cent', 'mix', 'team', 'wire',
+'cost', 'lost', 'brown', 'wear', 'garden', 'equal', 'sent', 'choose',
+'fell', 'fit', 'flow', 'fair', 'bank', 'collect', 'save', 'control',
+'decimal', 'gentle', 'woman', 'captain', 'practice', 'separate',
+'difficult', 'doctor', 'please', 'protect', 'noon', 'whose', 'locate',
+'ring', 'character', 'insect', 'caught', 'period', 'indicate',
+'radio', 'spoke', 'atom', 'human', 'history', 'effect', 'electric',
+'expect', 'crop', 'modern', 'element', 'hit', 'student', 'corner',
+'party', 'supply', 'bone', 'rail', 'imagine', 'provide', 'agree',
+'thus', 'capital', 'won't', 'chair', 'danger', 'fruit', 'rich',
+'thick', 'soldier', 'process', 'operate', 'guess', 'necessary',
+'sharp', 'wing', 'create', 'neighbor', 'wash', 'bat', 'rather',
+'crowd', 'corn', 'compare', 'poem', 'string', 'bell', 'depend',
+'meat', 'rub', 'tube', 'famous', 'dollar', 'stream', 'fear', 'sight',
+'thin', 'triangle', 'planet', 'hurry', 'chief', 'colony', 'clock',
+'mine', 'tie', 'enter', 'major', 'fresh', 'search', 'send', 'yellow',
+'gun', 'allow', 'print', 'dead', 'spot', 'desert', 'suit', 'current',
+'lift', 'rose', 'continue', 'block', 'chart', 'hat', 'sell',
+'success', 'company', 'subtract', 'event', 'particular', 'deal',
+'swim', 'term', 'opposite', 'wife', 'shoe', 'shoulder', 'spread',
+'arrange', 'camp', 'invent', 'cotton', 'born', 'determine', 'quart',
+'nine', 'truck', 'noise', 'level', 'chance', 'gather', 'shop',
+'stretch', 'throw', 'shine', 'property', 'column', 'molecule',
+'select', 'wrong', 'gray', 'repeat', 'require', 'broad', 'prepare',
+'salt', 'nose', 'plural', 'anger', 'claim', 'continent', 'oxygen',
+'sugar', 'death', 'pretty', 'skill', 'women', 'season', 'solution',
+'magnet', 'silver', 'thank', 'branch', 'match', 'suffix',
+'especially', 'fig', 'afraid', 'huge', 'sister', 'steel', 'discuss',
+'forward', 'similar', 'guide', 'experience', 'score', 'apple',
+'bought', 'led', 'pitch', 'coat', 'mass', 'card', 'band', 'rope',
+'slip', 'win', 'dream', 'evening', 'condition', 'feed', 'tool',
+']total', 'basic', 'smell', 'valley', 'nor', 'double', 'seat',
+'arrive', 'master', 'track', 'parent', 'shore', 'division', 'sheet',
+'substance', 'favor', 'connect', 'post', 'spend', 'chord', 'fat',
+'glad', 'original', 'share', 'station', 'dad', 'bread', 'charge',
+'proper', 'bar', 'offer', 'segment', 'slave', 'duck', 'instant',
+'market', 'degree', 'populate', 'chick', 'dear', 'enemy', 'reply',
+'drink', 'occur', 'support', 'speech', 'nature', 'range', 'steam',
+'motion', 'path', 'liquid', 'log', 'meant', 'quotient', 'teeth',
+'shell', 'neck', ];
diff --git a/exampleData/ruleSets/language-processing/natural/browserify b/exampleData/ruleSets/language-processing/natural/browserify
new file mode 120000
index 0000000..ba15d02
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/browserify
@@ -0,0 +1 @@
+./node_modules/browserify/bin/cmd.js \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/jquery.js b/exampleData/ruleSets/language-processing/natural/jquery.js
new file mode 100755
index 0000000..a86bf79
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/jquery.js
@@ -0,0 +1,9472 @@
+/*!
+ * jQuery JavaScript Library v1.8.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
+ */
+(function( window, undefined ) {
+var
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+ location = window.location,
+ navigator = window.navigator,
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // Save a reference to some core methods
+ core_push = Array.prototype.push,
+ core_slice = Array.prototype.slice,
+ core_indexOf = Array.prototype.indexOf,
+ core_toString = Object.prototype.toString,
+ core_hasOwn = Object.prototype.hasOwnProperty,
+ core_trim = String.prototype.trim,
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Used for matching numbers
+ core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
+
+ // Used for detecting and trimming whitespace
+ core_rnotwhite = /\S/,
+ core_rspace = /\s+/,
+
+ // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return ( letter + "" ).toUpperCase();
+ },
+
+ // The ready event handler and self cleanup method
+ DOMContentLoaded = function() {
+ if ( document.addEventListener ) {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ } else if ( document.readyState === "complete" ) {
+ // we're here because readyState === "complete" in oldIE
+ // which is good enough for us to call the dom ready!
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ },
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+ doc = ( context && context.nodeType ? context.ownerDocument || context : document );
+
+ // scripts is true for back-compat
+ selector = jQuery.parseHTML( match[1], doc, true );
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ this.attr.call( selector, context, true );
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.8.3",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return core_slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ return this;
+ },
+
+ eq: function( i ) {
+ i = +i;
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( core_slice.apply( this, arguments ),
+ "slice", core_slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: core_push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger("ready").off("ready");
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function( obj ) {
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ core_toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !core_hasOwn.call(obj, "constructor") &&
+ !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+ } catch ( e ) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || core_hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // scripts (optional): If true, will include scripts passed in the html string
+ parseHTML: function( data, context, scripts ) {
+ var parsed;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ scripts = context;
+ context = 0;
+ }
+ context = context || document;
+
+ // Single tag
+ if ( (parsed = rsingleTag.exec( data )) ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
+ return jQuery.merge( [],
+ (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
+ },
+
+ parseJSON: function( data ) {
+ if ( !data || typeof data !== "string") {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Attempt to parse using the native JSON parser first
+ if ( window.JSON && window.JSON.parse ) {
+ return window.JSON.parse( data );
+ }
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+ .replace( rvalidtokens, "]" )
+ .replace( rvalidbraces, "")) ) {
+
+ return ( new Function( "return " + data ) )();
+
+ }
+ jQuery.error( "Invalid JSON: " + data );
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ try {
+ if ( window.DOMParser ) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } else { // IE
+ xml = new ActiveXObject( "Microsoft.XMLDOM" );
+ xml.async = "false";
+ xml.loadXML( data );
+ }
+ } catch( e ) {
+ xml = undefined;
+ }
+ if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function( data ) {
+ if ( data && core_rnotwhite.test( data ) ) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function( data ) {
+ window[ "eval" ].call( window, data );
+ } )( data );
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var name,
+ i = 0,
+ length = obj.length,
+ isObj = length === undefined || jQuery.isFunction( obj );
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in obj ) {
+ if ( callback.apply( obj[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( obj[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in obj ) {
+ if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+ function( text ) {
+ return text == null ?
+ "" :
+ core_trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace( rtrim, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var type,
+ ret = results || [];
+
+ if ( arr != null ) {
+ // The window, strings (and functions) also have 'length'
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ type = jQuery.type( arr );
+
+ if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
+ core_push.call( ret, arr );
+ } else {
+ jQuery.merge( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ var len;
+
+ if ( arr ) {
+ if ( core_indexOf ) {
+ return core_indexOf.call( arr, elem, i );
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+ for ( ; i < len; i++ ) {
+ // Skip accessing in sparse arrays
+ if ( i in arr && arr[ i ] === elem ) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var l = second.length,
+ i = first.length,
+ j = 0;
+
+ if ( typeof l === "number" ) {
+ for ( ; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var retVal,
+ ret = [],
+ i = 0,
+ length = elems.length;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value, key,
+ ret = [],
+ i = 0,
+ length = elems.length,
+ // jquery objects are treated as arrays
+ isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( key in elems ) {
+ value = callback( elems[ key ], key, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = core_slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Multifunctional method to get and set values of a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+ var exec,
+ bulk = key == null,
+ i = 0,
+ length = elems.length;
+
+ // Sets many values
+ if ( key && typeof key === "object" ) {
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+ }
+ chainable = 1;
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = pass === undefined && jQuery.isFunction( value );
+
+ if ( bulk ) {
+ // Bulk operations only iterate when executing function values
+ if ( exec ) {
+ exec = fn;
+ fn = function( elem, key, value ) {
+ return exec.call( jQuery( elem ), value );
+ };
+
+ // Otherwise they run against the entire set
+ } else {
+ fn.call( elems, value );
+ fn = null;
+ }
+ }
+
+ if ( fn ) {
+ for (; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+ }
+
+ chainable = 1;
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+ },
+
+ now: function() {
+ return ( new Date() ).getTime();
+ }
+});
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready, 1 );
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch(e) {}
+
+ if ( top && top.doScroll ) {
+ (function doScrollCheck() {
+ if ( !jQuery.isReady ) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch(e) {
+ return setTimeout( doScrollCheck, 50 );
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.split( core_rspace ), function( _, flag ) {
+ object[ flag ] = true;
+ });
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[ options ] || createOptions( options ) ) :
+ jQuery.extend( {}, options );
+
+ var // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Control if a given callback is in the list
+ has: function( fn ) {
+ return jQuery.inArray( fn, list ) > -1;
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( list && ( !fired || stack ) ) {
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var action = tuple[ 0 ],
+ fn = fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
+ function() {
+ var returned = fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+ }
+ } :
+ newDefer[ action ]
+ );
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ] = list.fire
+ deferred[ tuple[0] ] = list.fire;
+ deferred[ tuple[0] + "With" ] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = core_slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+ if( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+ } else if ( !( --remaining ) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+jQuery.support = (function() {
+
+ var support,
+ all,
+ a,
+ select,
+ opt,
+ input,
+ fragment,
+ eventName,
+ i,
+ isSupported,
+ clickFn,
+ div = document.createElement("div");
+
+ // Setup
+ div.setAttribute( "className", "t" );
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+ // Support tests won't run in some limited or non-browser environments
+ all = div.getElementsByTagName("*");
+ a = div.getElementsByTagName("a")[ 0 ];
+ if ( !all || !a || !all.length ) {
+ return {};
+ }
+
+ // First batch of tests
+ select = document.createElement("select");
+ opt = select.appendChild( document.createElement("option") );
+ input = div.getElementsByTagName("input")[ 0 ];
+
+ a.style.cssText = "top:1px;float:left;opacity:.5";
+ support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ style: /top/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.5/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: ( input.value === "on" ),
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ getSetAttribute: div.className !== "t",
+
+ // Tests for enctype support on a form (#6743)
+ enctype: !!document.createElement("form").enctype,
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+ // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+ boxModel: ( document.compatMode === "CSS1Compat" ),
+
+ // Will be defined later
+ submitBubbles: true,
+ changeBubbles: true,
+ focusinBubbles: false,
+ deleteExpando: true,
+ noCloneEvent: true,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableMarginRight: true,
+ boxSizingReliable: true,
+ pixelPosition: false
+ };
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Test to see if it's possible to delete an expando from an element
+ // Fails in Internet Explorer
+ try {
+ delete div.test;
+ } catch( e ) {
+ support.deleteExpando = false;
+ }
+
+ if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+ div.attachEvent( "onclick", clickFn = function() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ support.noCloneEvent = false;
+ });
+ div.cloneNode( true ).fireEvent("onclick");
+ div.detachEvent( "onclick", clickFn );
+ }
+
+ // Check if a radio maintains its value
+ // after being appended to the DOM
+ input = document.createElement("input");
+ input.value = "t";
+ input.setAttribute( "type", "radio" );
+ support.radioValue = input.value === "t";
+
+ input.setAttribute( "checked", "checked" );
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+ fragment = document.createDocumentFragment();
+ fragment.appendChild( div.lastChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ fragment.removeChild( input );
+ fragment.appendChild( div );
+
+ // Technique from Juriy Zaytsev
+ // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+ // We only care about the case where non-standard event systems
+ // are used, namely in IE. Short-circuiting here helps us to
+ // avoid an eval call (in setAttribute) which can cause CSP
+ // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+ if ( div.attachEvent ) {
+ for ( i in {
+ submit: true,
+ change: true,
+ focusin: true
+ }) {
+ eventName = "on" + i;
+ isSupported = ( eventName in div );
+ if ( !isSupported ) {
+ div.setAttribute( eventName, "return;" );
+ isSupported = ( typeof div[ eventName ] === "function" );
+ }
+ support[ i + "Bubbles" ] = isSupported;
+ }
+ }
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, div, tds, marginDiv,
+ divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
+ body = document.getElementsByTagName("body")[0];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ container = document.createElement("div");
+ container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
+ body.insertBefore( container, body.firstChild );
+
+ // Construct the test element
+ div = document.createElement("div");
+ container.appendChild( div );
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName("td");
+ tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+ tds[ 0 ].style.display = "";
+ tds[ 1 ].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE <= 8 fail this test)
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+ // Check box-sizing and margin behavior
+ div.innerHTML = "";
+ div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+ support.boxSizing = ( div.offsetWidth === 4 );
+ support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+ // NOTE: To any future maintainer, we've window.getComputedStyle
+ // because jsdom on node.js will break without it.
+ if ( window.getComputedStyle ) {
+ support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+ support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. For more
+ // info see bug #3333
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ marginDiv = document.createElement("div");
+ marginDiv.style.cssText = div.style.cssText = divReset;
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ div.appendChild( marginDiv );
+ support.reliableMarginRight =
+ !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+ }
+
+ if ( typeof div.style.zoom !== "undefined" ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.innerHTML = "";
+ div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "block";
+ div.style.overflow = "visible";
+ div.innerHTML = "<div></div>";
+ div.firstChild.style.width = "5px";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+ container.style.zoom = 1;
+ }
+
+ // Null elements to avoid leaks in IE
+ body.removeChild( container );
+ container = div = tds = marginDiv = null;
+ });
+
+ // Null elements to avoid leaks in IE
+ fragment.removeChild( div );
+ all = a = select = opt = input = fragment = div = null;
+
+ return support;
+})();
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+ cache: {},
+
+ deletedIds: [],
+
+ // Remove at next major release (1.9/2.0)
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ hasData: function( elem ) {
+ elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+ return !!elem && !isEmptyDataObject( elem );
+ },
+
+ data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, ret,
+ internalKey = jQuery.expando,
+ getByName = typeof name === "string",
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+ return;
+ }
+
+ if ( !id ) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if ( isNode ) {
+ elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if ( !cache[ id ] ) {
+ cache[ id ] = {};
+
+ // Avoids exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ if ( !isNode ) {
+ cache[ id ].toJSON = jQuery.noop;
+ }
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if ( typeof name === "object" || typeof name === "function" ) {
+ if ( pvt ) {
+ cache[ id ] = jQuery.extend( cache[ id ], name );
+ } else {
+ cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+ }
+ }
+
+ thisCache = cache[ id ];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if ( !pvt ) {
+ if ( !thisCache.data ) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if ( data !== undefined ) {
+ thisCache[ jQuery.camelCase( name ) ] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if ( getByName ) {
+
+ // First Try to find as-is property data
+ ret = thisCache[ name ];
+
+ // Test for null|undefined property data
+ if ( ret == null ) {
+
+ // Try to find the camelCased property
+ ret = thisCache[ jQuery.camelCase( name ) ];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ },
+
+ removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ var thisCache, i, l,
+
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if ( !cache[ id ] ) {
+ return;
+ }
+
+ if ( name ) {
+
+ thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+ if ( thisCache ) {
+
+ // Support array or space separated string names for data keys
+ if ( !jQuery.isArray( name ) ) {
+
+ // try the string as a key before any manipulation
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase( name );
+ if ( name in thisCache ) {
+ name = [ name ];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ }
+
+ for ( i = 0, l = name.length; i < l; i++ ) {
+ delete thisCache[ name[i] ];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if ( !pvt ) {
+ delete cache[ id ].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if ( !isEmptyDataObject( cache[ id ] ) ) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if ( isNode ) {
+ jQuery.cleanData( [ elem ], true );
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+ delete cache[ id ];
+
+ // When all else fails, null
+ } else {
+ cache[ id ] = null;
+ }
+ },
+
+ // For internal use only.
+ _data: function( elem, name, data ) {
+ return jQuery.data( elem, name, data, true );
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ // nodes accept data unless otherwise specified; rejection can be conditional
+ return !noData || noData !== true && elem.getAttribute("classid") === noData;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var parts, part, attr, name, l,
+ elem = this[0],
+ i = 0,
+ data = null;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = jQuery.data( elem );
+
+ if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+ attr = elem.attributes;
+ for ( l = attr.length; i < l; i++ ) {
+ name = attr[i].name;
+
+ if ( !name.indexOf( "data-" ) ) {
+ name = jQuery.camelCase( name.substring(5) );
+
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ jQuery._data( elem, "parsedAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ parts = key.split( ".", 2 );
+ parts[1] = parts[1] ? "." + parts[1] : "";
+ part = parts[1] + "!";
+
+ return jQuery.access( this, function( value ) {
+
+ if ( value === undefined ) {
+ data = this.triggerHandler( "getData" + part, [ parts[0] ] );
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && elem ) {
+ data = jQuery.data( elem, key );
+ data = dataAttr( elem, key, data );
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+ }
+
+ parts[1] = value;
+ this.each(function() {
+ var self = jQuery( this );
+
+ self.triggerHandler( "setData" + part, parts );
+ jQuery.data( this, key, value );
+ self.triggerHandler( "changeData" + part, parts );
+ });
+ }, null, value, arguments.length > 1, null, false );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+
+ var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data( elem, key, data );
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+ var name;
+ for ( name in obj ) {
+
+ // if the public data object is empty, the private is still empty
+ if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+ continue;
+ }
+ if ( name !== "toJSON" ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray(data) ) {
+ queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ jQuery.removeData( elem, type + "queue", true );
+ jQuery.removeData( elem, key, true );
+ })
+ });
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[0], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while( i-- ) {
+ tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+});
+var nodeHook, boolHook, fixSpecified,
+ rclass = /[\t\r\n]/g,
+ rreturn = /\r/g,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea|)$/i,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ name = jQuery.propFix[ name ] || name;
+ return this.each(function() {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[ name ] = undefined;
+ delete this[ name ];
+ } catch( e ) {}
+ });
+ },
+
+ addClass: function( value ) {
+ var classNames, i, l, elem,
+ setClass, c, cl;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call(this, j, this.className) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ classNames = value.split( core_rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className && classNames.length === 1 ) {
+ elem.className = value;
+
+ } else {
+ setClass = " " + elem.className + " ";
+
+ for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) {
+ setClass += classNames[ c ] + " ";
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var removes, className, elem, c, cl, i, l;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call(this, j, this.className) );
+ });
+ }
+ if ( (value && typeof value === "string") || value === undefined ) {
+ removes = ( value || "" ).split( core_rspace );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ elem = this[ i ];
+ if ( elem.nodeType === 1 && elem.className ) {
+
+ className = (" " + elem.className + " ").replace( rclass, " " );
+
+ // loop over each item in the removal list
+ for ( c = 0, cl = removes.length; c < cl; c++ ) {
+ // Remove until there is nothing to remove,
+ while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) {
+ className = className.replace( " " + removes[ c ] + " " , " " );
+ }
+ }
+ elem.className = value ? jQuery.trim( className ) : "";
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value,
+ isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ state = stateVal,
+ classNames = value.split( core_rspace );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space separated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery._data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var val,
+ self = jQuery(this);
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, self.val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // oldIE doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var values = jQuery.makeArray( value );
+
+ jQuery(elem).find("option").each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
+ attrFn: {},
+
+ attr: function( elem, name, value, pass ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
+ return jQuery( elem )[ name ]( value );
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === "undefined" ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( notxml ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+ return;
+
+ } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+
+ ret = elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret === null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var propName, attrNames, name, isBool,
+ i = 0;
+
+ if ( value && elem.nodeType === 1 ) {
+
+ attrNames = value.split( core_rspace );
+
+ for ( ; i < attrNames.length; i++ ) {
+ name = attrNames[ i ];
+
+ if ( name ) {
+ propName = jQuery.propFix[ name ] || name;
+ isBool = rboolean.test( name );
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ // Do not do this for boolean attributes (see #10870)
+ if ( !isBool ) {
+ jQuery.attr( elem, name, "" );
+ }
+ elem.removeAttribute( getSetAttribute ? name : propName );
+
+ // Set corresponding property to false for boolean attributes
+ if ( isBool && propName in elem ) {
+ elem[ propName ] = false;
+ }
+ }
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to it's default in case type is set after value
+ // This is for element creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ },
+ // Use the value property for back compat
+ // Use the nodeHook for button elements in IE6/7 (#1954)
+ value: {
+ get: function( elem, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.get( elem, name );
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value, name ) {
+ if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+ return nodeHook.set( elem, value, name );
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ }
+ },
+
+ propFix: {
+ tabindex: "tabIndex",
+ readonly: "readOnly",
+ "for": "htmlFor",
+ "class": "className",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ cellpadding: "cellPadding",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ usemap: "useMap",
+ frameborder: "frameBorder",
+ contenteditable: "contentEditable"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ return ( elem[ name ] = value );
+ }
+
+ } else {
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ return elem[ name ];
+ }
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ var attributeNode = elem.getAttributeNode("tabindex");
+
+ return attributeNode && attributeNode.specified ?
+ parseInt( attributeNode.value, 10 ) :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+ }
+ }
+});
+
+// Hook for boolean attributes
+boolHook = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop( elem, name );
+ return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+ fixSpecified = {
+ name: true,
+ id: true,
+ coords: true
+ };
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = jQuery.valHooks.button = {
+ get: function( elem, name ) {
+ var ret;
+ ret = elem.getAttributeNode( name );
+ return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
+ ret.value :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode( name );
+ if ( !ret ) {
+ ret = document.createAttribute( name );
+ elem.setAttributeNode( ret );
+ }
+ return ( ret.value = value + "" );
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each([ "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ set: function( elem, value ) {
+ if ( value === "" ) {
+ elem.setAttribute( name, "auto" );
+ return value;
+ }
+ }
+ });
+ });
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ get: nodeHook.get,
+ set: function( elem, value, name ) {
+ if ( value === "" ) {
+ value = "false";
+ }
+ nodeHook.set( elem, value, name );
+ }
+ };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+ jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+ jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+ get: function( elem ) {
+ var ret = elem.getAttribute( name, 2 );
+ return ret === null ? undefined : ret;
+ }
+ });
+ });
+}
+
+if ( !jQuery.support.style ) {
+ jQuery.attrHooks.style = {
+ get: function( elem ) {
+ // Return undefined in the case of empty string
+ // Normalize to lowercase since IE uppercases css property names
+ return elem.style.cssText.toLowerCase() || undefined;
+ },
+ set: function( elem, value ) {
+ return ( elem.style.cssText = value + "" );
+ }
+ };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+ jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+ jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ get: function( elem ) {
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+ };
+ });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ });
+});
+var rformElems = /^(?:textarea|input|select)$/i,
+ rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
+ rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ hoverHack = function( events ) {
+ return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+ };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var elemData, eventHandle, events,
+ t, tns, type, namespaces, handleObj,
+ handleObjIn, handlers, special;
+
+ // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+ if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ events = elemData.events;
+ if ( !events ) {
+ elemData.events = events = {};
+ }
+ eventHandle = elemData.handle;
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = jQuery.trim( hoverHack(types) ).split( " " );
+ for ( t = 0; t < types.length; t++ ) {
+
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = tns[1];
+ namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: tns[1],
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ handlers = events[ type ];
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var t, tns, type, origType, namespaces, origCount,
+ j, events, special, eventType, handleObj,
+ elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+ for ( t = 0; t < types.length; t++ ) {
+ tns = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tns[1];
+ namespaces = tns[2];
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector? special.delegateType : special.bindType ) || type;
+ eventType = events[ type ] || [];
+ origCount = eventType.length;
+ namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+
+ // Remove matching events
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ eventType.splice( j--, 1 );
+
+ if ( handleObj.selector ) {
+ eventType.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( eventType.length === 0 && origCount !== eventType.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery.removeData( elem, "events", true );
+ }
+ },
+
+ // Events that are safe to short-circuit if no handlers are attached.
+ // Native DOM events should not be added, they may have inline handlers.
+ customEvent: {
+ "getData": true,
+ "setData": true,
+ "changeData": true
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+ // Don't do events on text and comment nodes
+ if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+ return;
+ }
+
+ // Event object or event type
+ var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
+ type = event.type || event,
+ namespaces = [];
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf( "!" ) >= 0 ) {
+ // Exclusive events trigger only for the exact event (no namespaces)
+ type = type.slice(0, -1);
+ exclusive = true;
+ }
+
+ if ( type.indexOf( "." ) >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+
+ if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+ // No jQuery handlers for this event type, and it can't have inline handlers
+ return;
+ }
+
+ // Caller can pass in an Event, Object, or just an event type string
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ new jQuery.Event( type, event ) :
+ // Just the event type (string)
+ new jQuery.Event( type );
+
+ event.type = type;
+ event.isTrigger = true;
+ event.exclusive = exclusive;
+ event.namespace = namespaces.join( "." );
+ event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+ ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+ // Handle a global trigger
+ if ( !elem ) {
+
+ // TODO: Stop taunting the data cache; remove global events and always attach to document
+ cache = jQuery.cache;
+ for ( i in cache ) {
+ if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+ jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+ }
+ }
+ return;
+ }
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data != null ? jQuery.makeArray( data ) : [];
+ data.unshift( event );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ eventPath = [[ elem, special.bindType || type ]];
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+ for ( old = elem; cur; cur = cur.parentNode ) {
+ eventPath.push([ cur, bubbleType ]);
+ old = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( old === (elem.ownerDocument || document) ) {
+ eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+ }
+ }
+
+ // Fire handlers on the event path
+ for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
+
+ cur = eventPath[i][0];
+ event.type = eventPath[i][1];
+
+ handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+ // Note that this is a bare JS function and not a jQuery handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+ !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ // IE<9 dies on focus/blur to hidden element (#1486)
+ if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ old = elem[ ontype ];
+
+ if ( old ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( old ) {
+ elem[ ontype ] = old;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event || window.event );
+
+ var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
+ handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+ delegateCount = handlers.delegateCount,
+ args = core_slice.call( arguments ),
+ run_all = !event.exclusive && !event.namespace,
+ special = jQuery.event.special[ event.type ] || {},
+ handlerQueue = [];
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers that should run if there are delegated events
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && !(event.button && event.type === "click") ) {
+
+ for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.disabled !== true || event.type !== "click" ) {
+ selMatch = {};
+ matches = [];
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+ sel = handleObj.selector;
+
+ if ( selMatch[ sel ] === undefined ) {
+ selMatch[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) >= 0 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( selMatch[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, matches: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( handlers.length > delegateCount ) {
+ handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+ }
+
+ // Run delegates first; they may want to stop propagation beneath us
+ for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+ matched = handlerQueue[ i ];
+ event.currentTarget = matched.elem;
+
+ for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+ handleObj = matched.matches[ j ];
+
+ // Triggered event must either 1) be non-exclusive and have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+ props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && fromElement ) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop,
+ originalEvent = event,
+ fixHook = jQuery.event.fixHooks[ event.type ] || {},
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = jQuery.Event( originalEvent );
+
+ for ( i = copy.length; i; ) {
+ prop = copy[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+ if ( !event.target ) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Target should not be a text node (#504, Safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
+ event.metaKey = !!event.metaKey;
+
+ return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+
+ focus: {
+ delegateType: "focusin"
+ },
+ blur: {
+ delegateType: "focusout"
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ { type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ var name = "on" + type;
+
+ if ( elem.detachEvent ) {
+
+ // #8545, #7054, preventing memory leaks for custom events in IE6-8
+ // detachEvent needed property on element, by name of that event, to properly expose it to GC
+ if ( typeof elem[ name ] === "undefined" ) {
+ elem[ name ] = null;
+ }
+
+ elem.detachEvent( name, handle );
+ }
+ };
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj,
+ selector = handleObj.selector;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+ if ( form && !jQuery._data( form, "_submit_attached" ) ) {
+ jQuery.event.add( form, "submit._submit", function( event ) {
+ event._submit_bubble = true;
+ });
+ jQuery._data( form, "_submit_attached", true );
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function( event ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( event._submit_bubble ) {
+ delete event._submit_bubble;
+ if ( this.parentNode && !event.isTrigger ) {
+ jQuery.event.simulate( "submit", this.parentNode, event, true );
+ }
+ }
+ },
+
+ teardown: function() {
+ // Only need this for delegated form submit events
+ if ( jQuery.nodeName( this, "form" ) ) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove( this, "._submit" );
+ }
+ };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+ jQuery.event.special.change = {
+
+ setup: function() {
+
+ if ( rformElems.test( this.nodeName ) ) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ jQuery.event.add( this, "propertychange._change", function( event ) {
+ if ( event.originalEvent.propertyName === "checked" ) {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add( this, "click._change", function( event ) {
+ if ( this._just_changed && !event.isTrigger ) {
+ this._just_changed = false;
+ }
+ // Allow triggered, simulated change events (#11500)
+ jQuery.event.simulate( "change", this, event, true );
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add( this, "beforeactivate._change", function( e ) {
+ var elem = e.target;
+
+ if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
+ jQuery.event.add( elem, "change._change", function( event ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+ jQuery.event.simulate( "change", this.parentNode, event, true );
+ }
+ });
+ jQuery._data( elem, "_change_attached", true );
+ }
+ });
+ },
+
+ handle: function( event ) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+ return event.handleObj.handler.apply( this, arguments );
+ }
+ },
+
+ teardown: function() {
+ jQuery.event.remove( this, "._change" );
+
+ return !rformElems.test( this.nodeName );
+ }
+ };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) { // && selector != null
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ live: function( types, data, fn ) {
+ jQuery( this.context ).on( types, this.selector, data, fn );
+ return this;
+ },
+ die: function( types, fn ) {
+ jQuery( this.context ).off( types, this.selector || "**", fn );
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ return jQuery.event.trigger( type, data, this[0], true );
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( rkeyEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+ }
+
+ if ( rmouseEvent.test( name ) ) {
+ jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+ }
+});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://sizzlejs.com/
+ */
+(function( window, undefined ) {
+
+var cachedruns,
+ assertGetIdNotName,
+ Expr,
+ getText,
+ isXML,
+ contains,
+ compile,
+ sortOrder,
+ hasDuplicate,
+ outermostContext,
+
+ baseHasDuplicate = true,
+ strundefined = "undefined",
+
+ expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
+
+ Token = String,
+ document = window.document,
+ docElem = document.documentElement,
+ dirruns = 0,
+ done = 0,
+ pop = [].pop,
+ push = [].push,
+ slice = [].slice,
+ // Use a stripped-down indexOf if a native one is unavailable
+ indexOf = [].indexOf || function( elem ) {
+ var i = 0,
+ len = this.length;
+ for ( ; i < len; i++ ) {
+ if ( this[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ // Augment a function for special use by Sizzle
+ markFunction = function( fn, value ) {
+ fn[ expando ] = value == null || value;
+ return fn;
+ },
+
+ createCache = function() {
+ var cache = {},
+ keys = [];
+
+ return markFunction(function( key, value ) {
+ // Only keep the most recent entries
+ if ( keys.push( key ) > Expr.cacheLength ) {
+ delete cache[ keys.shift() ];
+ }
+
+ // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)
+ return (cache[ key + " " ] = value);
+ }, cache );
+ },
+
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+
+ // Regex
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+ operators = "([*^$|!~]?=)",
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+ "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+ // Prefer arguments not in parens/brackets,
+ // then attribute selectors and non-pseudos (denoted by :),
+ // then anything else
+ // These preferences are here to reduce the number of selectors
+ // needing tokenize in the PSEUDO preFilter
+ pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
+
+ // For matchExpr.POS and matchExpr.needsContext
+ pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
+ "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
+ rpseudo = new RegExp( pseudos ),
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
+
+ rnot = /^:not/,
+ rsibling = /[\x20\t\r\n\f]*[+~]/,
+ rendsWithNot = /:not\($/,
+
+ rheader = /h\d/i,
+ rinputs = /input|select|textarea|button/i,
+
+ rbackslash = /\\(?!\\)/g,
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "POS": new RegExp( pos, "i" ),
+ "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ // For use in libraries implementing .is()
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
+ },
+
+ // Support
+
+ // Used for testing something on an element
+ assert = function( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // release memory in IE
+ div = null;
+ }
+ },
+
+ // Check if getElementsByTagName("*") returns only elements
+ assertTagNameNoComments = assert(function( div ) {
+ div.appendChild( document.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ }),
+
+ // Check if getAttribute returns normalized href attributes
+ assertHrefNotNormalized = assert(function( div ) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
+ div.firstChild.getAttribute("href") === "#";
+ }),
+
+ // Check if attributes should be retrieved by attribute nodes
+ assertAttributes = assert(function( div ) {
+ div.innerHTML = "<select></select>";
+ var type = typeof div.lastChild.getAttribute("multiple");
+ // IE8 returns a string for some attributes even when not present
+ return type !== "boolean" && type !== "string";
+ }),
+
+ // Check if getElementsByClassName can be trusted
+ assertUsableClassName = assert(function( div ) {
+ // Opera can't find a second classname (in 9.6)
+ div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
+ if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
+ return false;
+ }
+
+ // Safari 3.2 caches class attributes and doesn't catch changes
+ div.lastChild.className = "e";
+ return div.getElementsByClassName("e").length === 2;
+ }),
+
+ // Check if getElementById returns elements by name
+ // Check if getElementsByName privileges form controls or returns elements by ID
+ assertUsableName = assert(function( div ) {
+ // Inject content
+ div.id = expando + 0;
+ div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
+ docElem.insertBefore( div, docElem.firstChild );
+
+ // Test
+ var pass = document.getElementsByName &&
+ // buggy browsers will return fewer than the correct 2
+ document.getElementsByName( expando ).length === 2 +
+ // buggy browsers will return more than the correct 0
+ document.getElementsByName( expando + 0 ).length;
+ assertGetIdNotName = !document.getElementById( expando );
+
+ // Cleanup
+ docElem.removeChild( div );
+
+ return pass;
+ });
+
+// If slice is not available, provide a backup
+try {
+ slice.call( docElem.childNodes, 0 )[0].nodeType;
+} catch ( e ) {
+ slice = function( i ) {
+ var elem,
+ results = [];
+ for ( ; (elem = this[i]); i++ ) {
+ results.push( elem );
+ }
+ return results;
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ results = results || [];
+ context = context || document;
+ var match, elem, xml, m,
+ nodeType = context.nodeType;
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ if ( nodeType !== 1 && nodeType !== 9 ) {
+ return [];
+ }
+
+ xml = isXML( context );
+
+ if ( !xml && !seed ) {
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
+ push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
+ return results;
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
+}
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ return Sizzle( expr, null, null, [ elem ] ).length > 0;
+};
+
+// Returns a function to use in pseudos for input types
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+// Returns a function to use in pseudos for buttons
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+// Returns a function to use in pseudos for positionals
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( nodeType ) {
+ if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (see #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( ; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ }
+ return ret;
+};
+
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+// Element contains another
+contains = Sizzle.contains = docElem.contains ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );
+ } :
+ docElem.compareDocumentPosition ?
+ function( a, b ) {
+ return b && !!( a.compareDocumentPosition( b ) & 16 );
+ } :
+ function( a, b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+Sizzle.attr = function( elem, name ) {
+ var val,
+ xml = isXML( elem );
+
+ if ( !xml ) {
+ name = name.toLowerCase();
+ }
+ if ( (val = Expr.attrHandle[ name ]) ) {
+ return val( elem );
+ }
+ if ( xml || assertAttributes ) {
+ return elem.getAttribute( name );
+ }
+ val = elem.getAttributeNode( name );
+ return val ?
+ typeof elem[ name ] === "boolean" ?
+ elem[ name ] ? name : null :
+ val.specified ? val.value : null :
+ null;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ // IE6/7 return a modified href
+ attrHandle: assertHrefNotNormalized ?
+ {} :
+ {
+ "href": function( elem ) {
+ return elem.getAttribute( "href", 2 );
+ },
+ "type": function( elem ) {
+ return elem.getAttribute("type");
+ }
+ },
+
+ find: {
+ "ID": assertGetIdNotName ?
+ function( id, context, xml ) {
+ if ( typeof context.getElementById !== strundefined && !xml ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ } :
+ function( id, context, xml ) {
+ if ( typeof context.getElementById !== strundefined && !xml ) {
+ var m = context.getElementById( id );
+
+ return m ?
+ m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
+ [m] :
+ undefined :
+ [];
+ }
+ },
+
+ "TAG": assertTagNameNoComments ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
+ return context.getElementsByTagName( tag );
+ }
+ } :
+ function( tag, context ) {
+ var results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ var elem,
+ tmp = [],
+ i = 0;
+
+ for ( ; (elem = results[i]); i++ ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ },
+
+ "NAME": assertUsableName && function( tag, context ) {
+ if ( typeof context.getElementsByName !== strundefined ) {
+ return context.getElementsByName( name );
+ }
+ },
+
+ "CLASS": assertUsableClassName && function( className, context, xml ) {
+ if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
+ return context.getElementsByClassName( className );
+ }
+ }
+ },
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( rbackslash, "" );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 3 xn-component of xn+y argument ([+-]?\d*n|)
+ 4 sign of xn-component
+ 5 x of xn-component
+ 6 sign of y-component
+ 7 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1] === "nth" ) {
+ // nth-child requires argument
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
+ match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var unquoted, excess;
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ if ( match[3] ) {
+ match[2] = match[3];
+ } else if ( (unquoted = match[4]) ) {
+ // Only check arguments that contain a pseudo
+ if ( rpseudo.test(unquoted) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ unquoted = unquoted.slice( 0, excess );
+ match[0] = match[0].slice( 0, excess );
+ }
+ match[2] = unquoted;
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+ "ID": assertGetIdNotName ?
+ function( id ) {
+ id = id.replace( rbackslash, "" );
+ return function( elem ) {
+ return elem.getAttribute("id") === id;
+ };
+ } :
+ function( id ) {
+ id = id.replace( rbackslash, "" );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === id;
+ };
+ },
+
+ "TAG": function( nodeName ) {
+ if ( nodeName === "*" ) {
+ return function() { return true; };
+ }
+ nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
+
+ return function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ expando ][ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem, context ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.substr( result.length - check.length ) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, argument, first, last ) {
+
+ if ( type === "nth" ) {
+ return function( elem ) {
+ var node, diff,
+ parent = elem.parentNode;
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ if ( parent ) {
+ diff = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ diff++;
+ if ( elem === node ) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset (or cast to NaN), then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ };
+ }
+
+ return function( elem ) {
+ var node = elem;
+
+ switch ( type ) {
+ case "only":
+ case "first":
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ if ( type === "first" ) {
+ return true;
+ }
+
+ node = elem;
+
+ /* falls through */
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf.call( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === true;
+ },
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+ // not comment, processing instructions, or others
+ // Thanks to Diego Perini for the nodeName shortcut
+ // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+ var nodeType;
+ elem = elem.firstChild;
+ while ( elem ) {
+ if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
+ return false;
+ }
+ elem = elem.nextSibling;
+ }
+ return true;
+ },
+
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "text": function( elem ) {
+ var type, attr;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" &&
+ (type = elem.type) === "text" &&
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
+ },
+
+ // Input types
+ "radio": createInputPseudo("radio"),
+ "checkbox": createInputPseudo("checkbox"),
+ "file": createInputPseudo("file"),
+ "password": createInputPseudo("password"),
+ "image": createInputPseudo("image"),
+
+ "submit": createButtonPseudo("submit"),
+ "reset": createButtonPseudo("reset"),
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "focus": function( elem ) {
+ var doc = elem.ownerDocument;
+ return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ "active": function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ },
+
+ // Positional types
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ for ( var i = 0; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ for ( var i = 1; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+function siblingCheck( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+}
+
+sortOrder = docElem.compareDocumentPosition ?
+ function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
+ a.compareDocumentPosition :
+ a.compareDocumentPosition(b) & 4
+ ) ? -1 : 1;
+ } :
+ function( a, b ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+// Always assume the presence of duplicates if sort doesn't
+// pass them to our comparison function (as in Google Chrome).
+[0, 0].sort( sortOrder );
+baseHasDuplicate = !hasDuplicate;
+
+// Document sorting and removing duplicates
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ i = 1,
+ j = 0;
+
+ hasDuplicate = baseHasDuplicate;
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ for ( ; (elem = results[i]); i++ ) {
+ if ( elem === results[ i - 1 ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ return results;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+function tokenize( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ expando ][ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( tokens = [] );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
+
+ // Cast descendant combinators to space
+ matched.type = match[0].replace( rtrim, " " );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+
+ tokens.push( matched = new Token( match.shift() ) );
+ soFar = soFar.slice( matched.length );
+ matched.type = type;
+ matched.matches = match;
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && combinator.dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( !xml ) {
+ var cache,
+ dirkey = dirruns + " " + doneName + " ",
+ cachedkey = dirkey + cachedruns;
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ if ( (cache = elem[ expando ]) === cachedkey ) {
+ return elem.sizset;
+ } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
+ if ( elem.sizset ) {
+ return elem;
+ }
+ } else {
+ elem[ expando ] = cachedkey;
+ if ( matcher( elem, context, xml ) ) {
+ elem.sizset = true;
+ return elem;
+ }
+ elem.sizset = false;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( checkNonElements || elem.nodeType === 1 ) {
+ if ( matcher( elem, context, xml ) ) {
+ return elem;
+ }
+ }
+ }
+ }
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && tokens.join("")
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, expandContext ) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+ // Nested matchers should use non-integer dirruns
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ cachedruns = superMatcher.el;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++superMatcher.el;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ for ( j = 0; (matcher = setMatchers[j]); j++ ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ superMatcher.el = 0;
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ expando ][ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !group ) {
+ group = tokenize( selector );
+ }
+ i = group.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( group[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+ }
+ return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function select( selector, context, results, seed, xml ) {
+ var i, tokens, token, type, find,
+ match = tokenize( selector ),
+ j = match.length;
+
+ if ( !seed ) {
+ // Try to minimize operations if there is only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ context.nodeType === 9 && !xml &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
+ if ( !context ) {
+ return results;
+ }
+
+ selector = selector.slice( tokens.shift().length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( rbackslash, "" ),
+ rsibling.test( tokens[0].type ) && context.parentNode || context,
+ xml
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && tokens.join("");
+ if ( !selector ) {
+ push.apply( results, slice.call( seed, 0 ) );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile( selector, match )(
+ seed,
+ context,
+ xml,
+ results,
+ rsibling.test( selector )
+ );
+ return results;
+}
+
+if ( document.querySelectorAll ) {
+ (function() {
+ var disconnectedMatch,
+ oldSelect = select,
+ rescape = /'|\\/g,
+ rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
+
+ // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA
+ // A support test would require too much code (would include document ready)
+ rbuggyQSA = [ ":focus" ],
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ // A support test would require too much code (would include document ready)
+ // just skip matchesSelector for :active
+ rbuggyMatches = [ ":active" ],
+ matches = docElem.matchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.webkitMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector;
+
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explictly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ div.innerHTML = "<select><option selected=''></option></select>";
+
+ // IE8 - Some boolean attributes are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here (do not put tests after this one)
+ if ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function( div ) {
+
+ // Opera 10-12/IE9 - ^= $= *= and empty values
+ // Should not select anything
+ div.innerHTML = "<p test=''></p>";
+ if ( div.querySelectorAll("[test^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here (do not put tests after this one)
+ div.innerHTML = "<input type='hidden'/>";
+ if ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+ });
+
+ // rbuggyQSA always contains :focus, so no need for a length check
+ rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
+
+ select = function( selector, context, results, seed, xml ) {
+ // Only use querySelectorAll when not filtering,
+ // when this is not xml,
+ // and when no QSA bugs apply
+ if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {
+ var groups, i,
+ old = true,
+ nid = expando,
+ newContext = context,
+ newSelector = context.nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + groups[i].join("");
+ }
+ newContext = rsibling.test( selector ) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results, slice.call( newContext.querySelectorAll(
+ newSelector
+ ), 0 ) );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+
+ return oldSelect( selector, context, results, seed, xml );
+ };
+
+ if ( matches ) {
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ try {
+ matches.call( div, "[test!='']:sizzle" );
+ rbuggyMatches.push( "!=", pseudos );
+ } catch ( e ) {}
+ });
+
+ // rbuggyMatches always contains :active and :focus, so no need for a length check
+ rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
+
+ Sizzle.matchesSelector = function( elem, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ // rbuggyMatches always contains :active, so no need for an existence check
+ if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle( expr, null, null, [ elem ] ).length > 0;
+ };
+ }
+ })();
+}
+
+// Deprecated
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Back-compat
+function setFilters() {}
+Expr.filters = setFilters.prototype = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ rneedsContext = jQuery.expr.match.needsContext,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i, l, length, n, r, ret,
+ self = this;
+
+ if ( typeof selector !== "string" ) {
+ return jQuery( selector ).filter(function() {
+ for ( i = 0, l = self.length; i < l; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ });
+ }
+
+ ret = this.pushStack( "", "find", selector );
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( n = length; n < ret.length; n++ ) {
+ for ( r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var i,
+ targets = jQuery( target, this ),
+ len = targets.length;
+
+ return this.filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && (
+ typeof selector === "string" ?
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ rneedsContext.test( selector ) ?
+ jQuery( selector, this.context ).index( this[0] ) >= 0 :
+ jQuery.filter( selector, this ).length > 0 :
+ this.filter( selector ).length > 0 );
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ ret = [],
+ pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+ }
+ cur = cur.parentNode;
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return jQuery.inArray( this[0], jQuery( elem ) );
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+});
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+function sibling( cur, dir ) {
+ do {
+ cur = cur[ dir ];
+ } while ( cur && cur.nodeType !== 1 );
+
+ return cur;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+ if ( this.length > 1 && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ cur = elem[ dir ];
+
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+ // Can't pass null or undefined to indexOf in Firefox 4
+ // Set to 0 to skip string check
+ qualifier = qualifier || 0;
+
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( elem === qualifier ) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+ });
+}
+function createSafeFragment( document ) {
+ var list = nodeNames.split( "|" ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( list.length ) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ rnocache = /<(?:script|object|embed|option|style)/i,
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+ rcheckableType = /^(?:checkbox|radio)$/,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /\/(java|ecma)script/i,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
+ wrapMap = {
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+ legend: [ 1, "<fieldset>", "</fieldset>" ],
+ thead: [ 1, "<table>", "</table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+ col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+ area: [ 1, "<map>", "</map>" ],
+ _default: [ 0, "", "" ]
+ },
+ safeFragment = createSafeFragment( document ),
+ fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+// unless wrapped in a div with non-breaking characters in front of it.
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "X<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return jQuery.access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+ }, null, value, arguments.length );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ var isFunction = jQuery.isFunction( html );
+
+ return this.each(function(i) {
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( !isDisconnected( this[0] ) ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ }
+
+ if ( arguments.length ) {
+ var set = jQuery.clean( arguments );
+ return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
+ }
+ },
+
+ after: function() {
+ if ( !isDisconnected( this[0] ) ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ }
+
+ if ( arguments.length ) {
+ var set = jQuery.clean( arguments );
+ return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ return jQuery.access( this, function( value ) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined ) {
+ return elem.nodeType === 1 ?
+ elem.innerHTML.replace( rinlinejQuery, "" ) :
+ undefined;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
+ ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+ !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for (; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ elem = this[i] || {};
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function( value ) {
+ if ( !isDisconnected( this[0] ) ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery( value ).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling,
+ parent = this.parentNode;
+
+ jQuery( this ).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ }
+
+ return this.length ?
+ this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+ this;
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+
+ // Flatten any nested arrays
+ args = [].concat.apply( [], args );
+
+ var results, first, fragment, iNoClone,
+ i = 0,
+ value = args[0],
+ scripts = [],
+ l = this.length;
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call( this, i, table ? self.html() : undefined );
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ results = jQuery.buildFragment( args, this, scripts );
+ fragment = results.fragment;
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ // Fragments from the fragment cache must always be cloned and never used in place.
+ for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
+ callback.call(
+ table && jQuery.nodeName( this[i], "table" ) ?
+ findOrAppend( this[i], "tbody" ) :
+ this[i],
+ i === iNoClone ?
+ fragment :
+ jQuery.clone( fragment, true, true )
+ );
+ }
+ }
+
+ // Fix #11809: Avoid leaking memory
+ fragment = first = null;
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, function( i, elem ) {
+ if ( elem.src ) {
+ if ( jQuery.ajax ) {
+ jQuery.ajax({
+ url: elem.src,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ } else {
+ jQuery.error("no ajax");
+ }
+ } else {
+ jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ });
+ }
+ }
+
+ return this;
+ }
+});
+
+function findOrAppend( elem, tag ) {
+ return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
+
+function cloneCopyEvent( src, dest ) {
+
+ if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data( src ),
+ curData = jQuery._data( dest, oldData ),
+ events = oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if ( curData.data ) {
+ curData.data = jQuery.extend( {}, curData.data );
+ }
+}
+
+function cloneFixAttributes( src, dest ) {
+ var nodeName;
+
+ // We do not need to do anything for non-Elements
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // clearAttributes removes the attributes, which we don't want,
+ // but also removes the attachEvent events, which we *do* want
+ if ( dest.clearAttributes ) {
+ dest.clearAttributes();
+ }
+
+ // mergeAttributes, in contrast, only merges back on the
+ // original attributes, not the events
+ if ( dest.mergeAttributes ) {
+ dest.mergeAttributes( src );
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ if ( nodeName === "object" ) {
+ // IE6-10 improperly clones children of object elements using classid.
+ // IE10 throws NoModificationAllowedError if parent is null, #12132.
+ if ( dest.parentNode ) {
+ dest.outerHTML = src.outerHTML;
+ }
+
+ // This path appears unavoidable for IE9. When cloning an object
+ // element in IE9, the outerHTML strategy above is not sufficient.
+ // If the src has innerHTML and the destination does not,
+ // copy the src.innerHTML into the dest.innerHTML. #10324
+ if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
+ dest.innerHTML = src.innerHTML;
+ }
+
+ } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+
+ dest.defaultChecked = dest.checked = src.checked;
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if ( dest.value !== src.value ) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if ( nodeName === "option" ) {
+ dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+
+ // IE blanks contents when cloning scripts
+ } else if ( nodeName === "script" && dest.text !== src.text ) {
+ dest.text = src.text;
+ }
+
+ // Event data gets referenced instead of copied if the expando
+ // gets copied too
+ dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, context, scripts ) {
+ var fragment, cacheable, cachehit,
+ first = args[ 0 ];
+
+ // Set context from what may come in as undefined or a jQuery collection or a node
+ // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
+ // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
+ context = context || document;
+ context = !context.nodeType && context[0] || context;
+ context = context.ownerDocument || context;
+
+ // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+ if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
+ first.charAt(0) === "<" && !rnocache.test( first ) &&
+ (jQuery.support.checkClone || !rchecked.test( first )) &&
+ (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+ // Mark cacheable and look for a hit
+ cacheable = true;
+ fragment = jQuery.fragments[ first ];
+ cachehit = fragment !== undefined;
+ }
+
+ if ( !fragment ) {
+ fragment = context.createDocumentFragment();
+ jQuery.clean( args, context, fragment, scripts );
+
+ // Update the cache, but only store false
+ // unless this is a second parsing of the same content
+ if ( cacheable ) {
+ jQuery.fragments[ first ] = cachehit && fragment;
+ }
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ i = 0,
+ ret = [],
+ insert = jQuery( selector ),
+ l = insert.length,
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+ } else {
+ for ( ; i < l; i++ ) {
+ elems = ( i > 0 ? this.clone(true) : this ).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+function getAll( elem ) {
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ return elem.getElementsByTagName( "*" );
+
+ } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+ return elem.querySelectorAll( "*" );
+
+ } else {
+ return [];
+ }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+ if ( rcheckableType.test( elem.type ) ) {
+ elem.defaultChecked = elem.checked;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var srcElements,
+ destElements,
+ i,
+ clone;
+
+ if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+ clone = elem.cloneNode( true );
+
+ // IE<=8 does not properly clone detached, unknown element nodes
+ } else {
+ fragmentDiv.innerHTML = elem.outerHTML;
+ fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+ }
+
+ if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+ // IE copies events bound via attachEvent when using cloneNode.
+ // Calling detachEvent on the clone will also remove the events
+ // from the original. In order to get around this, we use some
+ // proprietary methods to clear the events. Thanks to MooTools
+ // guys for this hotness.
+
+ cloneFixAttributes( elem, clone );
+
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ // Weird iteration because IE will replace the length property
+ // with an element if you are cloning the body and one of the
+ // elements on the page has a name or id of "length"
+ for ( i = 0; srcElements[i]; ++i ) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if ( destElements[i] ) {
+ cloneFixAttributes( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ cloneCopyEvent( elem, clone );
+
+ if ( deepDataAndEvents ) {
+ srcElements = getAll( elem );
+ destElements = getAll( clone );
+
+ for ( i = 0; srcElements[i]; ++i ) {
+ cloneCopyEvent( srcElements[i], destElements[i] );
+ }
+ }
+ }
+
+ srcElements = destElements = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ clean: function( elems, context, fragment, scripts ) {
+ var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
+ safe = context === document && safeFragment,
+ ret = [];
+
+ // Ensure that context is a document
+ if ( !context || typeof context.createDocumentFragment === "undefined" ) {
+ context = document;
+ }
+
+ // Use the already-created safe fragment if context permits
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" ) {
+ if ( !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+ } else {
+ // Ensure a safe container in which to render the html
+ safe = safe || createSafeFragment( context );
+ div = context.createElement("div");
+ safe.appendChild( div );
+
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+ // Go to html and back, then peel off extra wrappers
+ tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ depth = wrap[0];
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ hasBody = rtbody.test(elem);
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+
+ // Take out of fragment container (we need a fresh div each time)
+ div.parentNode.removeChild( div );
+ }
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ jQuery.merge( ret, elem );
+ }
+ }
+
+ // Fix #11356: Clear elements from safeFragment
+ if ( div ) {
+ elem = div = safe = null;
+ }
+
+ // Reset defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ if ( !jQuery.support.appendChecked ) {
+ for ( i = 0; (elem = ret[i]) != null; i++ ) {
+ if ( jQuery.nodeName( elem, "input" ) ) {
+ fixDefaultChecked( elem );
+ } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+ }
+ }
+ }
+
+ // Append elements to a provided document fragment
+ if ( fragment ) {
+ // Special handling of each script element
+ handleScript = function( elem ) {
+ // Check if we consider it executable
+ if ( !elem.type || rscriptType.test( elem.type ) ) {
+ // Detach the script and store it in the scripts array (if provided) or the fragment
+ // Return truthy to indicate that it has been handled
+ return scripts ?
+ scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+ fragment.appendChild( elem );
+ }
+ };
+
+ for ( i = 0; (elem = ret[i]) != null; i++ ) {
+ // Check if we're done after handling an executable script
+ if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+ // Append to fragment and handle embedded scripts
+ fragment.appendChild( elem );
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+ jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+ // Splice the scripts into ret after their former ancestor and advance our index beyond them
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ i += jsTags.length;
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems, /* internal */ acceptData ) {
+ var data, id, elem, type,
+ i = 0,
+ internalKey = jQuery.expando,
+ cache = jQuery.cache,
+ deleteExpando = jQuery.support.deleteExpando,
+ special = jQuery.event.special;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+
+ if ( acceptData || jQuery.acceptData( elem ) ) {
+
+ id = elem[ internalKey ];
+ data = id && cache[ id ];
+
+ if ( data ) {
+ if ( data.events ) {
+ for ( type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ // Remove cache only if it was not already removed by jQuery.event.remove
+ if ( cache[ id ] ) {
+
+ delete cache[ id ];
+
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if ( deleteExpando ) {
+ delete elem[ internalKey ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( internalKey );
+
+ } else {
+ elem[ internalKey ] = null;
+ }
+
+ jQuery.deletedIds.push( id );
+ }
+ }
+ }
+ }
+ }
+});
+// Limit scope pollution from any deprecated API
+(function() {
+
+var matched, browser;
+
+// Use of jQuery.browser is frowned upon.
+// More details: http://api.jquery.com/jQuery.browser
+// jQuery.uaMatch maintained for back-compat
+jQuery.uaMatch = function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+ /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+};
+
+matched = jQuery.uaMatch( navigator.userAgent );
+browser = {};
+
+if ( matched.browser ) {
+ browser[ matched.browser ] = true;
+ browser.version = matched.version;
+}
+
+// Chrome is Webkit, but Webkit is also Safari.
+if ( browser.chrome ) {
+ browser.webkit = true;
+} else if ( browser.webkit ) {
+ browser.safari = true;
+}
+
+jQuery.browser = browser;
+
+jQuery.sub = function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ return jQuerySub;
+};
+
+})();
+var curCSS, iframe, iframeDoc,
+ ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ rposition = /^(top|right|bottom|left)$/,
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rmargin = /^margin/,
+ rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+ rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+ rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
+ elemdisplay = { BODY: "block" },
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: 0,
+ fontWeight: 400
+ },
+
+ cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+
+ eventsToggle = jQuery.fn.toggle;
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+ // shortcut for names that are not vendor prefixed
+ if ( name in style ) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in style ) {
+ return name;
+ }
+ }
+
+ return origName;
+}
+
+function isHidden( elem, el ) {
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+function showHide( elements, show ) {
+ var elem, display,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ values[ index ] = jQuery._data( elem, "olddisplay" );
+ if ( show ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !values[ index ] && elem.style.display === "none" ) {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( elem.style.display === "" && isHidden( elem ) ) {
+ values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+ }
+ } else {
+ display = curCSS( elem, "display" );
+
+ if ( !values[ index ] && display !== "none" ) {
+ jQuery._data( elem, "olddisplay", display );
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( index = 0; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+ elem.style.display = show ? values[ index ] || "" : "none";
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend({
+ css: function( name, value ) {
+ return jQuery.access( this, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ },
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state, fn2 ) {
+ var bool = typeof state === "boolean";
+
+ if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
+ return eventsToggle.apply( this, arguments );
+ }
+
+ return this.each(function() {
+ if ( bool ? state : isHidden( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase( name ),
+ style = elem.style;
+
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, numeric, extra ) {
+ var val, num, hooks,
+ origName = jQuery.camelCase( name );
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name );
+ }
+
+ //convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if ( numeric || extra !== undefined ) {
+ num = parseFloat( val );
+ return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
+ }
+ return val;
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+ }
+});
+
+// NOTE: To any future maintainer, we've window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+ curCSS = function( elem, name ) {
+ var ret, width, minWidth, maxWidth,
+ computed = window.getComputedStyle( elem, null ),
+ style = elem.style;
+
+ if ( computed ) {
+
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret;
+ };
+} else if ( document.documentElement.currentStyle ) {
+ curCSS = function( elem, name ) {
+ var left, rsLeft,
+ ret = elem.currentStyle && elem.currentStyle[ name ],
+ style = elem.style;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if ( ret == null && style && style[ name ] ) {
+ ret = style[ name ];
+ }
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ // but not position css attributes, as those are proportional to the parent element instead
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+ if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+ // Remember the original values
+ left = style.left;
+ rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ret;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if ( rsLeft ) {
+ elem.runtimeStyle.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+ var matches = rnumsplit.exec( value );
+ return matches ?
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+ value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for ( ; i < 4; i += 2 ) {
+ // both box models exclude margin, so add it if we want it
+ if ( extra === "margin" ) {
+ // we use jQuery.css instead of curCSS here
+ // because of the reliableMarginRight CSS hook!
+ val += jQuery.css( elem, extra + cssExpand[ i ], true );
+ }
+
+ // From this point on we use curCSS for maximum performance (relevant in animations)
+ if ( isBorderBox ) {
+ // border-box includes padding, so remove it if we want content
+ if ( extra === "content" ) {
+ val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if ( extra !== "margin" ) {
+ val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
+
+ // at this point, extra isn't content nor padding, so add border
+ if ( extra !== "padding" ) {
+ val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
+ }
+ }
+ }
+
+ return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ valueIsBorderBox = true,
+ isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
+
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if ( val <= 0 || val == null ) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if ( rnumnonpx.test(val) ) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+ }
+
+ // use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox
+ )
+ ) + "px";
+}
+
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+ if ( elemdisplay[ nodeName ] ) {
+ return elemdisplay[ nodeName ];
+ }
+
+ var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
+ display = elem.css("display");
+ elem.remove();
+
+ // If the simple way fails,
+ // get element's real default display by attaching it to a temp iframe
+ if ( display === "none" || display === "" ) {
+ // Use the already-created iframe if possible
+ iframe = document.body.appendChild(
+ iframe || jQuery.extend( document.createElement("iframe"), {
+ frameBorder: 0,
+ width: 0,
+ height: 0
+ })
+ );
+
+ // Create a cacheable copy of the iframe document on first call.
+ // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+ // document to it; WebKit & Firefox won't allow reusing the iframe document.
+ if ( !iframeDoc || !iframe.createElement ) {
+ iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+ iframeDoc.write("<!doctype html><html><body>");
+ iframeDoc.close();
+ }
+
+ elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
+
+ display = curCSS( elem, "display" );
+ document.body.removeChild( iframe );
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+
+ return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+ // certain elements can have dimension info if we invisibly show them
+ // however, it must have a current display style that would benefit from this
+ if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
+ return jQuery.swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, name, extra );
+ });
+ } else {
+ return getWidthOrHeight( elem, name, extra );
+ }
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ return setPositiveNumber( elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
+ ) : 0
+ );
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+ ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+ style.removeAttribute ) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute( "filter" );
+
+ // if there there is no filter style applied in a css rule, we are done
+ if ( currentStyle && !currentStyle.filter ) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test( filter ) ?
+ filter.replace( ralpha, opacity ) :
+ filter + " " + opacity;
+ }
+ };
+}
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap( elem, { "display": "inline-block" }, function() {
+ if ( computed ) {
+ return curCSS( elem, "marginRight" );
+ }
+ });
+ }
+ };
+ }
+
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+ // getComputedStyle returns percent when specified for top/left/bottom/right
+ // rather than make the css module depend on the offset module, we just check for it here
+ if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+ jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ var ret = curCSS( elem, prop );
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
+ }
+ }
+ };
+ });
+ }
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i,
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [ value ],
+ expanded = {};
+
+ for ( i = 0; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( !rmargin.test( prefix ) ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+});
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ rselectTextarea = /^(?:select|textarea)/i;
+
+jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ return this.elements ? jQuery.makeArray( this.elements ) : this;
+ })
+ .filter(function(){
+ return this.name && !this.disabled &&
+ ( this.checked || rselectTextarea.test( this.nodeName ) ||
+ rinput.test( this.type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val, i ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+
+ rhash = /#.*$/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rquery = /\?/,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rts = /([?&])_=[^&]*/,
+ rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType, list, placeBefore,
+ dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
+ i = 0,
+ length = dataTypes.length;
+
+ if ( jQuery.isFunction( func ) ) {
+ // For each dataType in the dataTypeExpression
+ for ( ; i < length; i++ ) {
+ dataType = dataTypes[ i ];
+ // We control if we're asked to add before
+ // any existing element
+ placeBefore = /^\+/.test( dataType );
+ if ( placeBefore ) {
+ dataType = dataType.substr( 1 ) || "*";
+ }
+ list = structure[ dataType ] = structure[ dataType ] || [];
+ // then we add to the structure accordingly
+ list[ placeBefore ? "unshift" : "push" ]( func );
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+ dataType /* internal */, inspected /* internal */ ) {
+
+ dataType = dataType || options.dataTypes[ 0 ];
+ inspected = inspected || {};
+
+ inspected[ dataType ] = true;
+
+ var selection,
+ list = structure[ dataType ],
+ i = 0,
+ length = list ? list.length : 0,
+ executeOnly = ( structure === prefilters );
+
+ for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+ selection = list[ i ]( options, originalOptions, jqXHR );
+ // If we got redirected to another dataType
+ // we try there if executing only and not done already
+ if ( typeof selection === "string" ) {
+ if ( !executeOnly || inspected[ selection ] ) {
+ selection = undefined;
+ } else {
+ options.dataTypes.unshift( selection );
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, selection, inspected );
+ }
+ }
+ }
+ // If we're only executing or nothing was selected
+ // we try the catchall dataType if not done already
+ if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+ selection = inspectPrefiltersOrTransports(
+ structure, options, originalOptions, jqXHR, "*", inspected );
+ }
+ // unnecessary when only executing (prefilters)
+ // but it'll be ignored by the caller in that case
+ return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+ }
+
+ // Don't do a request if no elements are being requested
+ if ( !this.length ) {
+ return this;
+ }
+
+ var selector, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = url.slice( off, url.length );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params,
+ complete: function( jqXHR, status ) {
+ if ( callback ) {
+ self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+ }
+ }
+ }).done(function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ // See if a selector was specified
+ self.html( selector ?
+
+ // Create a dummy div to hold the results
+ jQuery("<div>")
+
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append( responseText.replace( rscript, "" ) )
+
+ // Locate the specified elements
+ .find( selector ) :
+
+ // If not, just inject the full result
+ responseText );
+
+ });
+
+ return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+ jQuery.fn[ o ] = function( f ){
+ return this.on( o, f );
+ };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ type: method,
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ };
+});
+
+jQuery.extend({
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ if ( settings ) {
+ // Building a settings object
+ ajaxExtend( target, jQuery.ajaxSettings );
+ } else {
+ // Extending ajaxSettings
+ settings = target;
+ target = jQuery.ajaxSettings;
+ }
+ ajaxExtend( target, settings );
+ return target;
+ },
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ type: "GET",
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ processData: true,
+ async: true,
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ text: "text/plain",
+ json: "application/json, text/javascript",
+ "*": allTypes
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText"
+ },
+
+ // List of data converters
+ // 1) key format is "source_type destination_type" (a single space in-between)
+ // 2) the catchall symbol "*" can be used for source_type
+ converters: {
+
+ // Convert anything to text
+ "* text": window.String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ context: true,
+ url: true
+ }
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // ifModified key
+ ifModifiedKey,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // transport
+ transport,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events
+ // It's the callbackContext if one was provided in the options
+ // and if it's a DOM node or a jQuery collection
+ globalEventContext = callbackContext !== s &&
+ ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+ jQuery( callbackContext ) : jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks( "once memory" ),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+
+ readyState: 0,
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ if ( !state ) {
+ var lname = name.toLowerCase();
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match === undefined ? null : match;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ statusText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( statusText );
+ }
+ done( 0, statusText );
+ return this;
+ }
+ };
+
+ // Callback for when everything is done
+ // It is defined here because jslint complains if it is declared
+ // at the end of the function (which would be more logical and readable)
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // If successful, handle type chaining
+ if ( status >= 200 && status < 300 || status === 304 ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if ( modified ) {
+ jQuery.lastModified[ ifModifiedKey ] = modified;
+ }
+ modified = jqXHR.getResponseHeader("Etag");
+ if ( modified ) {
+ jQuery.etag[ ifModifiedKey ] = modified;
+ }
+ }
+
+ // If not modified
+ if ( status === 304 ) {
+
+ statusText = "notmodified";
+ isSuccess = true;
+
+ // If we have data
+ } else {
+
+ isSuccess = ajaxConvert( s, response );
+ statusText = isSuccess.state;
+ success = isSuccess.data;
+ error = isSuccess.error;
+ isSuccess = !error;
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if ( !statusText || status ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ }
+ }
+
+ // Attach deferreds
+ deferred.promise( jqXHR );
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+ jqXHR.complete = completeDeferred.add;
+
+ // Status-dependent callbacks
+ jqXHR.statusCode = function( map ) {
+ if ( map ) {
+ var tmp;
+ if ( state < 2 ) {
+ for ( tmp in map ) {
+ statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+ }
+ } else {
+ tmp = map[ jqXHR.status ];
+ jqXHR.always( tmp );
+ }
+ }
+ return this;
+ };
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( state === 2 ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Get ifModifiedKey before adding the anti-cache parameter
+ ifModifiedKey = s.url;
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+
+ var ts = jQuery.now(),
+ // try replacing _= if it is there
+ ret = s.url.replace( rts, "$1_=" + ts );
+
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ ifModifiedKey = ifModifiedKey || s.url;
+ if ( jQuery.lastModified[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+ }
+ if ( jQuery.etag[ ifModifiedKey ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+ }
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+
+ }
+
+ // aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout( function(){
+ jqXHR.abort( "timeout" );
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch (e) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes,
+ responseFields = s.responseFields;
+
+ // Fill responseXXX fields
+ for ( type in responseFields ) {
+ if ( type in responses ) {
+ jqXHR[ responseFields[type] ] = responses[ type ];
+ }
+ }
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+ var conv, conv2, current, tmp,
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice(),
+ prev = dataTypes[ 0 ],
+ converters = {},
+ i = 0;
+
+ // Apply the dataFilter if provided
+ if ( s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ // Convert to each sequential dataType, tolerating list modification
+ for ( ; (current = dataTypes[++i]); ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current !== "*" ) {
+
+ // Convert response if prev dataType is non-auto and differs from current
+ if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split(" ");
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.splice( i--, 0, current );
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s["throws"] ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+ }
+ }
+ }
+ }
+
+ // Update prev for next iteration
+ prev = current;
+ }
+ }
+
+ return { state: "success", data: response };
+}
+var oldCallbacks = [],
+ rquestion = /\?/,
+ rjsonp = /(=)\?(?=&|$)|\?\?/,
+ nonce = jQuery.now();
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ data = s.data,
+ url = s.url,
+ hasCallback = s.jsonp !== false,
+ replaceInUrl = hasCallback && rjsonp.test( url ),
+ replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
+ !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
+ rjsonp.test( data );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+ overwritten = window[ callbackName ];
+
+ // Insert callback into url or form data
+ if ( replaceInUrl ) {
+ s.url = url.replace( rjsonp, "$1" + callbackName );
+ } else if ( replaceInData ) {
+ s.data = data.replace( rjsonp, "$1" + callbackName );
+ } else if ( hasCallback ) {
+ s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function() {
+ // Restore preexisting value
+ window[ callbackName ] = overwritten;
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+});
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /javascript|ecmascript/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ s.global = false;
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+
+ var script,
+ head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+ return {
+
+ send: function( _, callback ) {
+
+ script = document.createElement( "script" );
+
+ script.async = "async";
+
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+ if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+
+ // Dereference the script
+ script = undefined;
+
+ // Callback if not abort
+ if ( !isAbort ) {
+ callback( 200, "success" );
+ }
+ }
+ };
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+ },
+
+ abort: function() {
+ if ( script ) {
+ script.onload( 0, 1 );
+ }
+ }
+ };
+ }
+});
+var xhrCallbacks,
+ // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject ? function() {
+ // Abort all pending requests
+ for ( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]( 0, 1 );
+ }
+ } : false,
+ xhrId = 0;
+
+// Functions to create xhrs
+function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch( e ) {}
+}
+
+function createActiveXHR() {
+ try {
+ return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+ } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function() {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+ jQuery.extend( jQuery.support, {
+ ajax: !!xhr,
+ cors: !!xhr && ( "withCredentials" in xhr )
+ });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+ jQuery.ajaxTransport(function( s ) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( !s.crossDomain || jQuery.support.cors ) {
+
+ var callback;
+
+ return {
+ send: function( headers, complete ) {
+
+ // Get a new xhr
+ var handle, i,
+ xhr = s.xhr();
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open( s.type, s.url, s.async, s.username, s.password );
+ } else {
+ xhr.open( s.type, s.url, s.async );
+ }
+
+ // Apply custom fields if provided
+ if ( s.xhrFields ) {
+ for ( i in s.xhrFields ) {
+ xhr[ i ] = s.xhrFields[ i ];
+ }
+ }
+
+ // Override mime type if needed
+ if ( s.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( s.mimeType );
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+ headers[ "X-Requested-With" ] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ } catch( _ ) {}
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( ( s.hasContent && s.data ) || null );
+
+ // Listener
+ callback = function( _, isAbort ) {
+
+ var status,
+ statusText,
+ responseHeaders,
+ responses,
+ xml;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occurred
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+ try {
+
+ // Was never called and is aborted or complete
+ if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if ( handle ) {
+ xhr.onreadystatechange = jQuery.noop;
+ if ( xhrOnUnloadAbort ) {
+ delete xhrCallbacks[ handle ];
+ }
+ }
+
+ // If it's an abort
+ if ( isAbort ) {
+ // Abort it manually if needed
+ if ( xhr.readyState !== 4 ) {
+ xhr.abort();
+ }
+ } else {
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+ responses = {};
+ xml = xhr.responseXML;
+
+ // Construct response list
+ if ( xml && xml.documentElement /* #4958 */ ) {
+ responses.xml = xml;
+ }
+
+ // When requesting binary data, IE6-9 will throw an exception
+ // on any attempt to access responseText (#11426)
+ try {
+ responses.text = xhr.responseText;
+ } catch( e ) {
+ }
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch( e ) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if ( !status && s.isLocal && !s.crossDomain ) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if ( status === 1223 ) {
+ status = 204;
+ }
+ }
+ }
+ } catch( firefoxAccessException ) {
+ if ( !isAbort ) {
+ complete( -1, firefoxAccessException );
+ }
+ }
+
+ // Call complete if needed
+ if ( responses ) {
+ complete( status, statusText, responses, responseHeaders );
+ }
+ };
+
+ if ( !s.async ) {
+ // if we're in sync mode we fire the callback
+ callback();
+ } else if ( xhr.readyState === 4 ) {
+ // (IE6 & IE7) if it's in cache and has been
+ // retrieved directly we need to fire the callback
+ setTimeout( callback, 0 );
+ } else {
+ handle = ++xhrId;
+ if ( xhrOnUnloadAbort ) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if ( !xhrCallbacks ) {
+ xhrCallbacks = {};
+ jQuery( window ).unload( xhrOnUnloadAbort );
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[ handle ] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback(0,1);
+ }
+ }
+ };
+ }
+ });
+}
+var fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+ rrun = /queueHooks$/,
+ animationPrefilters = [ defaultPrefilter ],
+ tweeners = {
+ "*": [function( prop, value ) {
+ var end, unit,
+ tween = this.createTween( prop, value ),
+ parts = rfxnum.exec( value ),
+ target = tween.cur(),
+ start = +target || 0,
+ scale = 1,
+ maxIterations = 20;
+
+ if ( parts ) {
+ end = +parts[2];
+ unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+ // We need to compute starting value
+ if ( unit !== "px" && start ) {
+ // Iteratively approximate from a nonzero starting point
+ // Prefer the current property, because this process will be trivial if it uses the same units
+ // Fallback to end or a simple constant
+ start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*
+ // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style( tween.elem, prop, start + unit );
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+ }
+
+ tween.unit = unit;
+ tween.start = start;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+ }
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout(function() {
+ fxNow = undefined;
+ }, 0 );
+ return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+ jQuery.each( props, function( prop, value ) {
+ var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( collection[ index ].call( animation, prop, value ) ) {
+
+ // we're done with this property
+ return;
+ }
+ }
+ });
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ index = 0,
+ tweenerIndex = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+ // don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function() {
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+ // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+ if ( percent < 1 && length ) {
+ return remaining;
+ } else {
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, { specialEasing: {} }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end, easing ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+ // if we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // resolve when we played the last frame
+ // otherwise, reject
+ if ( gotoEnd ) {
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length ; index++ ) {
+ result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ return result;
+ }
+ }
+
+ createTweens( animation, props );
+
+ if ( jQuery.isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ anim: animation,
+ queue: animation.opts.queue,
+ elem: elem
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = jQuery.camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( jQuery.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // not quite $.extend, this wont overwrite keys already present.
+ // also - reusing 'index' from above because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweener: function( props, callback ) {
+ if ( jQuery.isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length ; index++ ) {
+ prop = props[ index ];
+ tweeners[ prop ] = tweeners[ prop ] || [];
+ tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ animationPrefilters.unshift( callback );
+ } else {
+ animationPrefilters.push( callback );
+ }
+ }
+});
+
+function defaultPrefilter( elem, props, opts ) {
+ var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
+ anim = this,
+ style = elem.style,
+ orig = {},
+ handled = [],
+ hidden = elem.nodeType && isHidden( elem );
+
+ // handle queue: false promises
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function() {
+ // doing this makes sure that the complete handler will be called
+ // before this completes
+ anim.always(function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // height/width overflow pass
+ if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ if ( jQuery.css( elem, "display" ) === "inline" &&
+ jQuery.css( elem, "float" ) === "none" ) {
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+ style.display = "inline-block";
+
+ } else {
+ style.zoom = 1;
+ }
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ if ( !jQuery.support.shrinkWrapBlocks ) {
+ anim.done(function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ });
+ }
+ }
+
+
+ // show/hide pass
+ for ( index in props ) {
+ value = props[ index ];
+ if ( rfxtypes.exec( value ) ) {
+ delete props[ index ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+ continue;
+ }
+ handled.push( index );
+ }
+ }
+
+ length = handled.length;
+ if ( length ) {
+ dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+
+ // store state if its toggle - enables .stop().toggle() to "reverse"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+ if ( hidden ) {
+ jQuery( elem ).show();
+ } else {
+ anim.done(function() {
+ jQuery( elem ).hide();
+ });
+ }
+ anim.done(function() {
+ var prop;
+ jQuery.removeData( elem, "fxshow", true );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ });
+ for ( index = 0 ; index < length ; index++ ) {
+ prop = handled[ index ];
+ tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+ orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
+
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = tween.start;
+ if ( hidden ) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+ }
+}
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ if ( tween.elem[ tween.prop ] != null &&
+ (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // passing any value as a 4th parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails
+ // so, simple values such as "10px" are parsed to Float.
+ // complex values such as "rotate(1rad)" are returned as is.
+ result = jQuery.css( tween.elem, tween.prop, false, "" );
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+ // use step hook for back compat - use cssHook if its there - use .style if its
+ // available and use plain properties where available
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ||
+ // special check for .toggle( handler, handler, ... )
+ ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+});
+
+jQuery.fn.extend({
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // show any hidden elements after setting opacity to 0
+ return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+ // animate to the value specified
+ .end().animate({ opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations resolve immediately
+ if ( empty ) {
+ anim.stop( true );
+ }
+ };
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each(function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = jQuery._data( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ }
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ attrs = { height: type },
+ i = 0;
+
+ // if we include width, step value is 1 to do all cssExpand values,
+ // if we don't include width, step value is 2 to skip over Left and Right
+ includeWidth = includeWidth? 1 : 0;
+ for( ; i < 4 ; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p*Math.PI ) / 2;
+ }
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ fxNow = jQuery.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+ // Checks the timer has not already been removed
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.stop = function() {
+ clearInterval( timerId );
+ timerId = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+var rroot = /^(?:body|html)$/i;
+
+jQuery.fn.offset = function( options ) {
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
+ box = { top: 0, left: 0 },
+ elem = this[ 0 ],
+ doc = elem && elem.ownerDocument;
+
+ if ( !doc ) {
+ return;
+ }
+
+ if ( (body = doc.body) === elem ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if ( !jQuery.contains( docElem, elem ) ) {
+ return box;
+ }
+
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ clientTop = docElem.clientTop || body.clientTop || 0;
+ clientLeft = docElem.clientLeft || body.clientLeft || 0;
+ scrollTop = win.pageYOffset || docElem.scrollTop;
+ scrollLeft = win.pageXOffset || docElem.scrollLeft;
+ return {
+ top: box.top + scrollTop - clientTop,
+ left: box.left + scrollLeft - clientLeft
+ };
+};
+
+jQuery.offset = {
+
+ bodyOffset: function( body ) {
+ var top = body.offsetTop,
+ left = body.offsetLeft;
+
+ if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+ left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+ }
+
+ return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+
+ position: function() {
+ if ( !this[0] ) {
+ return;
+ }
+
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+ offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+ parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || document.body;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+ var top = /Y/.test( prop );
+
+ jQuery.fn[ method ] = function( val ) {
+ return jQuery.access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? (prop in win) ? win[ prop ] :
+ win.document.documentElement[ method ] :
+ elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : jQuery( win ).scrollLeft(),
+ top ? val : jQuery( win ).scrollTop()
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+ // margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return jQuery.access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( jQuery.isWindow( elem ) ) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+ // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, value, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable, null );
+ };
+ });
+});
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+// Do this after creating the global so that if an AMD module wants to call
+// noConflict to hide this version of jQuery, it will work.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+ define( "jquery", [], function () { return jQuery; } );
+}
+
+})( window );
diff --git a/exampleData/ruleSets/language-processing/natural/libpeerconnection.log b/exampleData/ruleSets/language-processing/natural/libpeerconnection.log
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/libpeerconnection.log
diff --git a/exampleData/ruleSets/language-processing/natural/nattest1-gen.js b/exampleData/ruleSets/language-processing/natural/nattest1-gen.js
new file mode 100644
index 0000000..35e522b
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/nattest1-gen.js
@@ -0,0 +1,17749 @@
+;(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
+var natural = require('natural');
+
+stemmer = natural.PorterStemmer;
+tokenizer = new natural.TreebankWordTokenizer();
+
+var commonWord = function(word) {
+ return _.contains(words, word);
+};
+
+
+
+var isPunctuation = function(str) {
+ return _.contains(['&', '%', '(', ')', ';', ':', '.', ',', '"', "'", '`', '!', '?' ], str);
+};
+
+var mergeFn = function(obj, tok) {
+ if (commonWord(tok) || isPunctuation(tok) || _.isNumber(tok)) {
+ obj.append(tok + ' ');
+ } else {
+ obj.append("<span style='background-color: red'>"+tok+"</span> ");
+ }
+ return obj;
+};
+
+markWords = function(obj) {
+ var toks = tokenizer.tokenize(obj.text());
+ var rawObj = $('<p></p>', {id: 'text'});
+ var newObj = _.reduce(toks, mergeFn , rawObj);
+
+ obj.replaceWith(newObj);
+};
+
+},{"natural":2}],2:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+exports.SoundEx = require('./phonetics/soundex');
+exports.Metaphone = require('./phonetics/metaphone');
+exports.DoubleMetaphone = require('./phonetics/double_metaphone');
+exports.SoundExDM = require('./phonetics/dm_soundex');
+exports.PorterStemmer = require('./stemmers/porter_stemmer');
+exports.PorterStemmerFa = require('./stemmers/porter_stemmer_fa');
+exports.PorterStemmerRu = require('./stemmers/porter_stemmer_ru');
+exports.PorterStemmerEs = require('./stemmers/porter_stemmer_es');
+exports.PorterStemmerIt = require('./stemmers/porter_stemmer_it');
+exports.LancasterStemmer = require('./stemmers/lancaster_stemmer');
+exports.StemmerJa = require('./stemmers/stemmer_ja');
+exports.AggressiveTokenizerFa = require('./tokenizers/aggressive_tokenizer_fa');
+exports.AggressiveTokenizerRu = require('./tokenizers/aggressive_tokenizer_ru');
+exports.AggressiveTokenizerEs = require('./tokenizers/aggressive_tokenizer_es');
+exports.AggressiveTokenizerIt = require('./tokenizers/aggressive_tokenizer_it');
+exports.AggressiveTokenizer = require('./tokenizers/aggressive_tokenizer');
+exports.RegexpTokenizer = require('./tokenizers/regexp_tokenizer').RegexpTokenizer;
+exports.WordTokenizer = require('./tokenizers/regexp_tokenizer').WordTokenizer;
+exports.WordPunctTokenizer = require('./tokenizers/regexp_tokenizer').WordPunctTokenizer;
+exports.TreebankWordTokenizer = require('./tokenizers/treebank_word_tokenizer');
+exports.TokenizerJa = require('./tokenizers/tokenizer_ja');
+exports.BayesClassifier = require('./classifiers/bayes_classifier');
+exports.LogisticRegressionClassifier = require('./classifiers/logistic_regression_classifier');
+exports.NounInflector = require('./inflectors/noun_inflector');
+exports.NounInflectorFr = require('./inflectors/fr/noun_inflector');
+exports.NounInflectorJa = require('./inflectors/ja/noun_inflector');
+exports.PresentVerbInflector = require('./inflectors/present_verb_inflector');
+exports.CountInflector = require('./inflectors/count_inflector');
+exports.WordNet = require('./wordnet/wordnet');
+exports.TfIdf = require('./tfidf/tfidf');
+exports.SentenceAnalyzer = require('./analyzers/sentence_analyzer');
+exports.stopwords = require('./util/stopwords').words;
+exports.NGrams = require('./ngrams/ngrams');
+exports.JaroWinklerDistance = require('./distance/jaro-winkler_distance');
+exports.LevenshteinDistance = require('./distance/levenshtein_distance');
+exports.DiceCoefficient = require('./distance/dice_coefficient');
+exports.normalize_ja = require('./normalizers/normalizer_ja').normalize_ja;
+exports.removeDiacritics = require('./normalizers/remove_diacritics');
+exports.transliterate_ja = require('./transliterators/ja');
+
+},{"./phonetics/soundex":3,"./phonetics/metaphone":4,"./phonetics/double_metaphone":5,"./phonetics/dm_soundex":6,"./stemmers/porter_stemmer":7,"./stemmers/porter_stemmer_fa":8,"./stemmers/porter_stemmer_ru":9,"./stemmers/porter_stemmer_es":10,"./stemmers/porter_stemmer_it":11,"./stemmers/lancaster_stemmer":12,"./stemmers/stemmer_ja":13,"./tokenizers/aggressive_tokenizer_fa":14,"./tokenizers/aggressive_tokenizer_ru":15,"./tokenizers/aggressive_tokenizer_es":16,"./tokenizers/aggressive_tokenizer_it":17,"./tokenizers/aggressive_tokenizer":18,"./tokenizers/regexp_tokenizer":19,"./tokenizers/treebank_word_tokenizer":20,"./tokenizers/tokenizer_ja":21,"./classifiers/bayes_classifier":22,"./classifiers/logistic_regression_classifier":23,"./inflectors/noun_inflector":24,"./inflectors/fr/noun_inflector":25,"./inflectors/ja/noun_inflector":26,"./inflectors/present_verb_inflector":27,"./inflectors/count_inflector":28,"./wordnet/wordnet":29,"./tfidf/tfidf":30,"./analyzers/sentence_analyzer":31,"./util/stopwords":32,"./ngrams/ngrams":33,"./distance/jaro-winkler_distance":34,"./distance/levenshtein_distance":35,"./distance/dice_coefficient":36,"./normalizers/normalizer_ja":37,"./normalizers/remove_diacritics":38,"./transliterators/ja":39}],28:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+function nthForm(i) {
+ var teenth = (i % 100);
+
+ if(teenth > 10 && teenth < 14)
+ return 'th';
+ else {
+ switch(i % 10) {
+ case 1:
+ return 'st';
+ break;
+ case 2:
+ return 'nd';
+ break;
+ case 3:
+ return 'rd';
+ break;
+ default:
+ return 'th';
+ }
+ }
+}
+
+function nth(i) {
+ return i.toString() + nthForm(i);
+}
+
+var CountInflector = function() {
+};
+
+CountInflector.nth = nth;
+
+module.exports = CountInflector;
+
+},{}],32:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'about', 'after', 'all', 'also', 'am', 'an', 'and', 'another', 'any', 'are', 'as', 'at', 'be',
+ 'because', 'been', 'before', 'being', 'between', 'both', 'but', 'by', 'came', 'can',
+ 'come', 'could', 'did', 'do', 'each', 'for', 'from', 'get', 'got', 'has', 'had',
+ 'he', 'have', 'her', 'here', 'him', 'himself', 'his', 'how', 'if', 'in', 'into',
+ 'is', 'it', 'like', 'make', 'many', 'me', 'might', 'more', 'most', 'much', 'must',
+ 'my', 'never', 'now', 'of', 'on', 'only', 'or', 'other', 'our', 'out', 'over',
+ 'said', 'same', 'see', 'should', 'since', 'some', 'still', 'such', 'take', 'than',
+ 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'those',
+ 'through', 'to', 'too', 'under', 'up', 'very', 'was', 'way', 'we', 'well', 'were',
+ 'what', 'where', 'which', 'while', 'who', 'with', 'would', 'you', 'your',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '$', '1',
+ '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],34:[function(require,module,exports){
+/*
+Copyright (c) 2012, Adam Phillabaum, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Unless otherwise stated by a specific section of code
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// Computes the Jaro distance between two string -- intrepreted from:
+// http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
+// s1 is the first string to compare
+// s2 is the second string to compare
+function distance(s1, s2) {
+ if (typeof(s1) != "string" || typeof(s2) != "string") return 0;
+ if (s1.length == 0 || s2.length == 0)
+ return 0;
+ s1 = s1.toLowerCase(), s2 = s2.toLowerCase();
+ var matchWindow = (Math.floor(Math.max(s1.length, s2.length) / 2.0)) - 1;
+ var matches1 = new Array(s1.length);
+ var matches2 = new Array(s2.length);
+ var m = 0; // number of matches
+ var t = 0; // number of transpositions
+
+ //debug helpers
+ //console.log("s1: " + s1 + "; s2: " + s2);
+ //console.log(" - matchWindow: " + matchWindow);
+
+ // find matches
+ for (var i = 0; i < s1.length; i++) {
+ var matched = false;
+
+ // check for an exact match
+ if (s1[i] == s2[i]) {
+ matches1[i] = matches2[i] = matched = true;
+ m++
+ }
+
+ // check the "match window"
+ else {
+ // this for loop is a little brutal
+ for (k = (i <= matchWindow) ? 0 : i - matchWindow;
+ (k <= i + matchWindow) && k < s2.length && !matched;
+ k++) {
+ if (s1[i] == s2[k]) {
+ if(!matches1[i] && !matches2[k]) {
+ m++;
+ }
+
+ matches1[i] = matches2[k] = matched = true;
+ }
+ }
+ }
+ }
+
+ if(m == 0)
+ return 0.0;
+
+ // count transpositions
+ var k = 0;
+
+ for(var i = 0; i < s1.length; i++) {
+ if(matches1[k]) {
+ while(!matches2[k] && k < matches2.length)
+ k++;
+ if(s1[i] != s2[k] && k < matches2.length) {
+ t++;
+ }
+
+ k++;
+ }
+ }
+
+ //debug helpers:
+ //console.log(" - matches: " + m);
+ //console.log(" - transpositions: " + t);
+ t = t / 2.0;
+ return (m / s1.length + m / s2.length + (m - t) / m) / 3;
+}
+
+// Computes the Winkler distance between two string -- intrepreted from:
+// http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
+// s1 is the first string to compare
+// s2 is the second string to compare
+// dj is the Jaro Distance (if you've already computed it), leave blank and the method handles it
+function JaroWinklerDistance(s1, s2, dj) {
+ var jaro;
+ (typeof(dj) == 'undefined')? jaro = distance(s1,s2) : jaro = dj;
+ var p = 0.1; //
+ var l = 0 // length of the matching prefix
+ while(s1[l] == s2[l] && l < 4)
+ l++;
+
+ return jaro + l * p * (1 - jaro);
+}
+module.exports = JaroWinklerDistance;
+
+},{}],35:[function(require,module,exports){
+/*
+Copyright (c) 2012, Sid Nallu, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/*
+ * contribution by sidred123
+ */
+
+/*
+ * Compute the Levenshtein distance between two strings.
+ * Algorithm based from Speech and Language Processing - Daniel Jurafsky and James H. Martin.
+ */
+
+function LevenshteinDistance (source, target, options) {
+ options = options || {};
+ options.insertion_cost = options.insertion_cost || 1;
+ options.deletion_cost = options.deletion_cost || 1;
+ options.substitution_cost = options.substitution_cost || 1;
+
+ var sourceLength = source.length;
+ var targetLength = target.length;
+ var distanceMatrix = [[0]];
+
+ for (var row = 1; row <= sourceLength; row++) {
+ distanceMatrix[row] = [];
+ distanceMatrix[row][0] = distanceMatrix[row-1][0] + options.deletion_cost;
+ }
+
+ for (var column = 1; column <= targetLength; column++) {
+ distanceMatrix[0][column] = distanceMatrix[0][column-1] + options.insertion_cost;
+ }
+
+ for (var row = 1; row <= sourceLength; row++) {
+ for (var column = 1; column <= targetLength; column++) {
+ var costToInsert = distanceMatrix[row][column-1] + options.insertion_cost;
+ var costToDelete = distanceMatrix[row-1][column] + options.deletion_cost;
+
+ var sourceElement = source[row-1];
+ var targetElement = target[column-1];
+ var costToSubstitute = distanceMatrix[row-1][column-1];
+ if (sourceElement !== targetElement) {
+ costToSubstitute = costToSubstitute + options.substitution_cost;
+ }
+ distanceMatrix[row][column] = Math.min(costToInsert, costToDelete, costToSubstitute);
+ }
+ }
+ return distanceMatrix[sourceLength][targetLength];
+}
+
+module.exports = LevenshteinDistance;
+
+},{}],36:[function(require,module,exports){
+/*
+Copyright (c) 2011, John Crepezzi, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// Get all of the pairs of letters for a string
+var letterPairs = function (str) {
+ var numPairs = str.length - 1;
+ var pairs = new Array(numPairs);
+ for (var i = 0; i < numPairs; i++) {
+ pairs[i] = str.substring(i, i + 2);
+ }
+ return pairs;
+};
+
+// Get all of the pairs in all of the words for a string
+var wordLetterPairs = function (str) {
+ var allPairs = [], pairs;
+ var words = str.split(/\s+/);
+ for (var i = 0; i < words.length; i++) {
+ pairs = letterPairs(words[i]);
+ allPairs.push.apply(allPairs, pairs);
+ }
+ return allPairs;
+};
+
+// Perform some sanitization steps
+var sanitize = function (str) {
+ return str.toLowerCase().replace(/^\s+|\s+$/g, '');
+};
+
+// Compare two strings, and spit out a number from 0-1
+var compare = function (str1, str2) {
+ var pairs1 = wordLetterPairs(sanitize(str1));
+ var pairs2 = wordLetterPairs(sanitize(str2));
+ var intersection = 0, union = pairs1.length + pairs2.length;
+ var i, j, pair1, pair2;
+ for (i = 0; i < pairs1.length; i++) {
+ pair1 = pairs1[i];
+ for (j = 0; j < pairs2.length; j++) {
+ pair2 = pairs2[j];
+ if (pair1 == pair2) {
+ intersection ++;
+ delete pairs2[j];
+ break;
+ }
+ }
+ }
+ return 2 * intersection / union;
+};
+
+module.exports = compare;
+
+},{}],38:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Alexy Maslennikov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * Script to remove diacritics. Original source was taken from
+ * http://lehelk.com/2011/05/06/script-to-remove-diacritics/
+ */
+var diacriticsRemovalMap = [
+ {'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
+ {'base':'AA','letters':/[\uA732]/g},
+ {'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
+ {'base':'AO','letters':/[\uA734]/g},
+ {'base':'AU','letters':/[\uA736]/g},
+ {'base':'AV','letters':/[\uA738\uA73A]/g},
+ {'base':'AY','letters':/[\uA73C]/g},
+ {'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
+ {'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
+ {'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
+ {'base':'DZ','letters':/[\u01F1\u01C4]/g},
+ {'base':'Dz','letters':/[\u01F2\u01C5]/g},
+ {'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
+ {'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
+ {'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
+ {'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
+ {'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
+ {'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
+ {'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
+ {'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
+ {'base':'LJ','letters':/[\u01C7]/g},
+ {'base':'Lj','letters':/[\u01C8]/g},
+ {'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
+ {'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
+ {'base':'NJ','letters':/[\u01CA]/g},
+ {'base':'Nj','letters':/[\u01CB]/g},
+ {'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
+ {'base':'OI','letters':/[\u01A2]/g},
+ {'base':'OO','letters':/[\uA74E]/g},
+ {'base':'OU','letters':/[\u0222]/g},
+ {'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
+ {'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
+ {'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
+ {'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
+ {'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
+ {'base':'TZ','letters':/[\uA728]/g},
+ {'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
+ {'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
+ {'base':'VY','letters':/[\uA760]/g},
+ {'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
+ {'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
+ {'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
+ {'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
+ {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
+ {'base':'aa','letters':/[\uA733]/g},
+ {'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
+ {'base':'ao','letters':/[\uA735]/g},
+ {'base':'au','letters':/[\uA737]/g},
+ {'base':'av','letters':/[\uA739\uA73B]/g},
+ {'base':'ay','letters':/[\uA73D]/g},
+ {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
+ {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
+ {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
+ {'base':'dz','letters':/[\u01F3\u01C6]/g},
+ {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
+ {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
+ {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
+ {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
+ {'base':'hv','letters':/[\u0195]/g},
+ {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
+ {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
+ {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
+ {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
+ {'base':'lj','letters':/[\u01C9]/g},
+ {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
+ {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
+ {'base':'nj','letters':/[\u01CC]/g},
+ {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
+ {'base':'oi','letters':/[\u01A3]/g},
+ {'base':'ou','letters':/[\u0223]/g},
+ {'base':'oo','letters':/[\uA74F]/g},
+ {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
+ {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
+ {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
+ {'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
+ {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
+ {'base':'tz','letters':/[\uA729]/g},
+ {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
+ {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
+ {'base':'vy','letters':/[\uA761]/g},
+ {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
+ {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
+ {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
+ {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
+];
+
+
+module.exports = function(str) {
+ var rules = diacriticsRemovalMap;
+ for (var i = 0; i < rules.length; i++) {
+ str = str.replace(rules[i].letters, rules[i].base);
+ }
+ return str;
+};
+
+},{}],40:[function(require,module,exports){
+var events = require('events');
+
+exports.isArray = isArray;
+exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'};
+exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'};
+
+
+exports.print = function () {};
+exports.puts = function () {};
+exports.debug = function() {};
+
+exports.inspect = function(obj, showHidden, depth, colors) {
+ var seen = [];
+
+ var stylize = function(str, styleType) {
+ // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+ var styles =
+ { 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39] };
+
+ var style =
+ { 'special': 'cyan',
+ 'number': 'blue',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red' }[styleType];
+
+ if (style) {
+ return '\033[' + styles[style][0] + 'm' + str +
+ '\033[' + styles[style][1] + 'm';
+ } else {
+ return str;
+ }
+ };
+ if (! colors) {
+ stylize = function(str, styleType) { return str; };
+ }
+
+ function format(value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value !== exports &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ return value.inspect(recurseTimes);
+ }
+
+ // Primitive types cannot have properties
+ switch (typeof value) {
+ case 'undefined':
+ return stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return stylize(simple, 'string');
+
+ case 'number':
+ return stylize('' + value, 'number');
+
+ case 'boolean':
+ return stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return stylize('null', 'null');
+ }
+
+ // Look up the keys of the object.
+ var visible_keys = Object_keys(value);
+ var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys;
+
+ // Functions without properties can be shortcutted.
+ if (typeof value === 'function' && keys.length === 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ var name = value.name ? ': ' + value.name : '';
+ return stylize('[Function' + name + ']', 'special');
+ }
+ }
+
+ // Dates without properties can be shortcutted
+ if (isDate(value) && keys.length === 0) {
+ return stylize(value.toUTCString(), 'date');
+ }
+
+ var base, type, braces;
+ // Determine the object type
+ if (isArray(value)) {
+ type = 'Array';
+ braces = ['[', ']'];
+ } else {
+ type = 'Object';
+ braces = ['{', '}'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var n = value.name ? ': ' + value.name : '';
+ base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
+ } else {
+ base = '';
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + value.toUTCString();
+ }
+
+ if (keys.length === 0) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ return stylize('[Object]', 'special');
+ }
+ }
+
+ seen.push(value);
+
+ var output = keys.map(function(key) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Getter/Setter]', 'special');
+ } else {
+ str = stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visible_keys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = format(value[key]);
+ } else {
+ str = format(value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (isArray(value)) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (type === 'Array' && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+ });
+
+ seen.pop();
+
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 50) {
+ output = braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+
+ } else {
+ output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+ }
+
+ return output;
+ }
+ return format(obj, (typeof depth === 'undefined' ? 2 : depth));
+};
+
+
+function isArray(ar) {
+ return ar instanceof Array ||
+ Array.isArray(ar) ||
+ (ar && ar !== Object.prototype && isArray(ar.__proto__));
+}
+
+
+function isRegExp(re) {
+ return re instanceof RegExp ||
+ (typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]');
+}
+
+
+function isDate(d) {
+ if (d instanceof Date) return true;
+ if (typeof d !== 'object') return false;
+ var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype);
+ var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__);
+ return JSON.stringify(proto) === JSON.stringify(properties);
+}
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+exports.log = function (msg) {};
+
+exports.pump = null;
+
+var Object_keys = Object.keys || function (obj) {
+ var res = [];
+ for (var key in obj) res.push(key);
+ return res;
+};
+
+var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) {
+ var res = [];
+ for (var key in obj) {
+ if (Object.hasOwnProperty.call(obj, key)) res.push(key);
+ }
+ return res;
+};
+
+var Object_create = Object.create || function (prototype, properties) {
+ // from es5-shim
+ var object;
+ if (prototype === null) {
+ object = { '__proto__' : null };
+ }
+ else {
+ if (typeof prototype !== 'object') {
+ throw new TypeError(
+ 'typeof prototype[' + (typeof prototype) + '] != \'object\''
+ );
+ }
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ object.__proto__ = prototype;
+ }
+ if (typeof properties !== 'undefined' && Object.defineProperties) {
+ Object.defineProperties(object, properties);
+ }
+ return object;
+};
+
+exports.inherits = function(ctor, superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object_create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+};
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (typeof f !== 'string') {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(exports.inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j': return JSON.stringify(args[i++]);
+ default:
+ return x;
+ }
+ });
+ for(var x = args[i]; i < len; x = args[++i]){
+ if (x === null || typeof x !== 'object') {
+ str += ' ' + x;
+ } else {
+ str += ' ' + exports.inspect(x);
+ }
+ }
+ return str;
+};
+
+},{"events":41}],42:[function(require,module,exports){
+// nothing to see here... no file methods for the browser
+
+},{}],43:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+
+process.nextTick = (function () {
+ var canSetImmediate = typeof window !== 'undefined'
+ && window.setImmediate;
+ var canPost = typeof window !== 'undefined'
+ && window.postMessage && window.addEventListener
+ ;
+
+ if (canSetImmediate) {
+ return function (f) { return window.setImmediate(f) };
+ }
+
+ if (canPost) {
+ var queue = [];
+ window.addEventListener('message', function (ev) {
+ if (ev.source === window && ev.data === 'process-tick') {
+ ev.stopPropagation();
+ if (queue.length > 0) {
+ var fn = queue.shift();
+ fn();
+ }
+ }
+ }, true);
+
+ return function nextTick(fn) {
+ queue.push(fn);
+ window.postMessage('process-tick', '*');
+ };
+ }
+
+ return function nextTick(fn) {
+ setTimeout(fn, 0);
+ };
+})();
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+}
+
+// TODO(shtylman)
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+
+},{}],41:[function(require,module,exports){
+(function(process){if (!process.EventEmitter) process.EventEmitter = function () {};
+
+var EventEmitter = exports.EventEmitter = process.EventEmitter;
+var isArray = typeof Array.isArray === 'function'
+ ? Array.isArray
+ : function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]'
+ }
+;
+function indexOf (xs, x) {
+ if (xs.indexOf) return xs.indexOf(x);
+ for (var i = 0; i < xs.length; i++) {
+ if (x === xs[i]) return i;
+ }
+ return -1;
+}
+
+// By default EventEmitters will print a warning if more than
+// 10 listeners are added to it. This is a useful default which
+// helps finding memory leaks.
+//
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+var defaultMaxListeners = 10;
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!this._events) this._events = {};
+ this._events.maxListeners = n;
+};
+
+
+EventEmitter.prototype.emit = function(type) {
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events || !this._events.error ||
+ (isArray(this._events.error) && !this._events.error.length))
+ {
+ if (arguments[1] instanceof Error) {
+ throw arguments[1]; // Unhandled 'error' event
+ } else {
+ throw new Error("Uncaught, unspecified 'error' event.");
+ }
+ return false;
+ }
+ }
+
+ if (!this._events) return false;
+ var handler = this._events[type];
+ if (!handler) return false;
+
+ if (typeof handler == 'function') {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ var args = Array.prototype.slice.call(arguments, 1);
+ handler.apply(this, args);
+ }
+ return true;
+
+ } else if (isArray(handler)) {
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ var listeners = handler.slice();
+ for (var i = 0, l = listeners.length; i < l; i++) {
+ listeners[i].apply(this, args);
+ }
+ return true;
+
+ } else {
+ return false;
+ }
+};
+
+// EventEmitter is defined in src/node_events.cc
+// EventEmitter.prototype.emit() is also defined there.
+EventEmitter.prototype.addListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('addListener only takes instances of Function');
+ }
+
+ if (!this._events) this._events = {};
+
+ // To avoid recursion in the case that type == "newListeners"! Before
+ // adding it to the listeners, first emit "newListeners".
+ this.emit('newListener', type, listener);
+
+ if (!this._events[type]) {
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ } else if (isArray(this._events[type])) {
+
+ // Check for listener leak
+ if (!this._events[type].warned) {
+ var m;
+ if (this._events.maxListeners !== undefined) {
+ m = this._events.maxListeners;
+ } else {
+ m = defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ console.trace();
+ }
+ }
+
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ } else {
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ var self = this;
+ self.on(type, function g() {
+ self.removeListener(type, g);
+ listener.apply(this, arguments);
+ });
+
+ return this;
+};
+
+EventEmitter.prototype.removeListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('removeListener only takes instances of Function');
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (!this._events || !this._events[type]) return this;
+
+ var list = this._events[type];
+
+ if (isArray(list)) {
+ var i = indexOf(list, listener);
+ if (i < 0) return this;
+ list.splice(i, 1);
+ if (list.length == 0)
+ delete this._events[type];
+ } else if (this._events[type] === listener) {
+ delete this._events[type];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ if (arguments.length === 0) {
+ this._events = {};
+ return this;
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (type && this._events && this._events[type]) this._events[type] = null;
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ if (!this._events) this._events = {};
+ if (!this._events[type]) this._events[type] = [];
+ if (!isArray(this._events[type])) {
+ this._events[type] = [this._events[type]];
+ }
+ return this._events[type];
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":43}],3:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+function transformLipps(token) {
+ return token.replace(/[bfpv]/g, '1');
+}
+
+function transformThroats(token) {
+ return token.replace(/[cgjkqsxz]/g, '2');
+}
+
+function transformToungue(token) {
+ return token.replace(/[dt]/g, '3');
+}
+
+function transformL(token) {
+ return token.replace(/l/g, '4');
+}
+
+function transformHum(token) {
+ return token.replace(/[mn]/g, '5');
+}
+
+function transformR(token) {
+ return token.replace(/r/g, '6');
+}
+
+function condense(token) {
+ return token.replace(/(\d)[hw]?\1+/g, '$1').replace(/[hw]/g, '');
+}
+
+function padRight0(token) {
+ if(token.length < 4)
+ return token + Array(4 - token.length).join('0');
+ else
+ return token;
+}
+
+var SoundEx = new Phonetic();
+module.exports = SoundEx;
+
+SoundEx.process = function(token, maxLength) {
+ token = token.toLowerCase();
+
+ return token.charAt(0).toUpperCase() + padRight0(condense(transformLipps(transformThroats(
+ transformToungue(transformL(transformHum(transformR(
+ token.substr(1, token.length - 1).replace(/[aeiouy]/g, '')))))))
+ )).substr(0, (maxLength && maxLength - 1) || 3);
+};
+
+// export for tests;
+SoundEx.transformLipps = transformLipps;
+SoundEx.transformThroats = transformThroats;
+SoundEx.transformToungue = transformToungue;
+SoundEx.transformL = transformL;
+SoundEx.transformHum = transformHum;
+SoundEx.transformR = transformR;
+SoundEx.condense = condense;
+SoundEx.padRight0 = padRight0;
+
+})()
+},{"./phonetic":44}],4:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+function dedup(token) {
+ return token.replace(/([^c])\1/g, '$1');
+}
+
+function dropInitialLetters(token) {
+ if(token.match(/^(kn|gn|pn|ae|wr)/))
+ return token.substr(1, token.length - 1);
+
+ return token;
+}
+
+function dropBafterMAtEnd(token) {
+ return token.replace(/mb$/, 'm');
+}
+
+function cTransform(token) {
+ token = token.replace(/([^s]|^)(c)(h)/g, '$1x$3').trim();
+ token = token.replace(/cia/g, 'xia');
+ token = token.replace(/c(i|e|y)/g, 's$1');
+ token = token.replace(/c/g, 'k');
+
+ return token;
+}
+
+function dTransform(token) {
+ token = token.replace(/d(ge|gy|gi)/g, 'j$1');
+ token = token.replace(/d/g, 't');
+
+ return token;
+}
+
+function dropG(token) {
+ token = token.replace(/gh(^$|[^aeiou])/g, 'h$1');
+ token = token.replace(/g(n|ned)$/g, '$1');
+
+ return token;
+}
+
+function transformG(token) {
+ token = token.replace(/([^g]|^)(g)(i|e|y)/g, '$1j$3');
+ token = token.replace(/gg/g, 'g');
+ token = token.replace(/g/g, 'k');
+
+ return token;
+}
+
+function dropH(token) {
+ return token.replace(/([aeiou])h([^aeiou])/g, '$1$2');
+}
+
+function transformCK(token) {
+ return token.replace(/ck/g, 'k');
+}
+function transformPH(token) {
+ return token.replace(/ph/g, 'f');
+}
+
+function transformQ(token) {
+ return token.replace(/q/g, 'k');
+}
+
+function transformS(token) {
+ return token.replace(/s(h|io|ia)/g, 'x$1');
+}
+
+function transformT(token) {
+ token = token.replace(/t(ia|io)/g, 'x$1');
+ token = token.replace(/th/, '0');
+
+ return token;
+}
+
+function dropT(token) {
+ return token.replace(/tch/g, 'ch');
+}
+
+function transformV(token) {
+ return token.replace(/v/g, 'f');
+}
+
+function transformWH(token) {
+ return token.replace(/^wh/, 'w');
+}
+
+function dropW(token) {
+ return token.replace(/w([^aeiou]|$)/g, '$1');
+}
+
+function transformX(token) {
+ token = token.replace(/^x/, 's');
+ token = token.replace(/x/g, 'ks');
+ return token;
+}
+
+function dropY(token) {
+ return token.replace(/y([^aeiou]|$)/g, '$1');
+}
+
+function transformZ(token) {
+ return token.replace(/z/, 's');
+}
+
+function dropVowels(token) {
+ return token.charAt(0) + token.substr(1, token.length).replace(/[aeiou]/g, '');
+}
+
+var Metaphone = new Phonetic();
+module.exports = Metaphone;
+
+Metaphone.process = function(token, maxLength) {
+ maxLength == maxLength || 32;
+ token = token.toLowerCase();
+ token = dedup(token);
+ token = dropInitialLetters(token);
+ token = dropBafterMAtEnd(token);
+ token = transformCK(token);
+ token = cTransform(token);
+ token = dTransform(token);
+ token = dropG(token);
+ token = transformG(token);
+ token = dropH(token);
+ token = transformPH(token);
+ token = transformQ(token);
+ token = transformS(token);
+ token = transformX(token);
+ token = transformT(token);
+ token = dropT(token);
+ token = transformV(token);
+ token = transformWH(token);
+ token = dropW(token);
+ token = dropY(token);
+ token = transformZ(token);
+ token = dropVowels(token);
+
+ token.toUpperCase();
+ if(token.length >= maxLength)
+ token = token.substring(0, maxLength);
+
+ return token.toUpperCase();
+};
+
+// expose functions for testing
+Metaphone.dedup = dedup;
+Metaphone.dropInitialLetters = dropInitialLetters;
+Metaphone.dropBafterMAtEnd = dropBafterMAtEnd;
+Metaphone.cTransform = cTransform;
+Metaphone.dTransform = dTransform;
+Metaphone.dropG = dropG;
+Metaphone.transformG = transformG;
+Metaphone.dropH = dropH;
+Metaphone.transformCK = transformCK;
+Metaphone.transformPH = transformPH;
+Metaphone.transformQ = transformQ;
+Metaphone.transformS = transformS;
+Metaphone.transformT = transformT;
+Metaphone.dropT = dropT;
+Metaphone.transformV = transformV;
+Metaphone.transformWH = transformWH;
+Metaphone.dropW = dropW;
+Metaphone.transformX = transformX;
+Metaphone.dropY = dropY;
+Metaphone.transformZ = transformZ;
+Metaphone.dropVowels = dropVowels;
+
+})()
+},{"./phonetic":44}],5:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+var DoubleMetaphone = new Phonetic();
+module.exports = DoubleMetaphone;
+
+function isVowel(c) {
+ return c && c.match(/[aeiouy]/i);
+}
+
+function truncate(string, length) {
+ if(string.length >= length)
+ string = string.substring(0, length);
+
+ return string;
+}
+
+function process(token, maxLength) {
+ token = token.toUpperCase();
+ var primary = '', secondary = '';
+ var pos = 0;
+ maxLength == maxLength || 32;
+
+ function subMatch(startOffset, stopOffset, terms) {
+ return subMatchAbsolute(pos + startOffset, pos + stopOffset, terms);
+ }
+
+ function subMatchAbsolute(startOffset, stopOffset, terms) {
+ return terms.indexOf(token.substring(startOffset, stopOffset)) > -1;
+ }
+
+ function addSecondary(primaryAppendage, secondaryAppendage) {
+ primary += primaryAppendage;
+ secondary += secondaryAppendage;
+ }
+
+ function add(primaryAppendage) {
+ addSecondary(primaryAppendage, primaryAppendage);
+ }
+
+ function addCompressedDouble(c, encoded) {
+ if(token[pos + 1] == c)
+ pos++;
+ add(encoded || c);
+ }
+
+ function handleC() {
+ if(pos > 1 && !isVowel(token[pos - 2])
+ && token[pos - 1] == 'A' && token[pos + 1] == 'H'
+ && (token[pos + 2] != 'I' && token[pos + 2] != 'I')
+ || subMatch(-2, 4, ['BACHER', 'MACHER'])) {
+ add('K');
+ pos++;
+ } else if(pos == 0 && token.substring(1, 6) == 'EASAR') {
+ add('S');
+ pos++;
+ } else if(token.substring(pos + 1, pos + 4) == 'HIA') {
+ add('K');
+ pos++;
+ } else if(token[pos + 1] == 'H') {
+ if(pos > 0 && token.substring(pos + 2, pos + 4) == 'AE') {
+ addSecondary('K', 'X');
+ pos++;
+ } else if(pos == 0
+ && (subMatch(1, 6, ['HARAC', 'HARIS'])
+ || subMatch(1, 3, ['HOR', 'HUM', 'HIA', 'HEM']))
+ && token.substring(pos + 1, pos + 5) != 'HORE') {
+ add('K');
+ pos++;
+ } else {
+ if((subMatchAbsolute(0, 3, ['VAN', 'VON']) || token.substring(0, 3) == 'SCH')
+ || subMatch(-2, 4, ['ORCHES', 'ARCHIT', 'ORCHID'])
+ || subMatch(2, 3, ['T', 'S'])
+ || ((subMatch(-1, 0, ['A', 'O', 'U', 'E']) || pos == 0)
+ && subMatch(2, 3, ['B', 'F', 'H', 'L', 'M', 'N', 'R', 'V', 'W']))) {
+ add('K');
+ } else if(pos > 0) {
+ if(token.substring(0, 2) == 'MC') {
+ add('K');
+ } else {
+ addSecondary('X', 'K');
+ }
+ } else {
+ add('X');
+ }
+
+ pos++;
+ }
+ } else if(token.substring(pos, pos + 2) == 'CZ'
+ && token.substring(pos - 2, pos + 1) != 'WICZ') {
+ addSecondary('S', 'X');
+ pos++;
+ } else if(token.substring(pos, pos + 3) == 'CIA') {
+ add('X');
+ pos += 2;
+ } else if(token[pos + 1] == 'C' && pos != 1 && token[0] != 'M') {
+ if(['I', 'E', 'H'].indexOf(token[pos + 2]) > -1
+ && token.substring(pos + 2, pos + 4) != 'HU') {
+ if(pos == 1 && token[pos - 1] == 'A'
+ || subMatch(-1, 4, ['UCCEE', 'UCCES'])) {
+ add('KS');
+ } else {
+ add('X');
+ }
+
+ pos +=2;
+ } else {
+ add('K');
+ pos++;
+ }
+ } else if(['K', 'G', 'Q'].indexOf(token[pos + 1]) > -1) {
+ add('K');
+ pos++;
+ } else if(['E', 'I', 'Y'].indexOf(token[pos + 1]) > -1) {
+ if(subMatch(1, 3, ['IA', 'IE', 'IO'])) {
+ addSecondary('S', 'X');
+ } else {
+ add('S');
+ }
+ pos++;
+ } else {
+ add('K');
+ if(token[pos + 1] == ' ' && ['C', 'Q', 'G'].indexOf(token[pos + 2])) {
+ pos += 2;
+ } else if(['C', 'K', 'Q'].indexOf(token[pos + 1]) > -1
+ && !subMatch(1, 3, ['CE', 'CI'])) {
+ pos++;
+ }
+ }
+ }
+
+ function handleD() {
+ if(token[pos + 1] == 'G') {
+ if(['I', 'E', 'Y'].indexOf(token[pos + 2]) > -1) {
+ add('J');
+ pos += 2;
+ } else {
+ add('TK');
+ pos++;
+ }
+ } else if(token[pos + 1] == 'T') {
+ add('T');
+ pos++;
+ } else
+ addCompressedDouble('D', 'T');
+ }
+
+ function handleG() {
+ if(token[pos + 1] == 'H') {
+ if(pos > 0 && !isVowel(token[pos - 1])) {
+ add('K');
+ pos++;
+ } else if(pos == 0) {
+ if(token[pos + 2] == 'I') {
+ add('J');
+ } else {
+ add('K');
+ }
+ pos++;
+ } else if(pos > 1
+ && (['B', 'H', 'D'].indexOf(token[pos - 2]) > -1
+ || ['B', 'H', 'D'].indexOf(token[pos - 3]) > -1
+ || ['B', 'H'].indexOf(token[pos - 4]) > -1)) {
+ pos++;
+ } else {
+ if(pos > 2
+ && token[pos - 1] == 'U'
+ && ['C', 'G', 'L', 'R', 'T'].indexOf(token[pos - 3]) > -1) {
+ add('F');
+ } else if(token[pos - 1] != 'I') {
+ add('K');
+ }
+
+ pos++;
+ }
+ } else if(token[pos + 1] == 'N') {
+ if(pos == 1 && startsWithVowel && !slavoGermanic) {
+ addSecondary('KN', 'N');
+ } else {
+ if(token.substring(pos + 2, pos + 4) != 'EY'
+ && (token[pos + 1] != 'Y'
+ && !slavoGermanic)) {
+ addSecondary('N', 'KN');
+ } else
+ add('KN');
+ }
+ pos++;
+ } else if(token.substring(pos + 1, pos + 3) == 'LI' && !slavoGermanic) {
+ addSecondary('KL', 'L');
+ pos++;
+ } else if(pos == 0 && (token[pos + 1] == 'Y'
+ || subMatch(1, 3, ['ES', 'EP', 'EB', 'EL', 'EY', 'IB', 'IL', 'IN', 'IE', 'EI', 'ER']))) {
+ addSecondary('K', 'J')
+ } else {
+ addCompressedDouble('G', 'K');
+ }
+ }
+
+ function handleH() {
+ // keep if starts a word or is surrounded by vowels
+ if((pos == 0 || isVowel(token[pos - 1])) && isVowel(token[pos + 1])) {
+ add('H');
+ pos++;
+ }
+ }
+
+ function handleJ() {
+ var jose = (token.substring(pos + 1, pos + 4) == 'OSE');
+
+ if(san || jose) {
+ if((pos == 0 && token[pos + 4] == ' ')
+ || san) {
+ add('H');
+ } else
+ add('J', 'H');
+ } else {
+ if(pos == 0/* && !jose*/) {
+ addSecondary('J', 'A');
+ } else if(isVowel(token[pos - 1]) && !slavoGermanic
+ && (token[pos + 1] == 'A' || token[pos + 1] == 'O')) {
+ addSecondary('J', 'H');
+ } else if(pos == token.length - 1) {
+ addSecondary('J', ' ');
+ } else
+ addCompressedDouble('J');
+ }
+ }
+
+ function handleL() {
+ if(token[pos + 1] == 'L') {
+ if(pos == token.length - 3 && (
+ subMatch(-1, 3, ['ILLO', 'ILLA', 'ALLE']) || (
+ token.substring(pos - 1, pos + 3) == 'ALLE' &&
+ (subMatch(-2, -1, ['AS', 'OS']) > -1 ||
+ ['A', 'O'].indexOf(token[token.length - 1]) > -1)))) {
+ addSecondary('L', '');
+ pos++;
+ return;
+ }
+ pos++;
+ }
+ add('L');
+ }
+
+ function handleM() {
+ addCompressedDouble('M');
+ if(token[pos - 1] == 'U' && token[pos + 1] == 'B' &&
+ ((pos == token.length - 2 || token.substring(pos + 2, pos + 4) == 'ER')))
+ pos++;
+ }
+
+ function handleP() {
+ if(token[pos + 1] == 'H') {
+ add('F');
+ pos++;
+ } else {
+ addCompressedDouble('P');
+
+ if(token[pos + 1] == 'B')
+ pos++;
+ }
+ }
+
+ function handleR() {
+ if(pos == token.length - 1 && !slavoGermanic
+ && token.substring(pos - 2, pos) == 'IE'
+ && !subMatch(-4, -3, ['ME', 'MA'])) {
+ addSecondary('', 'R');
+ } else
+ addCompressedDouble('R');
+ }
+
+ function handleS() {
+ if(pos == 0 && token.substring(0, 5) == 'SUGAR') {
+ addSecondary('X', 'S');
+ } else if(token[pos + 1] == 'H') {
+ if(subMatch(2, 5, ['EIM', 'OEK', 'OLM', 'OLZ'])) {
+ add('S');
+ } else {
+ add('X');
+ }
+ pos++;
+ } else if(subMatch(1, 3, ['IO', 'IA'])) {
+ if(slavoGermanic) {
+ add('S');
+ } else {
+ addSecondary('S', 'X');
+ }
+ pos++;
+ } else if((pos == 0 && ['M', 'N', 'L', 'W'].indexOf(token[pos + 1]) > -1)
+ || token[pos + 1] == 'Z') {
+ addSecondary('S', 'X');
+ if(token[pos + 1] == 'Z')
+ pos++;
+ } else if(token.substring(pos, pos + 2) == 'SC') {
+ if(token[pos + 2] == 'H') {
+ if(subMatch(3, 5, ['ER', 'EN'])) {
+ addSecondary('X', 'SK');
+ } else if(subMatch(3, 5, ['OO', 'UY', 'ED', 'EM'])) {
+ add('SK');
+ } else if(pos == 0 && !isVowel(token[3]) && token[3] != 'W') {
+ addSecondary('X', 'S');
+ } else {
+ add('X');
+ }
+ } else if(['I', 'E', 'Y'].indexOf(token[pos + 2]) > -1) {
+ add('S');
+ } else {
+ add('SK');
+ }
+
+ pos += 2;
+ } else if(pos == token.length - 1
+ && subMatch(-2, 0, ['AI', 'OI'])) {
+ addSecondary('', 'S');
+ } else if(token[pos + 1] != 'L' && (
+ token[pos - 1] != 'A' && token[pos - 1] != 'I')) {
+ addCompressedDouble('S');
+ if(token[pos + 1] == 'Z')
+ pos++;
+ }
+ }
+
+ function handleT() {
+ if(token.substring(pos + 1, pos + 4) == 'ION') {
+ add('XN');
+ pos += 3;
+ } else if(subMatch(1, 3, ['IA', 'CH'])) {
+ add('X');
+ pos += 2;
+ } else if(token[pos + 1] == 'H'
+ || token.substring(1, 2) == 'TH') {
+ if(subMatch(2, 4, ['OM', 'AM'])
+ || ['VAN ', 'VON '].indexOf(token.substring(0, 4)) > -1
+ || token.substring(0, 3) == 'SCH') {
+ add('T');
+ } else
+ addSecondary('0', 'T');
+ pos++;
+ } else {
+ addCompressedDouble('T');
+
+ if(token[pos + 1] == 'D')
+ pos++;
+ }
+ }
+
+ function handleX() {
+ if(pos == 0) {
+ add('S');
+ } else if(!(pos == token.length - 1
+ && (['IAU', 'EAU', 'IEU'].indexOf(token.substring(pos - 3, pos)) > -1
+ || ['AU', 'OU'].indexOf(token.substring(pos - 2, pos)) > -1))) {
+ add('KS');
+ }
+ }
+
+ function handleW() {
+ if(pos == 0) {
+ if(token[1] == 'H') {
+ add('A');
+ } else if (isVowel(token[1])) {
+ addSecondary('A', 'F');
+ }
+ } else if((pos == token.length - 1 && isVowel(token[pos - 1])
+ || subMatch(-1, 4, ['EWSKI', 'EWSKY', 'OWSKI', 'OWSKY'])
+ || token.substring(0, 3) == 'SCH')) {
+ addSecondary('', 'F');
+ pos++;
+ } else if(['ICZ', 'ITZ'].indexOf(token.substring(pos + 1, pos + 4)) > -1) {
+ addSecondary('TS', 'FX');
+ pos += 3;
+ }
+ }
+
+ function handleZ() {
+ if(token[pos + 1] == 'H') {
+ add('J');
+ pos++;
+ } else if(subMatch(1, 3, ['ZO', 'ZI', 'ZA'])
+ || (slavoGermanic && pos > 0 && token[pos - 1] != 'T')) {
+ addSecondary('S', 'TS');
+ pos++;
+ } else
+ addCompressedDouble('Z', 'S');
+ }
+
+ var san = (token.substring(0, 3) == 'SAN');
+ var startsWithVowel = isVowel(token[0]);
+ var slavoGermanic = token.match(/(W|K|CZ|WITZ)/);
+
+ if(subMatch(0, 2, ['GN', 'KN', 'PN', 'WR', 'PS'])) {
+ pos++;
+ }
+
+ while(pos < token.length) {
+ switch(token[pos]) {
+ case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y':
+ case 'Ê': case 'É': case 'É': case'À':
+ if(pos == 0)
+ add('A');
+ break;
+ case 'B':
+ addCompressedDouble('B', 'P');
+ break;
+ case 'C':
+ handleC();
+ break;
+ case 'Ç':
+ add("S");
+ break;
+ case 'D':
+ handleD();
+ break;
+ case 'F': case 'K': case 'N':
+ addCompressedDouble(token[pos]);
+ break;
+ case 'G':
+ handleG();
+ break;
+ case 'H':
+ handleH();
+ break;
+ case 'J':
+ handleJ();
+ break;
+ case 'L':
+ handleL();
+ break;
+ case 'M':
+ handleM();
+ break;
+ case 'Ñ':
+ add('N');
+ break;
+ case 'P':
+ handleP();
+ break;
+ case 'Q':
+ addCompressedDouble('Q', 'K');
+ break;
+ case 'R':
+ handleR();
+ break;
+ case 'S':
+ handleS();
+ break;
+ case 'T':
+ handleT();
+ break;
+ case 'V':
+ addCompressedDouble('V', 'F');
+ break;
+ case 'W':
+ handleW();
+ break;
+ case 'X':
+ handleX();
+ break;
+ case 'Z':
+ handleZ();
+ break;
+ }
+
+ if(primary.length >= maxLength && secondary.length >= maxLength) {
+ break;
+ }
+
+ pos++;
+ }
+
+ return [truncate(primary, maxLength), truncate(secondary, maxLength)];
+}
+
+function compare(stringA, stringB) {
+ var encodingsA = process(stringA),
+ encodingsB = process(stringB);
+
+ return encodingsA[0] == encodingsB[0] ||
+ encodingsA[1] == encodingsB[1];
+};
+
+DoubleMetaphone.compare = compare
+DoubleMetaphone.process = process;
+DoubleMetaphone.isVowel = isVowel;
+
+})()
+},{"./phonetic":44}],6:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2012, Alexy Maslenninkov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/*
+ * Daitch-Mokotoff Soundex Coding
+ *
+ * The Daitch-Mokotoff Soundex System was created by Randy Daitch and Gary
+ * Mokotoff of the Jewish Genealogical Society because they concluded the system
+ * developed by Robert Russell in 1918, and in use today by the U.S. National
+ * Archives and Records Administration (NARA) does not apply well to many Slavic
+ * and Yiddish surnames. It also includes refinements that are independent of
+ * ethnic considerations.
+ *
+ * The rules for converting surnames into D-M Code numbers are listed below.
+ * They are followed by the coding chart.
+ *
+ * 1. Names are coded to six digits, each digit representing a sound listed in
+ * the coding chart (below).
+ *
+ * 2. When a name lacks enough coded sounds for six digits, use zeros to fill to
+ * six digits. GOLDEN which has only four coded sounds [G-L-D-N] is coded as
+ * 583600.
+ *
+ * 3. The letters A, E, I, O, U, J, and Y are always coded at the beginning of a
+ * name as in Alpert 087930. In any other situation, they are ignored except
+ * when two of them form a pair and the pair comes before a vowel, as in Breuer
+ * 791900 but not Freud.
+ *
+ * 4. The letter H is coded at the beginning of a name, as in Haber 579000, or
+ * preceding a vowel, as in Manheim 665600, otherwise it is not coded.
+ *
+ * 5. When adjacent sounds can combine to form a larger sound, they are given
+ * the code number of the larger sound. Mintz which is not coded MIN-T-Z but
+ * MIN-TZ 664000.
+ *
+ * 6. When adjacent letters have the same code number, they are coded as one
+ * sound, as in TOPF, which is not coded TO-P-F 377000 but TO-PF 370000.
+ * Exceptions to this rule are the letter combinations MN and NM, whose letters
+ * are coded separately, as in Kleinman, which is coded 586660 not 586600.
+ *
+ * 7. When a surname consists or more than one word, it is coded as if one word,
+ * such as Ben Aron which is treated as Benaron.
+ *
+ * 8. Several letter and letter combinations pose the problem that they may
+ * sound in one of two ways. The letter and letter combinations CH, CK, C, J,
+ * and RS are assigned two possible code numbers.
+ *
+ * For more info, see http://www.jewishgen.org/InfoFiles/soundex.html
+ */
+
+/**
+ * D-M transformation table in the form of finite-state machine.
+ * Every element of the table having member with zero index represents
+ * legal FSM state; every non-zero key is the transition rule.
+ *
+ * Every legal state comprises tree values chosen according to the position
+ * of the letter combination in the word:
+ * 0: start of a word;
+ * 1: before a vowel;
+ * 2: any other situation.
+ */
+var codes = {
+ A: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]],
+ U: [[0, 7, -1]]},
+ B: [[7, 7, 7]],
+ C: {
+ 0: [5, 5, 5],
+ Z: {0: [4, 4, 4], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], Z: [[4, 4, 4]]},
+ K: [[5, 5, 5], [45, 45, 45]],
+ H: {0: [5, 5, 5], S: [[5, 54, 54]]}},
+ D: {
+ 0: [3, 3, 3],
+ T: [[3, 3, 3]],
+ Z: {0: [4, 4, 4], H: [[4, 4, 4]], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], H: [[4, 4, 4]], Z: [[4, 4, 4]]},
+ R: {S: [[4, 4, 4]], Z: [[4, 4, 4]]}},
+ E: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]],
+ U: [[1, 1, -1]],
+ W: [[1, 1, -1]]},
+ F: {
+ 0: [7, 7, 7],
+ B: [[7, 7, 7]]},
+ G: [[5, 5, 5]],
+ H: [[5, 5, -1]],
+ I: {
+ 0: [0, -1, -1],
+ A: [[1, -1, -1]],
+ E: [[1, -1, -1]],
+ O: [[1, -1, -1]],
+ U: [[1, -1, -1]]},
+ J: [[4, 4, 4]],
+ K: {
+ 0: [5, 5, 5],
+ H: [[5, 5, 5]],
+ S: [[5, 54, 54]]},
+ L: [[8, 8, 8]],
+ M: {
+ 0: [6, 6, 6],
+ N: [[66, 66, 66]]},
+ N: {
+ 0: [6, 6, 6],
+ M: [[66, 66, 66]]},
+ O: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]]},
+ P: {
+ 0: [7, 7, 7],
+ F: [[7, 7, 7]],
+ H: [[7, 7, 7]]},
+ Q: [[5, 5, 5]],
+ R: {
+ 0: [9, 9, 9],
+ Z: [[94, 94, 94], [94, 94, 94]],
+ S: [[94, 94, 94], [94, 94, 94]]},
+ S: {
+ 0: [4, 4, 4],
+ Z: {0: [4, 4, 4], T: [[2, 43, 43]], C: {Z: [[2, 4, 4]], S: [[2, 4, 4]]}, D: [[2, 43, 43]]},
+ D: [[2, 43, 43]],
+ T: {0: [2, 43, 43], R: {Z: [[2, 4, 4]], S: [[2, 4, 4]]}, C: {H: [[2, 4, 4]]}, S: {H: [[2, 4, 4]], C: {H: [[2, 4, 4]]}}},
+ C: {0: [2, 4, 4], H: {0: [4, 4, 4], T: {0: [2, 43, 43], S: {C: {H: [[2, 4, 4]]}, H: [[2, 4, 4]]}, C: {H: [[2, 4, 4]]}}, D: [[2, 43, 43]]}},
+ H: {0: [4, 4, 4], T: {0: [2, 43, 43], C: {H: [[2, 4, 4]]}, S: {H: [[2, 4, 4]]}}, C: {H: [[2, 4, 4]]}, D: [[2, 43, 43]]}},
+ T: {
+ 0: [3, 3, 3],
+ C: {0: [4, 4, 4], H: [[4, 4, 4]]},
+ Z: {0: [4, 4, 4], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], Z: [[4, 4, 4]], H: [[4, 4, 4]], C: {H: [[4, 4, 4]]}},
+ T: {S: {0: [4, 4, 4], Z: [[4, 4, 4]], C: {H: [[4, 4, 4]]}}, C: {H: [[4, 4, 4]]}, Z: [[4, 4, 4]]},
+ H: [[3, 3, 3]],
+ R: {Z: [[4, 4, 4]], S: [[4, 4, 4]]}},
+ U: {
+ 0: [0, -1, -1],
+ E: [[0, -1, -1]],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]]},
+ V: [[7, 7, 7]],
+ W: [[7, 7, 7]],
+ X: [[5, 54, 54]],
+ Y: [[1, -1, -1]],
+ Z: {
+ 0: [4, 4, 4],
+ D: {0: [2, 43, 43], Z: {0: [2, 4, 4], H: [[2, 4, 4]]}},
+ H: {0: [4, 4, 4], D: {0: [2, 43, 43], Z: {H: [[2, 4, 4]]}}},
+ S: {0: [4, 4, 4], H: [[4, 4, 4]], C: {H: [[4, 4, 4]]}}}
+};
+
+
+function process(word, codeLength) {
+ codeLength = codeLength || 6;
+ word = word.toUpperCase();
+ var output = '';
+
+ var pos = 0, lastCode = -1;
+ while (pos < word.length) {
+ var substr = word.slice(pos);
+ var rules = findRules(substr);
+
+ var code;
+ if (pos == 0) {
+ // at the beginning of the word
+ code = rules.mapping[0];
+ } else if (substr[rules.length] && findRules(substr[rules.length]).mapping[0] == 0) {
+ // before a vowel
+ code = rules.mapping[1];
+ } else {
+ // any other situation
+ code = rules.mapping[2];
+ }
+
+ if ((code != -1) && (code != lastCode)) output += code;
+ lastCode = code;
+ pos += rules.length;
+
+ }
+
+ return normalizeLength(output, codeLength);
+}
+
+
+function findRules(str) {
+ var state = codes[str[0]];
+ var legalState = state || [[-1,-1,-1]],
+ charsInvolved = 1;
+
+ for (var offs = 1; offs < str.length; offs++) {
+ if (!state || !state[str[offs]]) break;
+
+ state = state[str[offs]];
+ if (state[0]) {
+ legalState = state;
+ charsInvolved = offs + 1;
+ }
+ }
+
+ return {
+ length: charsInvolved,
+ mapping: legalState[0]
+ };
+}
+
+
+/**
+ * Pad right with zeroes or cut excess symbols to fit length
+ */
+function normalizeLength(token, length) {
+ length = length || 6;
+ if (token.length < length) {
+ token += (new Array(length - token.length + 1)).join('0');
+ }
+ return token.slice(0, length);
+}
+
+var Phonetic = require('./phonetic');
+var soundex = new Phonetic();
+soundex.process = process;
+module.exports = soundex;
+
+
+})()
+},{"./phonetic":44}],7:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer');
+
+// denote groups of consecutive consonants with a C and consecutive vowels
+// with a V.
+function categorizeGroups(token) {
+ return token.replace(/[^aeiou]+/g, 'C').replace(/[aeiouy]+/g, 'V');
+}
+
+// denote single consonants with a C and single vowels with a V
+function categorizeChars(token) {
+ return token.replace(/[^aeiou]/g, 'C').replace(/[aeiouy]/g, 'V');
+}
+
+// calculate the "measure" M of a word. M is the count of VC sequences dropping
+// an initial C if it exists and a trailing V if it exists.
+function measure(token) {
+ if(!token)
+ return -1;
+
+ return categorizeGroups(token).replace(/^C/, '').replace(/V$/, '').length / 2;
+}
+
+// determine if a token end with a double consonant i.e. happ
+function endsWithDoublCons(token) {
+ return token.match(/([^aeiou])\1$/);
+}
+
+// replace a pattern in a word. if a replacement occurs an optional callback
+// can be called to post-process the result. if no match is made NULL is
+// returned.
+function attemptReplace(token, pattern, replacement, callback) {
+ var result = null;
+
+ if((typeof pattern == 'string') && token.substr(0 - pattern.length) == pattern)
+ result = token.replace(new RegExp(pattern + '$'), replacement);
+ else if((pattern instanceof RegExp) && token.match(pattern))
+ result = token.replace(pattern, replacement);
+
+ if(result && callback)
+ return callback(result);
+ else
+ return result;
+}
+
+// attempt to replace a list of patterns/replacements on a token for a minimum
+// measure M.
+function attemptReplacePatterns(token, replacements, measureThreshold) {
+ var replacement = null;
+
+ for(var i = 0; i < replacements.length; i++) {
+ if(measureThreshold == null || measure(attemptReplace(token, replacements[i][0], '')) > measureThreshold)
+ replacement = attemptReplace(token, replacements[i][0], replacements[i][1]);
+
+ if(replacement)
+ break;
+ }
+
+ return replacement;
+}
+
+// replace a list of patterns/replacements on a word. if no match is made return
+// the original token.
+function replacePatterns(token, replacements, measureThreshold) {
+ var result = attemptReplacePatterns(token, replacements, measureThreshold);
+ token = result == null ? token : result;
+
+ return token;
+}
+
+// step 1a as defined for the porter stemmer algorithm.
+function step1a(token) {
+ if(token.match(/(ss|i)es$/))
+ return token.replace(/(ss|i)es$/, '$1');
+
+ if(token.substr(-1) == 's' && token.substr(-2, 1) != 's')
+ return token.replace(/s?$/, '');
+
+ return token;
+}
+
+// step 1b as defined for the porter stemmer algorithm.
+function step1b(token) {
+ if(token.substr(-3) == 'eed') {
+ if(measure(token.substr(0, token.length - 3)) > 0)
+ return token.replace(/eed$/, 'ee');
+ } else {
+ var result = attemptReplace(token, /ed|ing$/, '', function(token) {
+ if(categorizeGroups(token).indexOf('V') > 0) {
+ var result = attemptReplacePatterns(token, [['at', 'ate'], ['bl', 'ble'], ['iz', 'ize']]);
+
+ if(result)
+ return result;
+ else {
+ if(endsWithDoublCons(token) && token.match(/[^lsz]$/))
+ return token.replace(/([^aeiou])\1$/, '$1');
+
+ if(measure(token) == 1 && categorizeChars(token).substr(-3) == 'CVC' && token.match(/[^wxy]$/))
+ return token + 'e';
+ }
+
+ return token;
+ }
+
+ return null;
+ });
+
+ if(result)
+ return result;
+ }
+
+ return token;
+}
+
+// step 1c as defined for the porter stemmer algorithm.
+function step1c(token) {
+ if(categorizeGroups(token).substr(-2, 1) == 'V') {
+ if(token.substr(-1) == 'y')
+ return token.replace(/y$/, 'i');
+ }
+
+ return token;
+}
+
+// step 2 as defined for the porter stemmer algorithm.
+function step2(token) {
+ return replacePatterns(token, [['ational', 'ate'], ['tional', 'tion'], ['enci', 'ence'], ['anci', 'ance'],
+ ['izer', 'ize'], ['abli', 'able'], ['alli', 'al'], ['entli', 'ent'], ['eli', 'e'],
+ ['ousli', 'ous'], ['ization', 'ize'], ['ation', 'ate'], ['ator', 'ate'],['alism', 'al'],
+ ['iveness', 'ive'], ['fulness', 'ful'], ['ousness', 'ous'], ['aliti', 'al'],
+ ['iviti', 'ive'], ['biliti', 'ble']], 0);
+}
+
+// step 3 as defined for the porter stemmer algorithm.
+function step3(token) {
+ return replacePatterns(token, [['icate', 'ic'], ['ative', ''], ['alize', 'al'],
+ ['iciti', 'ic'], ['ical', 'ic'], ['ful', ''], ['ness', '']], 0);
+}
+
+// step 4 as defined for the porter stemmer algorithm.
+function step4(token) {
+ return replacePatterns(token, [['al', ''], ['ance', ''], ['ence', ''], ['er', ''],
+ ['ic', ''], ['able', ''], ['ible', ''], ['ant', ''],
+ ['ement', ''], ['ment', ''], ['ent', ''], [/([st])ion/, '$1'], ['ou', ''], ['ism', ''],
+ ['ate', ''], ['iti', ''], ['ous', ''], ['ive', ''],
+ ['ize', '']], 1);
+}
+
+// step 5a as defined for the porter stemmer algorithm.
+function step5a(token) {
+ var m = measure(token);
+
+ if((m > 1 && token.substr(-1) == 'e') || (m == 1 && !(categorizeChars(token).substr(-4, 3) == 'CVC' && token.match(/[^wxy].$/))))
+ return token.replace(/e$/, '');
+
+ return token;
+}
+
+// step 5b as defined for the porter stemmer algorithm.
+function step5b(token) {
+ if(measure(token) > 1) {
+ if(endsWithDoublCons(token) && token.substr(-2) == 'll')
+ return token.replace(/ll$/, 'l');
+ }
+
+ return token;
+}
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ return step5b(step5a(step4(step3(step2(step1c(step1b(step1a(token.toLowerCase())))))))).toString();
+};
+
+//exports for tests
+PorterStemmer.step1a = step1a;
+PorterStemmer.step1b = step1b;
+PorterStemmer.step1c = step1c;
+PorterStemmer.step2 = step2;
+PorterStemmer.step3 = step3;
+PorterStemmer.step4 = step4;
+PorterStemmer.step5a = step5a;
+PorterStemmer.step5b = step5b;
+
+})()
+},{"./stemmer":45}],9:[function(require,module,exports){
+/*
+Copyright (c) 2012, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_ru');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+function attemptReplacePatterns(token, patterns) {
+ var replacement = null;
+ var i = 0, isReplaced = false;
+ while ((i < patterns.length) && !isReplaced) {
+ if (patterns[i][0].test(token)) {
+ replacement = token.replace(patterns[i][0], patterns[i][1]);
+ isReplaced = true;
+ }
+ i++;
+ }
+ return replacement;
+};
+
+function perfectiveGerund(token) {
+ var result = attemptReplacePatterns(token, [
+ [/[аÑ]в(ши|шиÑÑŒ)$/g, ''],
+ [/(ив|ивши|ившиÑÑŒ|ывши|ывшиÑÑŒ|ыв)$/g, '']
+ ]);
+ return result;
+};
+
+function adjectival(token) {
+ var result = adjective(token);
+ if (result != null) {
+ var pariticipleResult = participle(result);
+ result = pariticipleResult ? pariticipleResult : result;
+ }
+ return result;
+};
+
+function adjective(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|Ñ‹Ñ…|ую|ÑŽÑŽ|аÑ|ÑÑ|ою|ею)$/g, '']
+ ]);
+ return result;
+};
+
+function participle(token) {
+ var result = attemptReplacePatterns(token, [
+ [/([аÑ])(ем|нн|вш|ющ|щ)$/g, '$1'],
+ [/(ивш|ывш|ующ)$/g, '']
+ ]);
+ return result;
+};
+
+function reflexive(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ÑÑ|ÑÑŒ)$/g, '']
+ ]);
+ return result;
+};
+
+function verb(token) {
+ var result = attemptReplacePatterns(token, [
+ [/([аÑ])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ÑŽÑ‚|ны|Ñ‚ÑŒ|ешь|нно)$/g, '$1'],
+ [/(ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ÑÑ‚|ует|ит|Ñ‹Ñ‚|ены|ить|Ñ‹Ñ‚ÑŒ|ишь|ую|ÑŽ)$/g, '']
+ ]);
+ return result;
+};
+
+function noun(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(а|ев|ов|ие|ье|е|иÑми|Ñми|ами|еи|ии|и|ией|ей|ой|ий|й|иÑм|Ñм|ием|ем|ам|ом|о|у|ах|иÑÑ…|ÑÑ…|Ñ‹|ÑŒ|ию|ью|ÑŽ|иÑ|ÑŒÑ|Ñ)$/g, '']
+ ]);
+ return result;
+};
+
+function superlative (token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ейш|ейше)$/g, '']
+ ]);
+ return result;
+};
+
+function derivational (token) {
+ var result = attemptReplacePatterns(token, [
+ [/(оÑÑ‚|оÑÑ‚ÑŒ)$/g, '']
+ ]);
+ return result;
+};
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ token = token.toLowerCase().replace(/ё/g, 'е');
+ var volwesRegexp = /^(.*?[аеиоюÑуыиÑ])(.*)$/g;
+ var RV = volwesRegexp.exec(token);
+ if (!RV || RV.length < 3) {
+ return token;
+ }
+ var head = RV[1];
+ RV = RV[2];
+ volwesRegexp.lastIndex = 0;
+ var R2 = volwesRegexp.exec(RV);
+ var result = perfectiveGerund(RV);
+ if (result === null) {
+ var resultReflexive = reflexive(RV) || RV;
+ result = adjectival(resultReflexive);
+ if (result === null) {
+ result = verb(resultReflexive);
+ if (result === null) {
+ result = noun(resultReflexive);
+ if (result === null) {
+ result = resultReflexive;
+ }
+ }
+ }
+ }
+ result = result.replace(/и$/g, '');
+ var derivationalResult = result
+ if (R2 && R2[2]) {
+ derivationalResult = derivational(R2[2]);
+ if (derivationalResult != null) {
+ derivationalResult = derivational(result);
+ } else {
+ derivationalResult = result;
+ }
+ }
+
+ var superlativeResult = superlative(derivationalResult) || derivationalResult;
+
+ superlativeResult = superlativeResult.replace(/(н)н/g, '$1');
+ superlativeResult = superlativeResult.replace(/ь$/g, '');
+ return head + superlativeResult;
+};
+
+},{"./stemmer_ru":46}],8:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Porter Stemmer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_fa');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+// disabled stemming for Farsi
+// Farsi stemming will be supported soon
+PorterStemmer.stem = function(token) {
+ return token;
+};
+},{"./stemmer_fa":47}],10:[function(require,module,exports){
+/*
+Copyright (c) 2012, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_es');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+
+function isVowel(letter){
+ return (letter == 'a' || letter == 'e' || letter == 'i' || letter == 'o' || letter == 'u' || letter == 'á' || letter == 'é' ||
+ letter == 'í' || letter == 'ó' || letter == 'ú');
+};
+
+function getNextVowelPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (isVowel(token[i])) return i;
+ return length;
+};
+
+function getNextConsonantPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (!isVowel(token[i])) return i;
+ return length;
+};
+
+
+function endsin(token, suffix) {
+ if (token.length < suffix.length) return false;
+ return (token.slice(-suffix.length) == suffix);
+};
+
+function endsinArr(token, suffixes) {
+ for(var i=0;i<suffixes.length;i++){
+ if (endsin(token, suffixes[i])) return suffixes[i];
+ }
+ return '';
+};
+
+function removeAccent(token) {
+ var str=token.replace(/á/gi,'a');
+ str=str.replace(/é/gi,'e');
+ str=str.replace(/í/gi,'i');
+ str=str.replace(/ó/gi,'o');
+ str=str.replace(/ú/gi,'u');
+ return str;
+};
+
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ token = token.toLowerCase();
+
+ if (token.length<3){
+ return token;
+ }
+
+ var r1,r2,rv,len= token.length;
+ //looking for regions after vowels
+
+ for(var i=0; i< token.length-1 && r1==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1]) ){
+ r1=i+2;
+ }
+
+ }
+
+ for(var i=r1; i< token.length-1 && r2==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1])){
+ r2=i+2;
+ }
+ }
+
+ if (len > 3) {
+ if(isVowel(token[1])) {
+ // If the second letter is a consonant, RV is the region after the next following vowel
+ rv = getNextVowelPos(token, 2) +1;
+ } else if (isVowel(token[0]) && isVowel(token[1])) {
+ // or if the first two letters are vowels, RV is the region after the next consonant
+ rv = getNextConsonantPos(token, 2) + 1;
+ } else {
+ //otherwise (consonant-vowel case) RV is the region after the third letter. But RV is the end of the word if these positions cannot be found.
+ rv = 3;
+ }
+ }
+
+ var r1_txt = token.substring(r1-1);
+ var r2_txt = token.substring(r2-1);
+ var rv_txt = token.substring(rv-1);
+
+
+ var token_orig = token;
+
+ // Step 0: Attached pronoun
+ var pronoun_suf = new Array('me', 'se', 'sela', 'selo', 'selas', 'selos', 'la', 'le', 'lo', 'las', 'les', 'los', 'nos');
+ var pronoun_suf_pre1 = new Array('éndo', 'ándo', 'ár', 'ér', 'ír');
+ var pronoun_suf_pre2 = new Array('ando', 'iendo', 'ar', 'er', 'ir');
+ var suf = endsinArr(token, pronoun_suf);
+
+
+ if (suf!='') {
+
+ var pre_suff = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre1);
+
+ if (pre_suff != '') {
+
+ token = removeAccent(token.slice(0,-suf.length));
+ } else {
+ var pre_suff = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre2);
+
+ if (pre_suff != '' ||
+ (endsin(token, 'yendo' ) &&
+ (token.slice(-suf.length-6,1) == 'u'))) {
+ token = token.slice(0,-suf.length);
+ }
+ }
+ }
+
+ if (token != token_orig) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after0 = token;
+
+ if ((suf = endsinArr(r2_txt, new Array('anza', 'anzas', 'ico', 'ica', 'icos', 'icas', 'ismo', 'ismos', 'able', 'ables', 'ible', 'ibles', 'ista', 'istas', 'oso', 'osa', 'osos', 'osas', 'amiento', 'amientos', 'imiento', 'imientos'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('icadora', 'icador', 'icación', 'icadoras', 'icadores', 'icaciones', 'icante', 'icantes', 'icancia', 'icancias', 'adora', 'ador', 'ación', 'adoras', 'adores', 'aciones', 'ante', 'antes', 'ancia', 'ancias'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('logía', 'logías'))) != '') {
+ token = token.slice(0, -suf.length)+ 'log';
+ } else if ((suf =endsinArr(r2_txt, new Array('ución', 'uciones'))) != '') {
+ token = token.slice(0, -suf.length) + 'u';
+ } else if ((suf = endsinArr(r2_txt, new Array('encia', 'encias'))) != '') {
+ token = token.slice(0, -suf.length)+ 'ente';
+ } else if ((suf = endsinArr(r2_txt, new Array('ativamente', 'ivamente', 'osamente', 'icamente', 'adamente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r1_txt, new Array('amente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('antemente', 'ablemente', 'iblemente', 'mente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('abilidad', 'abilidades', 'icidad', 'icidades', 'ividad', 'ividades', 'idad', 'idades'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('ativa', 'ativo', 'ativas', 'ativos', 'iva', 'ivo', 'ivas', 'ivos'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+ if (token != token_after0) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after1 = token;
+
+ if (token_after0 == token_after1) {
+ // Do step 2a if no ending was removed by step 1.
+ if ((suf = endsinArr(rv_txt, new Array('ya', 'ye', 'yan', 'yen', 'yeron', 'yendo', 'yo', 'yó', 'yas', 'yes', 'yais', 'yamos'))) != '' && (token.substring(suf.length-1,1) == 'u')) {
+ token = token.slice(0, -suf.length);
+ }
+
+ if (token != token_after1) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after2a = token;
+
+ // Do Step 2b if step 2a was done, but failed to remove a suffix.
+ if (token_after2a == token_after1) {
+
+ if ((suf = endsinArr(rv_txt,new Array('en', 'es', 'éis', 'emos'))) != '') {
+ token = token.slice(0,-suf.length);
+ if (endsin(token, 'gu')) {
+ token = token.slice(0,-1);
+ }
+ } else if ((suf = endsinArr(rv_txt, new Array('arían', 'arías', 'arán', 'arás', 'aríais', 'aría', 'aréis', 'aríamos', 'aremos', 'ará', 'aré', 'erían', 'erías', 'erán', 'erás', 'eríais', 'ería', 'eréis', 'eríamos', 'eremos', 'erá', 'eré', 'irían', 'irías', 'irán', 'irás', 'iríais', 'iría', 'iréis', 'iríamos', 'iremos', 'irá', 'iré', 'aba', 'ada', 'ida', 'ía', 'ara', 'iera', 'ad', 'ed', 'id', 'ase', 'iese', 'aste', 'iste', 'an', 'aban', 'ían', 'aran', 'ieran', 'asen', 'iesen', 'aron', 'ieron', 'ado', 'ido', 'ando', 'iendo', 'ió', 'ar', 'er', 'ir', 'as', 'abas', 'adas', 'idas', 'ías', 'aras', 'ieras', 'ases', 'ieses', 'ís', 'áis', 'abais', 'íais', 'arais', 'ierais', ' aseis', 'ieseis', 'asteis', 'isteis', 'ados', 'idos', 'amos', 'ábamos', 'íamos', 'imos', 'áramos', 'iéramos', 'iésemos', 'ásemos'))) != '') {
+
+ token = token.slice(0, -suf.length);
+
+ }
+ }
+ }
+
+ // Always do step 3.
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+
+ if ((suf = endsinArr(rv_txt, new Array('os', 'a', 'o', 'á', 'í', 'ó'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(rv_txt ,new Array('e','é'))) != '') {
+ token = token.slice(0,-1);
+ rv_txt = token.substring(rv-1);
+ if (endsin(rv_txt,'u') && endsin(token,'gu')) {
+ token = token.slice(0,-1);
+ }
+ }
+
+ return removeAccent(token);
+
+};
+
+},{"./stemmer_es":48}],11:[function(require,module,exports){
+/*
+Copyright (c) 2012, Leonardo Fenu, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_it');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+
+function isVowel(letter){
+ return (letter == 'a' || letter == 'e' || letter == 'i' || letter == 'o' || letter == 'u' || letter == 'à' ||
+ letter == 'è' || letter == 'ì' || letter == 'ò' || letter == 'ù');
+};
+
+function getNextVowelPos(token,start){
+ start = start + 1;
+ var length = token.length;
+ for (var i = start; i < length; i++) {
+ if (isVowel(token[i])) {
+ return i;
+ }
+ }
+ return length;
+};
+
+function getNextConsonantPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (!isVowel(token[i])) return i;
+ return length;
+};
+
+
+function endsin(token, suffix) {
+ if (token.length < suffix.length) return false;
+ return (token.slice(-suffix.length) == suffix);
+};
+
+function endsinArr(token, suffixes) {
+ for(var i=0;i<suffixes.length;i++){
+ if (endsin(token, suffixes[i])) return suffixes[i];
+ }
+ return '';
+};
+
+function replaceAcute(token) {
+ var str=token.replace(/á/gi,'à');
+ str=str.replace(/é/gi,'è');
+ str=str.replace(/í/gi,'ì');
+ str=str.replace(/ó/gi,'ò');
+ str=str.replace(/ú/gi,'ù');
+ return str;
+};
+
+function vowelMarking(token) {
+ function replacer(match, p1, p2, p3){
+ return p1+p2.toUpperCase()+p3;
+ };
+ str=token.replace(/([aeiou])(i|u)([aeiou])/g, replacer);
+ return str;
+}
+
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+
+ token = token.toLowerCase();
+ token = replaceAcute(token);
+ token = token.replace(/qu/g,'qU');
+ token = vowelMarking(token);
+
+ if (token.length<3){
+ return token;
+ }
+
+ var r1 = r2 = rv = len = token.length;
+ // R1 is the region after the first non-vowel following a vowel,
+ for(var i=0; i < token.length-1 && r1==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1]) ){
+ r1=i+2;
+ }
+ }
+ // Or is the null region at the end of the word if there is no such non-vowel.
+
+ // R2 is the region after the first non-vowel following a vowel in R1
+ for(var i=r1; i< token.length-1 && r2==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1])){
+ r2=i+2;
+ }
+ }
+
+ // Or is the null region at the end of the word if there is no such non-vowel.
+
+ // If the second letter is a consonant, RV is the region after the next following vowel,
+
+ // RV as follow
+
+ if (len > 3) {
+ if(!isVowel(token[1])) {
+ // If the second letter is a consonant, RV is the region after the next following vowel
+ rv = getNextVowelPos(token, 1) +1;
+ } else if (isVowel(token[0]) && isVowel(token[1])) {
+ // or if the first two letters are vowels, RV is the region after the next consonant
+ rv = getNextConsonantPos(token, 2) + 1;
+ } else {
+ //otherwise (consonant-vowel case) RV is the region after the third letter. But RV is the end of the word if these positions cannot be found.
+ rv = 3;
+ }
+ }
+
+ var r1_txt = token.substring(r1);
+ var r2_txt = token.substring(r2);
+ var rv_txt = token.substring(rv);
+
+ var token_orig = token;
+
+ // Step 0: Attached pronoun
+
+ var pronoun_suf = new Array('glieli','glielo','gliene','gliela','gliele','sene','tene','cela','cele','celi','celo','cene','vela','vele','veli','velo','vene','mela','mele','meli','melo','mene','tela','tele','teli','telo','gli','ci', 'la','le','li','lo','mi','ne','si','ti','vi');
+ var pronoun_suf_pre1 = new Array('ando','endo');
+ var pronoun_suf_pre2 = new Array('ar', 'er', 'ir');
+ var suf = endsinArr(token, pronoun_suf);
+
+ if (suf!='') {
+ var pre_suff1 = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre1);
+ var pre_suff2 = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre2);
+
+ if (pre_suff1 != '') {
+ token = token.slice(0,-suf.length);
+ }
+ if (pre_suff2 != '') {
+ token = token.slice(0, -suf.length)+ 'e';
+ }
+ }
+
+ if (token != token_orig) {
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+ }
+
+ var token_after0 = token;
+
+ // Step 1: Standard suffix removal
+
+ if ((suf = endsinArr(r2_txt, new Array('ativamente','abilamente','ivamente','osamente','icamente'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('icazione','icazioni','icatore','icatori','azione','azioni','atore','atori'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('logia','logie'))) != '') {
+ token = token.slice(0, -suf.length)+ 'log'; // replace with log
+ } else if ((suf =endsinArr(r2_txt, new Array('uzione','uzioni','usione','usioni'))) != '') {
+ token = token.slice(0, -suf.length) + 'u'; // replace with u
+ } else if ((suf = endsinArr(r2_txt, new Array('enza','enze'))) != '') {
+ token = token.slice(0, -suf.length)+ 'ente'; // replace with ente
+ } else if ((suf = endsinArr(rv_txt, new Array('amento', 'amenti', 'imento', 'imenti'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r1_txt, new Array('amente'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('atrice','atrici','abile','abili','ibile','ibili','mente','ante','anti','anza','anze','iche','ichi','ismo','ismi','ista','iste','isti','istà','istè','istì','ico','ici','ica','ice','oso','osi','osa','ose'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('abilità', 'icità', 'ività', 'ità'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('icativa','icativo','icativi','icative','ativa','ativo','ativi','ative','iva','ivo','ivi','ive'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+
+ if (token != token_after0) {
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+ }
+
+
+ var token_after1 = token;
+
+ // Step 2: Verb suffixes
+
+ if (token_after0 == token_after1) {
+ if ((suf = endsinArr(rv_txt, new Array('erebbero','irebbero','assero','assimo','eranno','erebbe','eremmo','ereste','eresti','essero','iranno','irebbe','iremmo','ireste','iresti','iscano','iscono','issero','arono','avamo','avano','avate','eremo','erete','erono','evamo','evano','evate','iremo','irete','irono','ivamo','ivano','ivate','ammo','ando','asse','assi','emmo','enda','ende','endi','endo','erai','Yamo','iamo','immo','irai','irei','isca','isce','isci','isco','erei','uti','uto','ita','ite','iti','ito','iva','ivi','ivo','ono','uta','ute','ano','are','ata','ate','ati','ato','ava','avi','avo','erà','ere','erò','ete','eva','evi','evo','irà','ire','irò','ar','ir'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+ }
+
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ // Always do step 3.
+
+ if ((suf = endsinArr(rv_txt, new Array('ia', 'ie', 'ii', 'io', 'ià', 'iè','iì', 'iò','a','e','i','o','à','è','ì','ò'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ if ((suf =endsinArr(rv_txt, new Array('ch'))) != '') {
+ token = token.slice(0, -suf.length) + 'c'; // replace with c
+ } else if ((suf =endsinArr(rv_txt, new Array('gh'))) != '') {
+ token = token.slice(0, -suf.length) + 'g'; // replace with g
+ }
+
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ return token.toLowerCase();
+
+};
+},{"./stemmer_it":49}],12:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer');
+var ruleTable = require('./lancaster_rules').rules;
+
+function acceptable(candidate) {
+ if (candidate.match(/^[aeiou]/))
+ return (candidate.length > 1);
+ else
+ return (candidate.length > 2 && candidate.match(/[aeiouy]/));
+}
+
+// take a token, look up the applicatble rule section and attempt some stemming!
+function applyRuleSection(token, intact) {
+ var section = token.substr( - 1);
+ var rules = ruleTable[section];
+
+ if (rules) {
+ for (var i = 0; i < rules.length; i++) {
+ if ((intact || !rules[i].intact)
+ // only apply intact rules to intact tokens
+ && token.substr(0 - rules[i].pattern.length) == rules[i].pattern) {
+ // hack off only as much as the rule indicates
+ var result = token.substr(0, token.length - rules[i].size);
+
+ // if the rules wants us to apply an appendage do so
+ if (rules[i].appendage)
+ result += rules[i].appendage;
+
+ if (acceptable(result)) {
+ token = result;
+
+ // see what the rules wants to do next
+ if (rules[i].continuation) {
+ // this rule thinks there still might be stem left. keep at it.
+ // since we've applied a change we'll pass false in for intact
+ return applyRuleSection(result, false);
+ } else {
+ // the rule thinks we're done stemming. drop out.
+ return result;
+ }
+ }
+ }
+ }
+ }
+
+ return token;
+}
+
+var LancasterStemmer = new Stemmer();
+module.exports = LancasterStemmer;
+
+LancasterStemmer.stem = function(token) {
+ return applyRuleSection(token.toLowerCase(), true);
+}
+},{"./stemmer":45,"./lancaster_rules":50}],13:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A very basic stemmer that performs the following steps:
+ * * Stem katakana.
+ * Inspired by:
+ * http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/JapaneseKatakanaStemFilter.java
+ *
+ * This script assumes input is normalized using normalizer_ja().
+ *
+ * \@todo Use .bind() in StemmerJa.prototype.attach().
+ */
+
+var Tokenizer = require('../tokenizers/tokenizer_ja');
+var stopwords = require('../util/stopwords_ja');
+
+
+
+/**
+ * @constructor
+ */
+var StemmerJa = function() {
+};
+
+
+/**
+ * Tokenize and stem a text.
+ * Stop words are excluded except if the second argument is true.
+ *
+ * @param {string} text
+ * @param {boolean} keepStops Whether to keep stop words from the output or not.
+ * @return {Array.<string>}
+ */
+StemmerJa.prototype.tokenizeAndStem = function(text, keepStops) {
+ var self = this;
+ var stemmedTokens = [];
+ var tokens = new Tokenizer().tokenize(text);
+
+ // This is probably faster than an if at each iteration.
+ if (keepStops) {
+ tokens.forEach(function(token) {
+ var resultToken = token.toLowerCase();
+ resultToken = self.stem(resultToken);
+ stemmedTokens.push(resultToken);
+ });
+ } else {
+ tokens.forEach(function(token) {
+ if (stopwords.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ resultToken = self.stem(resultToken);
+ stemmedTokens.push(resultToken);
+ }
+ });
+ }
+
+ return stemmedTokens;
+};
+
+
+/**
+ * Stem a term.
+ *
+ * @param {string} token
+ * @return {string}
+ */
+StemmerJa.prototype.stem = function(token) {
+ token = this.stemKatakana(token);
+
+ return token;
+};
+
+
+/**
+ * Remove the final prolonged sound mark on katakana if length is superior to
+ * a threshold.
+ *
+ * @param {string} token A katakana string to stem.
+ * @return {string} A katakana string stemmed.
+ */
+StemmerJa.prototype.stemKatakana = function(token) {
+ var HIRAGANA_KATAKANA_PROLONGED_SOUND_MARK = 'ー';
+ var DEFAULT_MINIMUM_LENGTH = 4;
+
+ if (token.length >= DEFAULT_MINIMUM_LENGTH
+ && token.slice(-1) === HIRAGANA_KATAKANA_PROLONGED_SOUND_MARK
+ && this.isKatakana(token)) {
+ token = token.slice(0, token.length - 1);
+ }
+ return token;
+};
+
+
+/**
+ * Is a string made of fullwidth katakana only?
+ * This implementation is the fastest I know:
+ * http://jsperf.com/string-contain-katakana-only/2
+ *
+ * @param {string} str A string.
+ * @return {boolean} True if the string has katakana only.
+ */
+StemmerJa.prototype.isKatakana = function(str) {
+ return !!str.match(/^[゠-ヿ]+$/);
+};
+
+// Expose an attach function that will patch String with new methods.
+StemmerJa.prototype.attach = function() {
+ var self = this;
+
+ String.prototype.stem = function() {
+ return self.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return self.tokenizeAndStem(this, keepStops);
+ };
+};
+
+module.exports = StemmerJa;
+
+},{"../tokenizers/tokenizer_ja":21,"../util/stopwords_ja":51}],14:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Aggressive Tokenizer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.clearEmptyString = function(array) {
+ return array.filter(function(a) {
+ return a != '';
+ });
+};
+
+AggressiveTokenizer.prototype.clearText = function(text) {
+ return text.replace(new RegExp('\.\:\+\-\=\(\)\"\'\!\?\،\,\؛\;', 'g'), ' ');
+};
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ text = this.clearText(text);
+ return this.clearEmptyString(text.split(/\s+/));
+};
+
+},{"util":40,"./tokenizer":52}],15:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.withoutEmpty = function(array) {
+ return array.filter(function(a) {return a;});
+};
+
+AggressiveTokenizer.prototype.clearText = function(text) {
+ return text.replace(/[^a-zа-ÑÑ‘0-9]/gi, ' ').replace(/[\s\n]+/g, ' ').trim();
+};
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.withoutEmpty(this.clearText(text).split(' '));
+};
+
+},{"util":40,"./tokenizer":52}],16:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel,David Przybilla
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],17:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel,David Przybilla
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],18:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],21:[function(require,module,exports){
+// Original copyright:
+/*
+ Copyright (c) 2008, Taku Kudo
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// This version:
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
+// (c) 2008 Taku Kudo <taku@chasen.org>
+// TinySegmenter is freely distributable under the terms of a new BSD licence.
+// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
+
+var Tokenizer = require('./tokenizer'),
+ normalize = require('../normalizers/normalizer_ja').normalize_ja,
+ util = require('util');
+
+
+
+/**
+ * @constructor
+ */
+var TokenizerJa = function() {
+ this.chartype_ = [
+ [/[〇一二三四五六七八ä¹å百åƒä¸‡å„„å…†]/, 'M'],
+ [/[一-鿌〆]/, 'H'],
+ [/[ã-ã‚Ÿ]/, 'I'],
+ [/[゠-ヿ]/, 'K'],
+ [/[a-zA-Z]/, 'A'],
+ [/[0-9]/, 'N']
+ ];
+
+ this.BIAS__ = -332;
+ this.BC1__ = {'HH': 6, 'II': 2461, 'KH': 406, 'OH': -1378};
+ this.BC2__ = {'AA': -3267, 'AI': 2744, 'AN': -878, 'HH': -4070, 'HM': -1711, 'HN': 4012, 'HO': 3761, 'IA': 1327, 'IH': -1184, 'II': -1332, 'IK': 1721, 'IO': 5492, 'KI': 3831, 'KK': -8741, 'MH': -3132, 'MK': 3334, 'OO': -2920};
+ this.BC3__ = {'HH': 996, 'HI': 626, 'HK': -721, 'HN': -1307, 'HO': -836, 'IH': -301, 'KK': 2762, 'MK': 1079, 'MM': 4034, 'OA': -1652, 'OH': 266};
+ this.BP1__ = {'BB': 295, 'OB': 304, 'OO': -125, 'UB': 352};
+ this.BP2__ = {'BO': 60, 'OO': -1762};
+ this.BQ1__ = {'BHH': 1150, 'BHM': 1521, 'BII': -1158, 'BIM': 886, 'BMH': 1208, 'BNH': 449, 'BOH': -91, 'BOO': -2597, 'OHI': 451, 'OIH': -296, 'OKA': 1851, 'OKH': -1020, 'OKK': 904, 'OOO': 2965};
+ this.BQ2__ = {'BHH': 118, 'BHI': -1159, 'BHM': 466, 'BIH': -919, 'BKK': -1720, 'BKO': 864, 'OHH': -1139, 'OHM': -181, 'OIH': 153, 'UHI': -1146};
+ this.BQ3__ = {'BHH': -792, 'BHI': 2664, 'BII': -299, 'BKI': 419, 'BMH': 937, 'BMM': 8335, 'BNN': 998, 'BOH': 775, 'OHH': 2174, 'OHM': 439, 'OII': 280, 'OKH': 1798, 'OKI': -793, 'OKO': -2242, 'OMH': -2402, 'OOO': 11699};
+ this.BQ4__ = {'BHH': -3895, 'BIH': 3761, 'BII': -4654, 'BIK': 1348, 'BKK': -1806, 'BMI': -3385, 'BOO': -12396, 'OAH': 926, 'OHH': 266, 'OHK': -2036, 'ONN': -973};
+ this.BW1__ = {',ã¨': 660, ',åŒ': 727, 'B1ã‚': 1404, 'B1åŒ': 542, 'ã€ã¨': 660, 'ã€åŒ': 727, 'ï½£ã¨': 1682, 'ã‚ã£': 1505, 'ã„ã†': 1743, 'ã„ã£': -2055, 'ã„ã‚‹': 672, 'ã†ã—': -4817, 'ã†ã‚“': 665, 'ã‹ã‚‰': 3472, 'ãŒã‚‰': 600, 'ã“ã†': -790, 'ã“ã¨': 2083, 'ã“ã‚“': -1262, 'ã•ã‚‰': -4143, 'ã•ã‚“': 4573, 'ã—ãŸ': 2641, 'ã—ã¦': 1104, 'ã™ã§': -3399, 'ãã“': 1977, 'ãã‚Œ': -871, 'ãŸã¡': 1122, 'ãŸã‚': 601, 'ã£ãŸ': 3463, 'ã¤ã„': -802, 'ã¦ã„': 805, 'ã¦ã': 1249, 'ã§ã': 1127, 'ã§ã™': 3445, 'ã§ã¯': 844, 'ã¨ã„': -4915, 'ã¨ã¿': 1922, 'ã©ã“': 3887, 'ãªã„': 5713, 'ãªã£': 3015, 'ãªã©': 7379, 'ãªã‚“': -1113, 'ã«ã—': 2468, 'ã«ã¯': 1498, 'ã«ã‚‚': 1671, 'ã«å¯¾': -912, 'ã®ä¸€': -501, 'ã®ä¸­': 741, 'ã¾ã›': 2448, 'ã¾ã§': 1711, 'ã¾ã¾': 2600, 'ã¾ã‚‹': -2155, 'ã‚„ã‚€': -1947, 'よã£': -2565, 'ã‚ŒãŸ': 2369, 'ã‚Œã§': -913, 'ã‚’ã—': 1860, 'を見': 731, '亡ã': -1886, '京都': 2558, 'å–ã‚Š': -2784, '大ã': -2604, '大阪': 1497, '平方': -2314, '引ã': -1336, '日本': -195, '本当': -2423, '毎日': -2113, '目指': -724};
+ this.BW2__ = {'11': -669, '..': -11822, '――': -5730, '−−': -13175, 'ã„ã†': -1609, 'ã†ã‹': 2490, 'ã‹ã—': -1350, 'ã‹ã‚‚': -602, 'ã‹ã‚‰': -7194, 'ã‹ã‚Œ': 4612, 'ãŒã„': 853, 'ãŒã‚‰': -3198, 'ããŸ': 1941, 'ããª': -1597, 'ã“ã¨': -8392, 'ã“ã®': -4193, 'ã•ã›': 4533, 'ã•ã‚Œ': 13168, 'ã•ã‚“': -3977, 'ã—ã„': -1819, 'ã—ã‹': -545, 'ã—ãŸ': 5078, 'ã—ã¦': 972, 'ã—ãª': 939, 'ãã®': -3744, 'ãŸã„': -1253, 'ãŸãŸ': -662, 'ãŸã ': -3857, 'ãŸã¡': -786, 'ãŸã¨': 1224, 'ãŸã¯': -939, 'ã£ãŸ': 4589, 'ã£ã¦': 1647, 'ã£ã¨': -2094, 'ã¦ã„': 6144, 'ã¦ã': 3640, 'ã¦ã': 2551, 'ã¦ã¯': -3110, 'ã¦ã‚‚': -3065, 'ã§ã„': 2666, 'ã§ã': -1528, 'ã§ã—': -3828, 'ã§ã™': -4761, 'ã§ã‚‚': -4203, 'ã¨ã„': 1890, 'ã¨ã“': -1746, 'ã¨ã¨': -2279, 'ã¨ã®': 720, 'ã¨ã¿': 5168, 'ã¨ã‚‚': -3941, 'ãªã„': -2488, 'ãªãŒ': -1313, 'ãªã©': -6509, 'ãªã®': 2614, 'ãªã‚“': 3099, 'ã«ãŠ': -1615, 'ã«ã—': 2748, 'ã«ãª': 2454, 'ã«ã‚ˆ': -7236, 'ã«å¯¾': -14943, 'ã«å¾“': -4688, 'ã«é–¢': -11388, 'ã®ã‹': 2093, 'ã®ã§': -7059, 'ã®ã«': -6041, 'ã®ã®': -6125, 'ã¯ã„': 1073, 'ã¯ãŒ': -1033, 'ã¯ãš': -2532, 'ã°ã‚Œ': 1813, 'ã¾ã—': -1316, 'ã¾ã§': -6621, 'ã¾ã‚Œ': 5409, 'ã‚ã¦': -3153, 'ã‚‚ã„': 2230, 'ã‚‚ã®': -10713, 'らã‹': -944, 'らã—': -1611, 'らã«': -1897, 'ã‚Šã—': 651, 'ã‚Šã¾': 1620, 'ã‚ŒãŸ': 4270, 'ã‚Œã¦': 849, 'ã‚Œã°': 4114, 'ã‚ã†': 6067, 'ã‚ã‚Œ': 7901, 'を通': -11877, 'ã‚“ã ': 728, 'ã‚“ãª': -4115, '一人': 602, '一方': -1375, '一日': 970, '一部': -1051, '上ãŒ': -4479, '会社': -1116, '出ã¦': 2163, '分ã®': -7758, 'åŒå…š': 970, 'åŒæ—¥': -913, '大阪': -2471, '委員': -1250, 'å°‘ãª': -1050, '年度': -8669, 'å¹´é–“': -1626, '府県': -2363, '手権': -1982, 'æ–°èž': -4066, '日新': -722, '日本': -7068, '日米': 3372, '曜日': -601, 'æœé®®': -2355, '本人': -2697, 'æ±äº¬': -1543, '然ã¨': -1384, '社会': -1276, 'ç«‹ã¦': -990, '第ã«': -1612, '米国': -4268};
+ this.BW3__ = {'ã‚ãŸ': -2194, 'ã‚ã‚Š': 719, 'ã‚ã‚‹': 3846, 'ã„.': -1185, 'ã„。': -1185, 'ã„ã„': 5308, 'ã„ãˆ': 2079, 'ã„ã': 3029, 'ã„ãŸ': 2056, 'ã„ã£': 1883, 'ã„ã‚‹': 5600, 'ã„ã‚': 1527, 'ã†ã¡': 1117, 'ã†ã¨': 4798, 'ãˆã¨': 1454, 'ã‹ï¼Ž': 2857, 'ã‹ã€‚': 2857, 'ã‹ã‘': -743, 'ã‹ã£': -4098, 'ã‹ã«': -669, 'ã‹ã‚‰': 6520, 'ã‹ã‚Š': -2670, 'ãŒï¼Œ': 1816, 'ãŒã€': 1816, 'ãŒã': -4855, 'ãŒã‘': -1127, 'ãŒã£': -913, 'ãŒã‚‰': -4977, 'ãŒã‚Š': -2064, 'ããŸ': 1645, 'ã‘ã©': 1374, 'ã“ã¨': 7397, 'ã“ã®': 1542, 'ã“ã‚': -2757, 'ã•ã„': -714, 'ã•ã‚’': 976, 'ã—,': 1557, 'ã—ã€': 1557, 'ã—ã„': -3714, 'ã—ãŸ': 3562, 'ã—ã¦': 1449, 'ã—ãª': 2608, 'ã—ã¾': 1200, 'ã™ï¼Ž': -1310, 'ã™ã€‚': -1310, 'ã™ã‚‹': 6521, 'ãšï¼Œ': 3426, 'ãšã€': 3426, 'ãšã«': 841, 'ãã†': 428, 'ãŸï¼Ž': 8875, 'ãŸã€‚': 8875, 'ãŸã„': -594, 'ãŸã®': 812, 'ãŸã‚Š': -1183, 'ãŸã‚‹': -853, 'ã ï¼Ž': 4098, 'ã ã€‚': 4098, 'ã ã£': 1004, 'ã£ãŸ': -4748, 'ã£ã¦': 300, 'ã¦ã„': 6240, 'ã¦ãŠ': 855, 'ã¦ã‚‚': 302, 'ã§ã™': 1437, 'ã§ã«': -1482, 'ã§ã¯': 2295, 'ã¨ã†': -1387, 'ã¨ã—': 2266, 'ã¨ã®': 541, 'ã¨ã‚‚': -3543, 'ã©ã†': 4664, 'ãªã„': 1796, 'ãªã': -903, 'ãªã©': 2135, 'ã«ï¼Œ': -1021, 'ã«ã€': -1021, 'ã«ã—': 1771, 'ã«ãª': 1906, 'ã«ã¯': 2644, 'ã®ï¼Œ': -724, 'ã®ã€': -724, 'ã®å­': -1000, 'ã¯ï¼Œ': 1337, 'ã¯ã€': 1337, 'ã¹ã': 2181, 'ã¾ã—': 1113, 'ã¾ã™': 6943, 'ã¾ã£': -1549, 'ã¾ã§': 6154, 'ã¾ã‚Œ': -793, 'らã—': 1479, 'られ': 6820, 'ã‚‹ã‚‹': 3818, 'れ,': 854, 'ã‚Œã€': 854, 'ã‚ŒãŸ': 1850, 'ã‚Œã¦': 1375, 'ã‚Œã°': -3246, 'れる': 1091, 'ã‚ã‚Œ': -605, 'ã‚“ã ': 606, 'ã‚“ã§': 798, 'カ月': 990, '会議': 860, '入り': 1232, '大会': 2217, '始ã‚': 1681, '市': 965, 'æ–°èž': -5055, '日,': 974, 'æ—¥ã€': 974, '社会': 2024};
+ this.TC1__ = {'AAA': 1093, 'HHH': 1029, 'HHM': 580, 'HII': 998, 'HOH': -390, 'HOM': -331, 'IHI': 1169, 'IOH': -142, 'IOI': -1015, 'IOM': 467, 'MMH': 187, 'OOI': -1832};
+ this.TC2__ = {'HHO': 2088, 'HII': -1023, 'HMM': -1154, 'IHI': -1965, 'KKH': 703, 'OII': -2649};
+ this.TC3__ = {'AAA': -294, 'HHH': 346, 'HHI': -341, 'HII': -1088, 'HIK': 731, 'HOH': -1486, 'IHH': 128, 'IHI': -3041, 'IHO': -1935, 'IIH': -825, 'IIM': -1035, 'IOI': -542, 'KHH': -1216, 'KKA': 491, 'KKH': -1217, 'KOK': -1009, 'MHH': -2694, 'MHM': -457, 'MHO': 123, 'MMH': -471, 'NNH': -1689, 'NNO': 662, 'OHO': -3393};
+ this.TC4__ = {'HHH': -203, 'HHI': 1344, 'HHK': 365, 'HHM': -122, 'HHN': 182, 'HHO': 669, 'HIH': 804, 'HII': 679, 'HOH': 446, 'IHH': 695, 'IHO': -2324, 'IIH': 321, 'III': 1497, 'IIO': 656, 'IOO': 54, 'KAK': 4845, 'KKA': 3386, 'KKK': 3065, 'MHH': -405, 'MHI': 201, 'MMH': -241, 'MMM': 661, 'MOM': 841};
+ this.TQ1__ = {'BHHH': -227, 'BHHI': 316, 'BHIH': -132, 'BIHH': 60, 'BIII': 1595, 'BNHH': -744, 'BOHH': 225, 'BOOO': -908, 'OAKK': 482, 'OHHH': 281, 'OHIH': 249, 'OIHI': 200, 'OIIH': -68};
+ this.TQ2__ = {'BIHH': -1401, 'BIII': -1033, 'BKAK': -543, 'BOOO': -5591};
+ this.TQ3__ = {'BHHH': 478, 'BHHM': -1073, 'BHIH': 222, 'BHII': -504, 'BIIH': -116, 'BIII': -105, 'BMHI': -863, 'BMHM': -464, 'BOMH': 620, 'OHHH': 346, 'OHHI': 1729, 'OHII': 997, 'OHMH': 481, 'OIHH': 623, 'OIIH': 1344, 'OKAK': 2792, 'OKHH': 587, 'OKKA': 679, 'OOHH': 110, 'OOII': -685};
+ this.TQ4__ = {'BHHH': -721, 'BHHM': -3604, 'BHII': -966, 'BIIH': -607, 'BIII': -2181, 'OAAA': -2763, 'OAKK': 180, 'OHHH': -294, 'OHHI': 2446, 'OHHO': 480, 'OHIH': -1573, 'OIHH': 1935, 'OIHI': -493, 'OIIH': 626, 'OIII': -4007, 'OKAK': -8156};
+ this.TW1__ = {'ã«ã¤ã„': -4681, 'æ±äº¬éƒ½': 2026};
+ this.TW2__ = {'ã‚る程': -2049, 'ã„ã£ãŸ': -1256, 'ã“ã‚ãŒ': -2434, 'ã—ょã†': 3873, 'ãã®å¾Œ': -4430, 'ã ã£ã¦': -1049, 'ã¦ã„ãŸ': 1833, 'ã¨ã—ã¦': -4657, 'ã¨ã‚‚ã«': -4517, 'ã‚‚ã®ã§': 1882, '一気ã«': -792, 'åˆã‚ã¦': -1512, 'åŒæ™‚ã«': -8097, '大ããª': -1255, '対ã—ã¦': -2721, '社会党': -3216};
+ this.TW3__ = {'ã„ãŸã ': -1734, 'ã—ã¦ã„': 1314, 'ã¨ã—ã¦': -4314, 'ã«ã¤ã„': -5483, 'ã«ã¨ã£': -5989, 'ã«å½“ãŸ': -6247, 'ã®ã§ï¼Œ': -727, 'ã®ã§ã€': -727, 'ã®ã‚‚ã®': -600, 'ã‚Œã‹ã‚‰': -3752, 'å二月': -2287};
+ this.TW4__ = {'ã„ã†ï¼Ž': 8576, 'ã„ã†ã€‚': 8576, 'ã‹ã‚‰ãª': -2348, 'ã—ã¦ã„': 2958, 'ãŸãŒï¼Œ': 1516, 'ãŸãŒã€': 1516, 'ã¦ã„ã‚‹': 1538, 'ã¨ã„ã†': 1349, 'ã¾ã—ãŸ': 5543, 'ã¾ã›ã‚“': 1097, 'よã†ã¨': -4258, 'よるã¨': 5865};
+ this.UC1__ = {'A': 484, 'K': 93, 'M': 645, 'O': -505};
+ this.UC2__ = {'A': 819, 'H': 1059, 'I': 409, 'M': 3987, 'N': 5775, 'O': 646};
+ this.UC3__ = {'A': -1370, 'I': 2311};
+ this.UC4__ = {'A': -2643, 'H': 1809, 'I': -1032, 'K': -3450, 'M': 3565, 'N': 3876, 'O': 6646};
+ this.UC5__ = {'H': 313, 'I': -1238, 'K': -799, 'M': 539, 'O': -831};
+ this.UC6__ = {'H': -506, 'I': -253, 'K': 87, 'M': 247, 'O': -387};
+ this.UP1__ = {'O': -214};
+ this.UP2__ = {'B': 69, 'O': 935};
+ this.UP3__ = {'B': 189};
+ this.UQ1__ = {'BH': 21, 'BI': -12, 'BK': -99, 'BN': 142, 'BO': -56, 'OH': -95, 'OI': 477, 'OK': 410, 'OO': -2422};
+ this.UQ2__ = {'BH': 216, 'BI': 113, 'OK': 1759};
+ this.UQ3__ = {'BA': -479, 'BH': 42, 'BI': 1913, 'BK': -7198, 'BM': 3160, 'BN': 6427, 'BO': 14761, 'OI': -827, 'ON': -3212};
+ this.UW1__ = {',': 156, 'ã€': 156, 'ï½¢': -463, 'ã‚': -941, 'ã†': -127, 'ãŒ': -553, 'ã': 121, 'ã“': 505, 'ã§': -201, 'ã¨': -547, 'ã©': -123, 'ã«': -789, 'ã®': -185, 'ã¯': -847, 'ã‚‚': -466, 'ã‚„': -470, 'よ': 182, 'ら': -292, 'ã‚Š': 208, 'ã‚Œ': 169, 'ã‚’': -446, 'ã‚“': -137, '・': -135, '主': -402, '京': -268, '区': -912, 'åˆ': 871, '国': -460, '大': 561, '委': 729, '市': -411, 'æ—¥': -141, 'ç†': 361, '生': -408, '県': -386, '都': -718};
+ this.UW2__ = {',': -829, 'ã€': -829, '〇': 892, 'ï½¢': -645, 'ï½£': 3145, 'ã‚': -538, 'ã„': 505, 'ã†': 134, 'ãŠ': -502, 'ã‹': 1454, 'ãŒ': -856, 'ã': -412, 'ã“': 1141, 'ã•': 878, 'ã–': 540, 'ã—': 1529, 'ã™': -675, 'ã›': 300, 'ã': -1011, 'ãŸ': 188, 'ã ': 1837, 'ã¤': -949, 'ã¦': -291, 'ã§': -268, 'ã¨': -981, 'ã©': 1273, 'ãª': 1063, 'ã«': -1764, 'ã®': 130, 'ã¯': -409, 'ã²': -1273, 'ã¹': 1261, 'ã¾': 600, 'ã‚‚': -1263, 'ã‚„': -402, 'よ': 1639, 'ã‚Š': -579, 'ã‚‹': -694, 'ã‚Œ': 571, 'ã‚’': -2516, 'ã‚“': 2095, 'ã‚¢': -587, 'ã‚«': 306, 'ã‚­': 568, 'ッ': 831, '三': -758, 'ä¸': -2150, '世': -302, '中': -968, '主': -861, '事': 492, '人': -123, '会': 978, 'ä¿': 362, 'å…¥': 548, 'åˆ': -3025, '副': -1566, '北': -3414, '区': -422, '大': -1769, '天': -865, '太': -483, 'å­': -1519, 'å­¦': 760, '実': 1023, 'å°': -2009, '市': -813, 'å¹´': -1060, 'å¼·': 1067, '手': -1519, 'æº': -1033, '政': 1522, 'æ–‡': -1355, 'æ–°': -1682, 'æ—¥': -1815, '明': -1462, '最': -630, 'æœ': -1843, '本': -1650, 'æ±': -931, 'æžœ': -665, '次': -2378, 'æ°‘': -180, 'æ°—': -1740, 'ç†': 752, '発': 529, 'ç›®': -1584, '相': -242, '県': -1165, 'ç«‹': -763, '第': 810, 'ç±³': 509, '自': -1353, 'è¡Œ': 838, '西': -744, '見': -3874, '調': 1010, 'è­°': 1198, 'è¾¼': 3041, 'é–‹': 1758, 'é–“': -1257};
+ this.UW3__ = {'1': -800, ',': 4889, '−': -1723, 'ã€': 4889, '々': -2311, '〇': 5827, 'ï½£': 2670, '〓': -3573, 'ã‚': -2696, 'ã„': 1006, 'ã†': 2342, 'ãˆ': 1983, 'ãŠ': -4864, 'ã‹': -1163, 'ãŒ': 3271, 'ã': 1004, 'ã‘': 388, 'ã’': 401, 'ã“': -3552, 'ã”': -3116, 'ã•': -1058, 'ã—': -395, 'ã™': 584, 'ã›': 3685, 'ã': -5228, 'ãŸ': 842, 'ã¡': -521, 'ã£': -1444, 'ã¤': -1081, 'ã¦': 6167, 'ã§': 2318, 'ã¨': 1691, 'ã©': -899, 'ãª': -2788, 'ã«': 2745, 'ã®': 4056, 'ã¯': 4555, 'ã²': -2171, 'ãµ': -1798, 'ã¸': 1199, 'ã»': -5516, 'ã¾': -4384, 'ã¿': -120, 'ã‚': 1205, 'ã‚‚': 2323, 'ã‚„': -788, 'よ': -202, 'ら': 727, 'ã‚Š': 649, 'ã‚‹': 5905, 'ã‚Œ': 2773, 'ã‚': -1207, 'ã‚’': 6620, 'ã‚“': -518, 'ã‚¢': 551, 'ã‚°': 1319, 'ス': 874, 'ッ': -1350, 'ト': 521, 'ム': 1109, 'ル': 1591, 'ロ': 2201, 'ン': 278, '・': -3794, '一': -1619, '下': -1759, '世': -2087, '両': 3815, '中': 653, '主': -758, '予': -1193, '二': 974, '人': 2742, '今': 792, 'ä»–': 1889, '以': -1368, '低': 811, '何': 4265, '作': -361, 'ä¿': -2439, 'å…ƒ': 4858, 'å…š': 3593, 'å…¨': 1574, 'å…¬': -3030, 'å…­': 755, 'å…±': -1880, '円': 5807, 'å†': 3095, '分': 457, 'åˆ': 2475, '別': 1129, 'å‰': 2286, '副': 4437, '力': 365, 'å‹•': -949, 'å‹™': -1872, '化': 1327, '北': -1038, '区': 4646, 'åƒ': -2309, 'åˆ': -783, 'å”': -1006, 'å£': 483, 'å³': 1233, 'å„': 3588, 'åˆ': -241, 'åŒ': 3906, 'å’Œ': -837, 'å“¡': 4513, '国': 642, 'åž‹': 1389, 'å ´': 1219, '外': -241, '妻': 2016, 'å­¦': -1356, '安': -423, '実': -1008, '家': 1078, 'å°': -513, 'å°‘': -3102, 'å·ž': 1155, '市': 3197, 'å¹³': -1804, 'å¹´': 2416, '広': -1030, '府': 1605, '度': 1452, '建': -2352, '当': -3885, 'å¾—': 1905, 'æ€': -1291, '性': 1822, '戸': -488, '指': -3973, '政': -2013, 'æ•™': -1479, 'æ•°': 3222, 'æ–‡': -1489, 'æ–°': 1764, 'æ—¥': 2099, 'æ—§': 5792, '昨': -661, '時': -1248, '曜': -951, '最': -937, '月': 4125, '期': 360, 'æŽ': 3094, 'æ‘': 364, 'æ±': -805, 'æ ¸': 5156, '森': 2438, '業': 484, 'æ°': 2613, 'æ°‘': -1694, '決': -1073, '法': 1868, 'æµ·': -495, 'ç„¡': 979, '物': 461, '特': -3850, '生': -273, '用': 914, '町': 1215, 'çš„': 7313, 'ç›´': -1835, 'çœ': 792, '県': 6293, '知': -1528, 'ç§': 4231, '税': 401, 'ç«‹': -960, '第': 1201, 'ç±³': 7767, 'ç³»': 3066, 'ç´„': 3663, 'ç´š': 1384, 'çµ±': -4229, 'ç·': 1163, 'ç·š': 1255, '者': 6457, '能': 725, '自': -2869, '英': 785, '見': 1044, '調': -562, '財': -733, 'è²»': 1777, '車': 1835, 'è»': 1375, 'è¾¼': -1504, '通': -1136, 'é¸': -681, '郎': 1026, '郡': 4404, '部': 1200, '金': 2163, 'é•·': 421, 'é–‹': -1432, 'é–“': 1302, 'é–¢': -1282, '雨': 2009, 'é›»': -1045, 'éž': 2066, '駅': 1620};
+ this.UW4__ = {',': 3930, '.': 3508, '―': -4841, 'ã€': 3930, '。': 3508, '〇': 4999, 'ï½¢': 1895, 'ï½£': 3798, '〓': -5156, 'ã‚': 4752, 'ã„': -3435, 'ã†': -640, 'ãˆ': -2514, 'ãŠ': 2405, 'ã‹': 530, 'ãŒ': 6006, 'ã': -4482, 'ãŽ': -3821, 'ã': -3788, 'ã‘': -4376, 'ã’': -4734, 'ã“': 2255, 'ã”': 1979, 'ã•': 2864, 'ã—': -843, 'ã˜': -2506, 'ã™': -731, 'ãš': 1251, 'ã›': 181, 'ã': 4091, 'ãŸ': 5034, 'ã ': 5408, 'ã¡': -3654, 'ã£': -5882, 'ã¤': -1659, 'ã¦': 3994, 'ã§': 7410, 'ã¨': 4547, 'ãª': 5433, 'ã«': 6499, 'ã¬': 1853, 'ã­': 1413, 'ã®': 7396, 'ã¯': 8578, 'ã°': 1940, 'ã²': 4249, 'ã³': -4134, 'ãµ': 1345, 'ã¸': 6665, 'ã¹': -744, 'ã»': 1464, 'ã¾': 1051, 'ã¿': -2082, 'ã‚€': -882, 'ã‚': -5046, 'ã‚‚': 4169, 'ゃ': -2666, 'ã‚„': 2795, 'ょ': -1544, 'よ': 3351, 'ら': -2922, 'ã‚Š': -9726, 'ã‚‹': -14896, 'ã‚Œ': -2613, 'ã‚': -4570, 'ã‚': -1783, 'ã‚’': 13150, 'ã‚“': -2352, 'ã‚«': 2145, 'コ': 1789, 'ã‚»': 1287, 'ッ': -724, 'ト': -403, 'メ': -1635, 'ラ': -881, 'リ': -541, 'ル': -856, 'ン': -3637, '・': -4371, 'ー': -11870, '一': -2069, '中': 2210, '予': 782, '事': -190, '井': -1768, '人': 1036, '以': 544, '会': 950, '体': -1286, '作': 530, 'å´': 4292, 'å…ˆ': 601, 'å…š': -2006, 'å…±': -1212, '内': 584, '円': 788, 'åˆ': 1347, 'å‰': 1623, '副': 3879, '力': -302, 'å‹•': -740, 'å‹™': -2715, '化': 776, '区': 4517, 'å”': 1013, 'å‚': 1555, 'åˆ': -1834, 'å’Œ': -681, 'å“¡': -910, '器': -851, '回': 1500, '国': -619, '園': -1200, '地': 866, 'å ´': -1410, 'å¡': -2094, '士': -1413, '多': 1067, '大': 571, 'å­': -4802, 'å­¦': -1397, '定': -1057, '寺': -809, 'å°': 1910, '屋': -1328, 'å±±': -1500, '島': -2056, 'å·': -2667, '市': 2771, 'å¹´': 374, 'åº': -4556, '後': 456, '性': 553, 'æ„Ÿ': 916, '所': -1566, '支': 856, '改': 787, '政': 2182, 'æ•™': 704, 'æ–‡': 522, 'æ–¹': -856, 'æ—¥': 1798, '時': 1829, '最': 845, '月': -9066, '木': -485, 'æ¥': -442, 'æ ¡': -360, '業': -1043, 'æ°': 5388, 'æ°‘': -2716, 'æ°—': -910, 'æ²¢': -939, '済': -543, '物': -735, '率': 672, 'çƒ': -1267, '生': -1286, '産': -1101, 'ç”°': -2900, '町': 1826, 'çš„': 2586, 'ç›®': 922, 'çœ': -3485, '県': 2997, '空': -867, 'ç«‹': -2112, '第': 788, 'ç±³': 2937, 'ç³»': 786, 'ç´„': 2171, '経': 1146, 'çµ±': -1169, 'ç·': 940, 'ç·š': -994, 'ç½²': 749, '者': 2145, '能': -730, '般': -852, 'è¡Œ': -792, 'è¦': 792, 'è­¦': -1184, 'è­°': -244, 'è°·': -1000, '賞': 730, '車': -1481, 'è»': 1158, '輪': -1433, 'è¾¼': -3370, 'è¿‘': 929, 'é“': -1291, 'é¸': 2596, '郎': -4866, '都': 1192, '野': -1100, '銀': -2213, 'é•·': 357, 'é–“': -2344, '院': -2297, 'éš›': -2604, 'é›»': -878, 'é ˜': -1659, 'é¡Œ': -792, '館': -1984, '首': 1749, '高': 2120};
+ this.UW5__ = {'1': -514, ',': 465, '.': -299, 'E2': -32768, 'ï¼½': -2762, 'ã€': 465, '。': -299, 'ï½¢': 363, 'ã‚': 1655, 'ã„': 331, 'ã†': -503, 'ãˆ': 1199, 'ãŠ': 527, 'ã‹': 647, 'ãŒ': -421, 'ã': 1624, 'ãŽ': 1971, 'ã': 312, 'ã’': -983, 'ã•': -1537, 'ã—': -1371, 'ã™': -852, 'ã ': -1186, 'ã¡': 1093, 'ã£': 52, 'ã¤': 921, 'ã¦': -18, 'ã§': -850, 'ã¨': -127, 'ã©': 1682, 'ãª': -787, 'ã«': -1224, 'ã®': -635, 'ã¯': -578, 'ã¹': 1001, 'ã¿': 502, 'ã‚': 865, 'ゃ': 3350, 'ょ': 854, 'ã‚Š': -208, 'ã‚‹': 429, 'ã‚Œ': 504, 'ã‚': 419, 'ã‚’': -1264, 'ã‚“': 327, 'イ': 241, 'ル': 451, 'ン': -343, '中': -871, '京': 722, '会': -1153, 'å…š': -654, 'å‹™': 3519, '区': -901, 'å‘Š': 848, 'å“¡': 2104, '大': -1296, 'å­¦': -548, '定': 1785, 'åµ': -1304, '市': -2991, '席': 921, 'å¹´': 1763, 'æ€': 872, '所': -814, '挙': 1618, 'æ–°': -1682, 'æ—¥': 218, '月': -4353, '査': 932, 'æ ¼': 1356, 'æ©Ÿ': -1508, 'æ°': -1347, 'ç”°': 240, '町': -3912, 'çš„': -3149, '相': 1319, 'çœ': -1052, '県': -4003, 'ç ”': -997, '社': -278, '空': -813, 'çµ±': 1955, '者': -2233, '表': 663, '語': -1073, 'è­°': 1219, 'é¸': -1018, '郎': -368, 'é•·': 786, 'é–“': 1191, 'é¡Œ': 2368, '館': -689};
+ this.UW6__ = {'1': -270, ',': 227, '.': 808, 'E1': 306, 'ã€': 227, '。': 808, 'ã‚': -307, 'ã†': 189, 'ã‹': 241, 'ãŒ': -73, 'ã': -121, 'ã“': -200, 'ã˜': 1782, 'ã™': 383, 'ãŸ': -428, 'ã£': 573, 'ã¦': -1014, 'ã§': 101, 'ã¨': -105, 'ãª': -253, 'ã«': -149, 'ã®': -417, 'ã¯': -236, 'ã‚‚': -206, 'ã‚Š': 187, 'ã‚‹': -135, 'ã‚’': 195, 'ル': -673, 'ン': -496, '一': -277, '中': 201, '件': -800, '会': 624, 'å‰': 302, '区': 1792, 'å“¡': -1212, '委': 798, 'å­¦': -960, '市': 887, '広': -695, '後': 535, '業': -697, '相': 753, '社': -507, 'ç¦': 974, '空': -822, '者': 1811, '連': 463, '郎': 1082};
+
+ return this;
+};
+
+util.inherits(TokenizerJa, Tokenizer);
+
+
+/**
+ * @param {string} str
+ * @return {string}
+ * @private
+ */
+TokenizerJa.prototype.ctype_ = function(str) {
+ for (var i = 0, length = this.chartype_.length; i < length; i++) {
+ if (str.match(this.chartype_[i][0])) {
+ return this.chartype_[i][1];
+ }
+ }
+ return 'O';
+};
+
+
+/**
+ * @param {string} v
+ * @return {number}
+ * @private
+ */
+TokenizerJa.prototype.ts_ = function(v) {
+ if (v) { return v; }
+ return 0;
+};
+
+
+/**
+ * Remove punctuations signs from tokens.
+ *
+ * @param {Array.<string>} tokens An array of tokens.
+ * @return {Array.<string>} An array of tokens.
+ * @private
+ */
+TokenizerJa.prototype.removePuncTokens = function(tokens) {
+ return tokens
+ .map(function(token) {
+ return token.replace(/[_ï¼ãƒ»ï¼Œã€ï¼›ï¼šï¼ï¼Ÿï¼Žã€‚()[]{ï½ï½¢ï½£ï¼ ï¼Šï¼¼ï¼ï¼†ï¼ƒï¼…`^+<ï¼ï¼žï½œï½žâ‰ªâ‰«â”€ï¼„"_\-ï½¥,、;:!?.。()[\]{}「ã€@*\/&#%`^+<=>|~«»$"\s]+/g, '');
+ })
+ .filter(function(token) {
+ return token != '';
+ });
+};
+
+
+/**
+ * @param {string} text
+ * @return {Array.<string>}
+ */
+TokenizerJa.prototype.tokenize = function(text) {
+ if (text == null || text == undefined || text == '') {
+ return [];
+ }
+ text = normalize(text);
+ var result = [];
+ var seg = ['B3', 'B2', 'B1'];
+ var ctype = ['O', 'O', 'O'];
+ var o = text.split('');
+ var i;
+ var length;
+ for (i = 0, length = o.length; i < length; ++i) {
+ seg.push(o[i]);
+ ctype.push(this.ctype_(o[i]));
+ }
+ seg.push('E1');
+ seg.push('E2');
+ seg.push('E3');
+ ctype.push('O');
+ ctype.push('O');
+ ctype.push('O');
+ var word = seg[3];
+ var p1 = 'U';
+ var p2 = 'U';
+ var p3 = 'U';
+ for (i = 4, length = seg.length - 3; i < length; ++i) {
+ var score = this.BIAS__;
+ var w1 = seg[i - 3];
+ var w2 = seg[i - 2];
+ var w3 = seg[i - 1];
+ var w4 = seg[i];
+ var w5 = seg[i + 1];
+ var w6 = seg[i + 2];
+ var c1 = ctype[i - 3];
+ var c2 = ctype[i - 2];
+ var c3 = ctype[i - 1];
+ var c4 = ctype[i];
+ var c5 = ctype[i + 1];
+ var c6 = ctype[i + 2];
+ score += this.ts_(this.UP1__[p1]);
+ score += this.ts_(this.UP2__[p2]);
+ score += this.ts_(this.UP3__[p3]);
+ score += this.ts_(this.BP1__[p1 + p2]);
+ score += this.ts_(this.BP2__[p2 + p3]);
+ score += this.ts_(this.UW1__[w1]);
+ score += this.ts_(this.UW2__[w2]);
+ score += this.ts_(this.UW3__[w3]);
+ score += this.ts_(this.UW4__[w4]);
+ score += this.ts_(this.UW5__[w5]);
+ score += this.ts_(this.UW6__[w6]);
+ score += this.ts_(this.BW1__[w2 + w3]);
+ score += this.ts_(this.BW2__[w3 + w4]);
+ score += this.ts_(this.BW3__[w4 + w5]);
+ score += this.ts_(this.TW1__[w1 + w2 + w3]);
+ score += this.ts_(this.TW2__[w2 + w3 + w4]);
+ score += this.ts_(this.TW3__[w3 + w4 + w5]);
+ score += this.ts_(this.TW4__[w4 + w5 + w6]);
+ score += this.ts_(this.UC1__[c1]);
+ score += this.ts_(this.UC2__[c2]);
+ score += this.ts_(this.UC3__[c3]);
+ score += this.ts_(this.UC4__[c4]);
+ score += this.ts_(this.UC5__[c5]);
+ score += this.ts_(this.UC6__[c6]);
+ score += this.ts_(this.BC1__[c2 + c3]);
+ score += this.ts_(this.BC2__[c3 + c4]);
+ score += this.ts_(this.BC3__[c4 + c5]);
+ score += this.ts_(this.TC1__[c1 + c2 + c3]);
+ score += this.ts_(this.TC2__[c2 + c3 + c4]);
+ score += this.ts_(this.TC3__[c3 + c4 + c5]);
+ score += this.ts_(this.TC4__[c4 + c5 + c6]);
+ //score += this.ts_(this.TC5__[c4 + c5 + c6]);
+ score += this.ts_(this.UQ1__[p1 + c1]);
+ score += this.ts_(this.UQ2__[p2 + c2]);
+ score += this.ts_(this.UQ3__[p3 + c3]);
+ score += this.ts_(this.BQ1__[p2 + c2 + c3]);
+ score += this.ts_(this.BQ2__[p2 + c3 + c4]);
+ score += this.ts_(this.BQ3__[p3 + c2 + c3]);
+ score += this.ts_(this.BQ4__[p3 + c3 + c4]);
+ score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
+ score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
+ score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
+ score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
+ var p = 'O';
+ if (score > 0) {
+ result.push(word);
+ word = '';
+ p = 'B';
+ }
+ p1 = p2;
+ p2 = p3;
+ p3 = p;
+ word += seg[i];
+ }
+ result.push(word);
+
+ result = this.removePuncTokens(result);
+
+ return result;
+};
+
+module.exports = TokenizerJa;
+
+},{"util":40,"./tokenizer":52,"../normalizers/normalizer_ja":37}],24:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var SingularPluralInflector = require('./singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('./form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ }
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ }
+}
+
+var NounInflector = function() {
+ this.ambiguous = [
+ 'bison', 'bream', 'carp', 'chassis', 'cod', 'corps', 'debris', 'deer',
+ 'diabetes', 'equipment', 'elk', 'fish', 'flounder', 'gallows', 'graffiti',
+ 'headquarters', 'herpes', 'highjinks', 'homework', 'information',
+ 'mackerel', 'mews', 'money', 'news', 'rice', 'rabies', 'salmon', 'series',
+ 'sheep', 'shrimp', 'species', 'swine', 'trout', 'tuna', 'whiting', 'wildebeest'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular("child", "children");
+ this.addIrregular("man", "men");
+ this.addIrregular("person", "people");
+ this.addIrregular("sex", "sexes");
+ this.addIrregular("mouse", "mice");
+ this.addIrregular("ox", "oxen");
+ this.addIrregular("foot", "feet");
+ this.addIrregular("tooth", "teeth");
+ this.addIrregular("goose", "geese");
+
+ // see if it is possible to unify the creation of both the singular and
+ // plural regexes or maybe even just have one list. with a complete list
+ // of rules it may only be possible for some regular forms, but worth a shot
+ this.pluralForms.regularForms.push([/y$/i, 'ies']);
+ this.pluralForms.regularForms.push([/ife$/i, 'ives']);
+ this.pluralForms.regularForms.push([/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae']);
+ this.pluralForms.regularForms.push([/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i']);
+ this.pluralForms.regularForms.push([/(buffal|tomat)o$/i, '$1oes']);
+ this.pluralForms.regularForms.push([/(sis)$/i, 'ses']);
+ this.pluralForms.regularForms.push([/(matr|vert|ind)(ix|ex)$/i, '$1ices']);
+ this.pluralForms.regularForms.push([/(x|ch|ss|sh|s|z)$/i, '$1es']);
+ this.pluralForms.regularForms.push([/^(?!talis|.*hu)(.*)man$/i, '$1men']);
+ this.pluralForms.regularForms.push([/(.*)/i, '$1s']);
+
+ this.singularForms.regularForms.push([/([^v])ies$/i, '$1y']);
+ this.singularForms.regularForms.push([/ives$/i, 'ife']);
+ this.singularForms.regularForms.push([/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a']);
+ this.singularForms.regularForms.push([/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us']);
+ this.singularForms.regularForms.push([/(buffal|tomat)(oes)$/i, '$1o']);
+ this.singularForms.regularForms.push([/(analy|naly|synop|parenthe|diagno|the)ses$/i, '$1sis']);
+ this.singularForms.regularForms.push([/(vert|ind)(ices)$/i, '$1ex']);
+ // our pluralizer won''t cause this form of appendix (appendicies)
+ // but we should handle it
+ this.singularForms.regularForms.push([/(matr|append)(ices)$/i, '$1ix']);
+ this.singularForms.regularForms.push([/(x|ch|ss|sh|s|z)es$/i, '$1']);
+ this.singularForms.regularForms.push([/men$/i, 'man']);
+ this.singularForms.regularForms.push([/s$/i, '']);
+
+ this.pluralize = function (token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"./singular_plural_inflector":53,"./form_set":54}],27:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+ SingularPluralInflector = require('./singular_plural_inflector'),
+ FormSet = require('./form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizePresentVerb = function() {
+ return inflector.singularize(this);
+ }
+
+ String.prototype.pluralizePresentVerb = function() {
+ return inflector.pluralize(this);
+ }
+}
+
+var VerbInflector = function() {
+ this.ambiguous = [
+ 'will'
+ ];
+
+ this.attach = attach;
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.addIrregular("am", "are");
+ this.addIrregular("is", "are");
+ this.addIrregular("was", "were");
+
+ this.singularForms.regularForms.push([/ed$/i, 'ed']);
+ this.singularForms.regularForms.push([/ss$/i, 'sses']);
+ this.singularForms.regularForms.push([/x$/i, 'xes']);
+ this.singularForms.regularForms.push([/(h|z|o)$/i, '$1es']);
+ this.singularForms.regularForms.push([/$zz/i, 'zzes']);
+ this.singularForms.regularForms.push([/$/i, 's']);
+
+ this.pluralForms.regularForms.push([/sses$/i, 'ss']);
+ this.pluralForms.regularForms.push([/xes$/i, 'x']);
+ this.pluralForms.regularForms.push([/([cs])hes$/i, '$1h']);
+ this.pluralForms.regularForms.push([/zzes$/i, 'zz']);
+ this.pluralForms.regularForms.push([/([^h|z|o])es$/i, '$1e']);
+ this.pluralForms.regularForms.push([/e?s$/i, '']);
+};
+
+util.inherits(VerbInflector, SingularPluralInflector);
+
+module.exports = VerbInflector;
+
+},{"util":40,"./singular_plural_inflector":53,"./form_set":54}],37:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * Normalize Japanese inputs and expose function to perform several conversions.
+ *
+ * Note: The space character is treated like a roman character as it usually
+ * has the same width as them in Japanese texts.
+ *
+ * \@todo Replace characters range from ㈠ to ㉃, ㊀ to ㊰ and ㇰ to ㇿ.
+ * \@todo Lazy initializations of conversionTables and converters.
+ * \@todo Would fixHalfwidthKana be useful?
+ *
+ * Descriptions of functions exposed:
+ * normalizeJapanese 「全角ã€è‹±å­—・数字を「åŠè§’ã€ã€ã€ŒåŠè§’ã€è¨˜ãƒ»ã‚«ã‚¿ã‚«ãƒŠã‚’「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.alphabet 「全角ã€è‹±å­—を「åŠè§’ã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.alphabet 「åŠè§’ã€è‹±å­—を「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.numbers 「全角ã€æ•°å­—を「åŠè§’ã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.numbers 「åŠè§’ã€æ•°å­—を「全角ã€ã«å¤‰æ› 「全角ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’「åŠè§’ã€
+ * converters.fullwidthToHalfwidth.punctuation 「全角ã€è¨˜å·ã‚’「åŠè§’ã€ã«å¤‰æ› 「åŠè§’ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’「全角ã€
+ * converters.halfwidthToFullwidth.punctuation 「åŠè§’ã€è¨˜å·ã‚’「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.katakana 「全角カタカナã€ã‚’「åŠè§’カタカナã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.katakana 「åŠè§’カタカナã€ã‚’「全角カタカナã€ã«å¤‰æ›
+ * converters.hiraganaToKatakana 「カタカナã€ã‚’「ã²ã‚‰ãŒãªã€ã«å¤‰æ›
+ * converters.katakanaToHiragana 「ã²ã‚‰ãŒãªã€ã‚’「カタカナã€ã«å¤‰æ›
+ */
+
+var flip = require('../util/utils.js').flip;
+var merge = require('../util/utils.js').merge;
+var replacer = require('../util/utils').replacer;
+
+// From http://fernweh.jp/b/mb_convert_kana_js/
+var conversionTables = {
+ fullwidthToHalfwidth: {
+ alphabet: {
+ 'ï½': 'a',
+ 'b': 'b',
+ 'c': 'c',
+ 'd': 'd',
+ 'ï½…': 'e',
+ 'f': 'f',
+ 'g': 'g',
+ 'h': 'h',
+ 'i': 'i',
+ 'j': 'j',
+ 'k': 'k',
+ 'l': 'l',
+ 'ï½': 'm',
+ 'n': 'n',
+ 'ï½': 'o',
+ 'ï½': 'p',
+ 'q': 'q',
+ 'ï½’': 'r',
+ 's': 's',
+ 'ï½”': 't',
+ 'u': 'u',
+ 'ï½–': 'v',
+ 'ï½—': 'w',
+ 'x': 'x',
+ 'ï½™': 'y',
+ 'z': 'z',
+ 'A': 'A',
+ 'ï¼¢': 'B',
+ 'ï¼£': 'C',
+ 'D': 'D',
+ 'ï¼¥': 'E',
+ 'F': 'F',
+ 'G': 'G',
+ 'H': 'H',
+ 'I': 'I',
+ 'J': 'J',
+ 'K': 'K',
+ 'L': 'L',
+ 'ï¼­': 'M',
+ 'ï¼®': 'N',
+ 'O': 'O',
+ 'ï¼°': 'P',
+ 'ï¼±': 'Q',
+ 'ï¼²': 'R',
+ 'ï¼³': 'S',
+ 'ï¼´': 'T',
+ 'ï¼µ': 'U',
+ 'V': 'V',
+ 'ï¼·': 'W',
+ 'X': 'X',
+ 'ï¼¹': 'Y',
+ 'Z': 'Z',
+ ' ': ' ' // Fullwidth space
+ },
+
+ numbers: {
+ 'ï¼': '0',
+ '1': '1',
+ 'ï¼’': '2',
+ '3': '3',
+ 'ï¼”': '4',
+ '5': '5',
+ 'ï¼–': '6',
+ 'ï¼—': '7',
+ '8': '8',
+ 'ï¼™': '9'
+ },
+
+ punctuation: {
+ '_': '_',
+ 'ï¼': '-',
+ '・': '・',
+ ',': ',',
+ 'ã€': '、',
+ 'ï¼›': ';',
+ ':': ':',
+ 'ï¼': '!',
+ '?': '?',
+ '.': '.',
+ '。': '。',
+ '(': '(',
+ ')': ')',
+ 'ï¼»': '[',
+ 'ï¼½': ']',
+ 'ï½›': '{',
+ 'ï½': '}',
+ '「': '「',
+ 'ã€': 'ï½£',
+ 'ï¼ ': '@',
+ '*': '*',
+ 'ï¼¼': '\\',
+ 'ï¼': '/',
+ '&': '&',
+ '#': '#',
+ 'ï¼…': '%',
+ 'ï½€': '`',
+ 'ï¼¾': '^',
+ '+': '+',
+ '<': '<',
+ 'ï¼': '=',
+ '>': '>',
+ '|': '|',
+ '~': '~',
+ '≪': '«',
+ '≫': '»',
+ '─': '-',
+ '$': '$',
+ '"': '"'
+ },
+
+ katakana: {
+ '゛': '゙',
+ '゜': '゚',
+ 'ー': 'ー',
+
+ 'ヴ': 'ヴ',
+ 'ガ': 'ガ',
+ 'ギ': 'ギ',
+ 'グ': 'グ',
+ 'ゲ': 'ゲ',
+ 'ゴ': 'ゴ',
+ 'ザ': 'ザ',
+ 'ジ': 'ジ',
+ 'ズ': 'ズ',
+ 'ゼ': 'ゼ',
+ 'ゾ': 'ゾ',
+ 'ダ': 'ダ',
+ 'ヂ': 'ï¾ï¾ž',
+ 'ヅ': 'ヅ',
+ 'デ': 'デ',
+ 'ド': 'ド',
+ 'ãƒ': 'バ',
+ 'パ': 'パ',
+ 'ビ': 'ビ',
+ 'ピ': 'ピ',
+ 'ブ': 'ブ',
+ 'プ': 'プ',
+ 'ベ': 'ï¾ï¾ž',
+ 'ペ': 'ï¾ï¾Ÿ',
+ 'ボ': 'ボ',
+ 'ãƒ': 'ポ',
+
+ 'ァ': 'ァ',
+ 'ã‚¢': 'ï½±',
+ 'ィ': 'ィ',
+ 'イ': 'イ',
+ 'ゥ': 'ゥ',
+ 'ウ': 'ウ',
+ 'ェ': 'ェ',
+ 'エ': 'エ',
+ 'ォ': 'ォ',
+ 'オ': 'オ',
+ 'カ': 'カ',
+ 'ã‚­': 'ï½·',
+ 'ク': 'ク',
+ 'ケ': 'ケ',
+ 'コ': 'コ',
+ 'サ': 'サ',
+ 'ã‚·': 'ï½¼',
+ 'ス': 'ス',
+ 'ã‚»': 'ï½¾',
+ 'ソ': 'ソ',
+ 'ã‚¿': 'ï¾€',
+ 'ãƒ': 'ï¾',
+ 'ッ': 'ッ',
+ 'ツ': 'ツ',
+ 'テ': 'テ',
+ 'ト': 'ト',
+ 'ナ': 'ナ',
+ 'ニ': 'ニ',
+ 'ヌ': 'ヌ',
+ 'ãƒ': 'ネ',
+ 'ノ': 'ノ',
+ 'ãƒ': 'ハ',
+ 'ヒ': 'ヒ',
+ 'フ': 'フ',
+ 'ヘ': 'ï¾',
+ 'ホ': 'ホ',
+ 'マ': 'ï¾',
+ 'ミ': 'ï¾',
+ 'ム': 'ム',
+ 'メ': 'メ',
+ 'モ': 'モ',
+ 'ャ': 'ャ',
+ 'ヤ': 'ヤ',
+ 'ュ': 'ュ',
+ 'ユ': 'ユ',
+ 'ョ': 'ョ',
+ 'ヨ': 'ヨ',
+ 'ラ': 'ラ',
+ 'リ': 'リ',
+ 'ル': 'ル',
+ 'レ': 'レ',
+ 'ロ': 'ロ',
+ 'ワ': 'ワ',
+ 'ヲ': 'ヲ',
+ 'ン': 'ï¾'
+ }
+ },
+
+ halfwidthToFullwidth: {}
+};
+
+var fixFullwidthKana = {
+ 'ã‚ã‚›': 'ã‚ž',
+ 'ヽ゛': 'ヾ',
+
+ 'ã†ã‚›': 'ã‚”',
+ 'ã‹ã‚›': 'ãŒ',
+ 'ãã‚›': 'ãŽ',
+ 'ãã‚›': 'ã',
+ 'ã‘ã‚›': 'ã’',
+ 'ã“ã‚›': 'ã”',
+ 'ã•ã‚›': 'ã–',
+ 'ã—ã‚›': 'ã˜',
+ 'ã™ã‚›': 'ãš',
+ 'ã›ã‚›': 'ãœ',
+ 'ãã‚›': 'ãž',
+ 'ãŸã‚›': 'ã ',
+ 'ã¡ã‚›': 'ã¢',
+ 'ã¤ã‚›': 'ã¥',
+ 'ã¦ã‚›': 'ã§',
+ 'ã¨ã‚›': 'ã©',
+ 'ã¯ã‚›': 'ã°',
+ 'ã¯ã‚œ': 'ã±',
+ 'ã²ã‚›': 'ã³',
+ 'ã²ã‚œ': 'ã´',
+ 'ãµã‚›': 'ã¶',
+ 'ãµã‚œ': 'ã·',
+ 'ã¸ã‚›': 'ã¹',
+ 'ã¸ã‚œ': 'ãº',
+ 'ã»ã‚›': 'ã¼',
+ 'ã»ã‚œ': 'ã½',
+ 'ã£ãª': 'ã‚“ãª',
+ 'ã£ã«': 'ã‚“ã«',
+ 'ã£ã¬': 'ã‚“ã¬',
+ 'ã£ã­': 'ã‚“ã­',
+ 'ã£ã®': 'ã‚“ã®',
+
+ 'ウ゛': 'ヴ',
+ 'カ゛': 'ガ',
+ 'ã‚­ã‚›': 'ã‚®',
+ 'ク゛': 'グ',
+ 'ケ゛': 'ゲ',
+ 'コ゛': 'ゴ',
+ 'サ゛': 'ザ',
+ 'シ゛': 'ジ',
+ 'ス゛': 'ズ',
+ 'セ゛': 'ゼ',
+ 'ソ゛': 'ゾ',
+ 'タ゛': 'ダ',
+ 'ãƒã‚›': 'ヂ',
+ 'ツ゛': 'ヅ',
+ 'テ゛': 'デ',
+ 'ト゛': 'ド',
+ 'ãƒã‚›': 'ãƒ',
+ 'ãƒã‚œ': 'パ',
+ 'ヒ゛': 'ビ',
+ 'ヒ゜': 'ピ',
+ 'フ゛': 'ブ',
+ 'フ゜': 'プ',
+ 'ヘ゛': 'ベ',
+ 'ヘ゜': 'ペ',
+ 'ホ゛': 'ボ',
+ 'ホ゜': 'ãƒ',
+ 'ッナ': 'ンナ',
+ 'ッニ': 'ンニ',
+ 'ッヌ': 'ンヌ',
+ 'ッãƒ': 'ンãƒ',
+ 'ッノ': 'ンノ'
+};
+
+var fixCompositeSymbolsTable = {
+ '㋀': '1月',
+ 'ã‹': '2月',
+ '㋂': '3月',
+ '㋃': '4月',
+ '㋄': '5月',
+ '㋅': '6月',
+ '㋆': '7月',
+ '㋇': '8月',
+ '㋈': '9月',
+ '㋉': '10月',
+ '㋊': '11月',
+ '㋋': '12月',
+
+ 'ã ': '1æ—¥',
+ 'ã¡': '2æ—¥',
+ 'ã¢': '3æ—¥',
+ 'ã£': '4æ—¥',
+ 'ã¤': '5æ—¥',
+ 'ã¥': '6æ—¥',
+ 'ã¦': '7æ—¥',
+ 'ã§': '8æ—¥',
+ 'ã¨': '9æ—¥',
+ 'ã©': '10æ—¥',
+ 'ãª': '11æ—¥',
+ 'ã«': '12æ—¥',
+ 'ã¬': '13æ—¥',
+ 'ã­': '14æ—¥',
+ 'ã®': '15æ—¥',
+ 'ã¯': '16æ—¥',
+ 'ã°': '17æ—¥',
+ 'ã±': '18æ—¥',
+ 'ã²': '19æ—¥',
+ 'ã³': '20æ—¥',
+ 'ã´': '21æ—¥',
+ 'ãµ': '22æ—¥',
+ 'ã¶': '23æ—¥',
+ 'ã·': '24æ—¥',
+ 'ã¸': '25æ—¥',
+ 'ã¹': '26æ—¥',
+ 'ãº': '27æ—¥',
+ 'ã»': '28æ—¥',
+ 'ã¼': '29æ—¥',
+ 'ã½': '30æ—¥',
+ 'ã¾': '31æ—¥',
+
+ 'ã˜': '0点',
+ 'ã™': '1点',
+ 'ãš': '2点',
+ 'ã›': '3点',
+ 'ãœ': '4点',
+ 'ã': '5点',
+ 'ãž': '6点',
+ 'ãŸ': '7点',
+ 'ã ': '8点',
+ 'ã¡': '9点',
+ 'ã¢': '10点',
+ 'ã£': '11点',
+ 'ã¤': '12点',
+ 'ã¥': '13点',
+ 'ã¦': '14点',
+ 'ã§': '15点',
+ 'ã¨': '16点',
+ 'ã©': '17点',
+ 'ãª': '18点',
+ 'ã«': '19点',
+ 'ã¬': '20点',
+ 'ã­': '21点',
+ 'ã®': '22点',
+ 'ã¯': '23点',
+ 'ã°': '24点',
+
+ 'ã»': 'å¹³æˆ',
+ 'ã¼': '昭和',
+ 'ã½': '大正',
+ 'ã¾': '明治',
+ 'ã¿': 'æ ªå¼ä¼šç¤¾',
+
+ '㌀': 'アパート',
+ 'ãŒ': 'アルファ',
+ '㌂': 'アンペア',
+ '㌃': 'アール',
+ '㌄': 'イニング',
+ '㌅': 'インãƒ',
+ '㌆': 'ウオン',
+ '㌇': 'エスクード',
+ '㌈': 'エーカー',
+ '㌉': 'オンス',
+ '㌊': 'オーム',
+ '㌋': 'カイリ', //海里
+ '㌌': 'カラット',
+ 'ãŒ': 'カロリー',
+ '㌎': 'ガロン',
+ 'ãŒ': 'ガンマ',
+ 'ãŒ': 'ギガ',
+ '㌑': 'ギニー',
+ '㌒': 'キュリー',
+ '㌓': 'ギルダー',
+ '㌔': 'キロ',
+ '㌕': 'キログラム',
+ '㌖': 'キロメートル',
+ '㌗': 'キロワット',
+ '㌘': 'グラム',
+ '㌙': 'グラムトン',
+ '㌚': 'クルゼイロ',
+ '㌛': 'クローãƒ',
+ '㌜': 'ケース',
+ 'ãŒ': 'コルナ',
+ '㌞': 'コーãƒ',
+ '㌟': 'サイクル',
+ '㌠': 'サンãƒãƒ¼ãƒ ',
+ '㌡': 'シリング',
+ '㌢': 'センãƒ',
+ '㌣': 'セント',
+ '㌤': 'ダース',
+ '㌥': 'デシ',
+ '㌦': 'ドル',
+ '㌧': 'トン',
+ '㌨': 'ナノ',
+ '㌩': 'ノット',
+ '㌪': 'ãƒã‚¤ãƒ„',
+ '㌫': 'パーセント',
+ '㌬': 'パーツ',
+ '㌭': 'ãƒãƒ¼ãƒ¬ãƒ«',
+ '㌮': 'ピアストル',
+ '㌯': 'ピクル',
+ '㌰': 'ピコ',
+ '㌱': 'ビル',
+ '㌲': 'ファラッド',
+ '㌳': 'フィート',
+ '㌴': 'ブッシェル',
+ '㌵': 'フラン',
+ '㌶': 'ヘクタール',
+ '㌷': 'ペソ',
+ '㌸': 'ペニヒ',
+ '㌹': 'ヘルツ',
+ '㌺': 'ペンス',
+ '㌻': 'ページ',
+ '㌼': 'ベータ',
+ '㌽': 'ãƒã‚¤ãƒ³ãƒˆ',
+ '㌾': 'ボルト',
+ '㌿': 'ホン',
+ 'ã€': 'ãƒãƒ³ãƒ‰',
+ 'ã': 'ホール',
+ 'ã‚': 'ホーン',
+ 'ãƒ': 'マイクロ',
+ 'ã„': 'マイル',
+ 'ã…': 'マッãƒ',
+ 'ã†': 'マルク',
+ 'ã‡': 'マンション',
+ 'ãˆ': 'ミクロン',
+ 'ã‰': 'ミリ',
+ 'ãŠ': 'ミリãƒãƒ¼ãƒ«',
+ 'ã‹': 'メガ',
+ 'ãŒ': 'メガトン',
+ 'ã': 'メートル',
+ 'ãŽ': 'ヤード',
+ 'ã': 'ヤール',
+ 'ã': 'ユアン',
+ 'ã‘': 'リットル',
+ 'ã’': 'リラ',
+ 'ã“': 'ルピー',
+ 'ã”': 'ルーブル',
+ 'ã•': 'レム',
+ 'ã–': 'レントゲン',
+ 'ã—': 'ワット'
+};
+
+// Fill in the conversion tables with the flipped tables.
+conversionTables.halfwidthToFullwidth.alphabet = flip(conversionTables.fullwidthToHalfwidth.alphabet);
+conversionTables.halfwidthToFullwidth.numbers = flip(conversionTables.fullwidthToHalfwidth.numbers);
+conversionTables.halfwidthToFullwidth.punctuation = flip(conversionTables.fullwidthToHalfwidth.punctuation);
+conversionTables.halfwidthToFullwidth.katakana = flip(conversionTables.fullwidthToHalfwidth.katakana);
+
+// Build the normalization table.
+conversionTables.normalize = merge(
+ conversionTables.fullwidthToHalfwidth.alphabet,
+ conversionTables.fullwidthToHalfwidth.numbers,
+ conversionTables.halfwidthToFullwidth.punctuation,
+ conversionTables.halfwidthToFullwidth.katakana
+ );
+
+var converters = {
+ fullwidthToHalfwidth: {
+ alphabet: replacer(conversionTables.fullwidthToHalfwidth.alphabet),
+ numbers: replacer(conversionTables.fullwidthToHalfwidth.numbers),
+ punctuation: replacer(conversionTables.fullwidthToHalfwidth.punctuation),
+ katakana: replacer(conversionTables.fullwidthToHalfwidth.katakana)
+ },
+
+ halfwidthToFullwidth: {
+ alphabet: replacer(conversionTables.halfwidthToFullwidth.alphabet),
+ numbers: replacer(conversionTables.halfwidthToFullwidth.numbers),
+ punctuation: replacer(conversionTables.halfwidthToFullwidth.punctuation),
+ katakana: replacer(conversionTables.halfwidthToFullwidth.katakana)
+ },
+
+ fixFullwidthKana: replacer(fixFullwidthKana),
+ normalize: replacer(conversionTables.normalize)
+};
+
+var fixCompositeSymbols = replacer(fixCompositeSymbolsTable);
+
+
+/**
+ * Convert hiragana to fullwidth katakana.
+ * According to http://jsperf.com/converting-japanese, these implementations are
+ * faster than using lookup tables.
+ *
+ * @param {string} str A string.
+ * @return {string} A string not containing hiragana.
+ */
+converters.hiraganaToKatakana = function(str) {
+ str = converters.halfwidthToFullwidth.katakana(str);
+ str = converters.fixFullwidthKana(str);
+
+ str = str.replace(/ã‚/g, 'ヽ');
+ str = str.replace(/ゞ/g, 'ヾ');
+ //str = str.replace(/?/g, '𛀀'); // Letter archaic E
+
+ str = str.replace(/[ã-ã‚–]/g, function(str) {
+ return String.fromCharCode(str.charCodeAt(0) + 96);
+ });
+
+ return str;
+};
+
+
+/**
+ * Convert katakana to hiragana.
+ *
+ * @param {string} str A string.
+ * @return {string} A string not containing katakana.
+ */
+converters.katakanaToHiragana = function(str) {
+ str = converters.halfwidthToFullwidth.katakana(str);
+ str = converters.fixFullwidthKana(str);
+
+ str = str.replace(/ヽ/g, 'ã‚');
+ str = str.replace(/ヾ/g, 'ゞ');
+ //str = str.replace(/?/g, 'ð›€'); // Letter archaic E
+
+ str = str.replace(/[ァ-ヶ]/g, function(str) {
+ return String.fromCharCode(str.charCodeAt(0) - 96);
+ });
+
+ return str;
+};
+
+
+/**
+ * Fix kana and apply the following processes;
+ * * Replace repeat characters
+ * * Alphabet to halfwidth
+ * * Numbers to halfwidth
+ * * Punctuation to fullwidth
+ * * Katakana to fullwidth
+ * * Fix fullwidth kana
+ * * Replace composite symbols
+ *
+ * @param {string} str
+ * @return {string}
+ */
+var normalize_ja = function(str) {
+ // Replace repeat characters.
+ str = str
+ .replace(/(..)々々/g, '$1$1')
+ .replace(/(.)々/g, '$1$1');
+
+ str = converters.normalize(str);
+ str = converters.fixFullwidthKana(str);
+
+ // Replace composite symbols.
+ str = fixCompositeSymbols(str);
+
+ return str;
+};
+
+exports.normalize_ja = normalize_ja;
+exports.converters = converters;
+
+},{"../util/utils.js":55,"../util/utils":55}],25:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A noun inflector for French.
+ * Compiled from:
+ * \@see http://fr.wiktionary.org/wiki/Annexe:Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
+ * \@see http://fr.wikipedia.org/wiki/Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
+ *
+ * \@todo Take compounded noun into account (eaux-fortes, pique-nique...).
+ * \@todo General note: French also requires AdjectiveInflector (femininize...).
+ */
+
+var SingularPluralInflector = require('../singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('../form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ };
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ };
+}
+
+
+
+/**
+ * @constructor
+ */
+var NounInflector = function() {
+ // Ambiguous a.k.a. invariant.
+ // \@todo Expand this list to be as comprehensive as possible.
+ this.ambiguous = [
+ // Nouns ending by -s
+ 'à-peu-près', 'à-propos', 'abattis', 'abcès', 'abois', 'abribus', 'abus',
+ 'accès', 'acquis', 'adénovirus', 'adonis', 'ados', 'agrès', 'aguets',
+ 'ailleurs', 'ais', 'albatros', 'albinos', 'alias', 'aloès', 'amaryllis',
+ 'amas', 'ampélopsis', 'ananas', 'anchois', 'angélus', 'anis', 'anticorps',
+ 'antihéros', 'antirides', 'anus', 'appas', 'appentis', 'appui-bras',
+ 'appuie-bras', 'arcanes', 'argus', 'arrérages', 'arrière-pays', 'as',
+ 'ascaris', 'asparagus', 'atlas', 'atours', 'aurochs', 'autobus',
+ 'autofocus', 'avant-bras', 'avant-corps', 'avant-propos', 'avers', 'avis',
+ 'axis', 'barbouillis', 'bas', 'beaujolais', 'beaux-arts', 'biais',
+ 'bibliobus', 'biceps', 'bicross', 'bien-fonds', 'bloc-notes', 'blockhaus',
+ 'blocus', 'blues', 'bois', 'bonus', 'bout-dehors', 'bouts-rimés',
+ 'branle-bas', 'bras', 'brebis', 'bris', 'brise-lames', 'brise-mottes',
+ 'brûlis', 'buis', 'burnous', 'bus', 'business', 'cabas', 'cacatoès',
+ 'cacatois', 'cactus', 'cadenas', 'cafouillis', 'caillebotis', 'calvados',
+ 'cambouis', 'campus', 'canevas', 'cannabis', 'carquois', 'cas',
+ 'casse-noisettes', 'casse-pieds', 'cassis', 'caucus', 'cens', 'cervelas',
+ 'chablis', 'chamois', 'chaos', 'chas', 'chasselas', 'châssis',
+ 'chatouillis', 'chauffe-assiettes', 'chauve-souris', 'chorus', 'choucas',
+ 'circoncis', 'cirrus', 'clafoutis', 'clapotis', 'cliquetis', 'clos',
+ 'cochylis', 'colis', 'coloris', 'commis', 'compas', 'compromis',
+ 'compte-chèques', 'compte-gouttes', 'compte-tours', 'concours', 'confins',
+ 'congrès', 'consensus', 'contrepoids', 'contresens', 'contretemps',
+ 'corn flakes', 'corps', 'corps-à-corps', 'corpus', 'cosinus', 'cosmos',
+ 'coulis', 'coupe-ongles', 'cours', 'court-jus', 'couscous', 'coutelas',
+ 'crocus', 'croquis', 'cross', 'cubitus', 'cumulus', 'cure-dents',
+ 'cure-ongles', 'cure-pipes', 'cursus', 'cyclo-cross', 'cyprès', 'dais',
+ 'damas', 'débarras', 'débours', 'débris', 'décès', 'dedans', 'dehors',
+ 'delirium tremens', 'demi-gros', 'dépens', 'dessous', 'dessus', 'détritus',
+ 'deux-mâts', 'deux-pièces', 'deux-points', 'deux-roues', 'deux-temps',
+ 'dévers', 'devis', 'diplodocus', 'discours', 'dos', 'ébats', 'éboulis',
+ 'échalas', 'edelweiss', 'élaeis', 'éleis', 'éléphantiasis', 'embarras',
+ 'empois', 'en-cas', 'encens', 'enclos', 'endos', 'engrais', 'entrelacs',
+ 'entremets', 'envers', 'épluche-légumes', 'ers', 'espace-temps',
+ 'essuie-mains', 'eucalyptus', 'ex-libris', 'excès', 'express', 'extrados',
+ 'faciès', 'fait-divers', 'fatras', 'faux-sens', 'favoris', 'ficus',
+ 'fier-à-bras', 'finnois', 'florès', 'focus', 'fœtus', 'fois', 'forceps',
+ 'fouillis', 'fracas', 'frais', 'français', 'franglais', 'frimas',
+ 'friselis', 'frisottis', 'froncis', 'frottis', 'fucus', 'gâchis', 'galetas',
+ 'galimatias', 'garde-à-vous', 'garde-corps', 'gargouillis', 'gars',
+ 'gâte-bois', 'gazouillis', 'génois', 'gibus', 'glacis', 'glas', 'gneiss',
+ 'gobe-mouches', 'grès', 'gribouillis', 'guet-apens', 'habeas corpus',
+ 'hachis', 'haras', 'hardes', 'harnais', 'haut-le-corps', 'hautbois',
+ 'herbe-aux-chats', 'héros', 'herpès', 'hiatus', 'hibiscus', 'hors-concours',
+ 'hors-pistes', 'hourdis', 'huis-clos', 'humérus', 'humus', 'ibis', 'iléus',
+ 'indique-fuites', 'infarctus', 'inlandsis', 'insuccès', 'intercours',
+ 'intrados', 'intrus', 'iris', 'isatis', 'jais', 'jars', 'jeans',
+ 'jeuconcours', 'judas', 'juliénas', 'jus', 'justaucorps', 'kakatoès',
+ 'kermès', 'kriss', 'lacis', 'laïus', 'lambris', 'lapis', 'laps', 'lapsus',
+ 'laquais', 'las', 'lattis', 'lave-mains', 'lavis', 'lèche-bottes',
+ 'lèche-vitrines', 'legs', 'lias', 'liégeois', 'lilas', 'lis', 'lœss',
+ 'logis', 'loris', 'lotus', 'louis', 'lupus', 'lys', 'mâchicoulis', 'madras',
+ 'maïs', 'malappris', 'malus', 'mânes', 'maquis', 'marais', 'maroilles',
+ 'marquis', 'mas', 'mass-médias', 'matelas', 'matois', 'médius', 'mépris',
+ 'mérinos', 'mess', 'mets', 'mi-bas', 'micro-ondes', 'mille-pattes',
+ 'millepertuis', 'minibus', 'minois', 'minus', 'mirabilis', 'mois',
+ 'monocorps', 'monte-plats', 'mors', 'motocross', 'mots-croisés', 'motus',
+ 'mouchetis', 'mucus', 'myosotis', 'nævus', 'négus', 'niais',
+ 'nimbo-stratus', 'nimbus', 'norois', 'nounours', 'nu-pieds', 'oasis',
+ 'obus', 'olibrius', 'omnibus', 'opus', 'os', 'ours', 'ouvre-boîtes',
+ 'ouvre-bouteilles', 'palais', 'palis', 'palmarès', 'palus', 'panais',
+ 'panaris', 'pancréas', 'papyrus', 'par-dehors', 'paradis', 'parcours',
+ 'pardessus', 'pare-balles', 'pare-chocs', 'parvis', 'pas', 'passe-temps',
+ 'pataquès', 'pathos', 'patois', 'pavois', 'pays', 'permis',
+ 'petit-bourgeois', 'petit-gris', 'petit-pois', 'phallus', 'phimosis',
+ 'pickles', 'pilotis', 'pique-fleurs', 'pis', 'pithiviers', 'pityriasis',
+ 'plateau-repas', 'plâtras', 'plein-temps', 'plexiglas', 'plexus', 'plus',
+ 'poids', 'pois', 'pont-levis', 'porte-avions', 'porte-bagages',
+ 'porte-billets', 'porte-bouteilles', 'porte-clés', 'porte-hélicoptères',
+ 'porte-jarretelles', 'porte-revues', 'pouls', 'préavis', 'presse-fruits',
+ 'presse-papiers', 'princeps', 'printemps', 'procès', 'processus', 'progrès',
+ 'propos', 'prospectus', 'protège-dents', 'psoriasis', 'pubis', 'puits',
+ 'pus', 'putois', 'quatre-épices', 'quatre-feuilles', 'quatre-heures',
+ 'quatre-mâts', 'quatre-quarts', 'quatre-temps', 'quitus', 'rabais',
+ 'rachis', 'radis', 'radius', 'raïs', 'ramassis', 'rébus', 'reclus',
+ 'recours', 'refus', 'relais', 'remords', 'remous', 'remue-méninges',
+ 'rendez-vous', 'repas', 'répons', 'repos', 'repris', 'reps', 'rétrovirus',
+ 'revers', 'rhinocéros', 'rictus', 'rince-doigts', 'ris', 'rollmops',
+ 'rosé-des-prés', 'roulis', 'rubis', 'salmigondis', 'salsifis', 'sans-logis',
+ 'sas', 'sassafras', 'sauternes', 'schnaps', 'schuss', 'secours', 'semis',
+ 'sens', 'serre-fils', 'serre-livres', 'sévices', 'sinus', 'skunks',
+ 'souris', 'sournois', 'sous-bois', 'stradivarius', 'stras', 'strass',
+ 'strato-cumulus', 'stratus', 'stress', 'succès', 'surdos', 'surplus',
+ 'surpoids', 'sursis', 'suspens', 'synopsis', 'syphilis', 'taffetas',
+ 'taillis', 'talus', 'tamaris', 'tamis', 'tapis', 'tas', 'taudis', 'temps',
+ 'tennis', 'terminus', 'terre-neuvas', 'tétanos', 'tétras', 'thalamus',
+ 'thermos', 'thesaurus', 'thésaurus', 'thymus', 'tire-fesses', 'tonus',
+ 'torchis', 'torticolis', 'tournedos', 'tournevis', 'tournis', 'tracas',
+ 'traîne-savates', 'travers', 'tréfonds', 'treillis', 'trépas', 'trias',
+ 'triceps', 'trichomonas', 'trois-étoiles', 'trois-mâts', 'trois-quarts',
+ 'trolleybus', 'tumulus', 'typhus', 'univers', 'us', 'utérus', 'vasistas',
+ 'vélocross', 'velours', 'verglas', 'verjus', 'vernis', 'vers',
+ 'vert-de-gris', 'vide-ordures', 'vide-poches', 'villageois', 'virus',
+ 'vis-à-vis', 'volubilis', 'vulgum pecus', 'waters', 'williams', 'xérès',
+
+ // Nouns ending by -x
+ 'abat-voix', 'afflux', 'alpax', 'anthrax', 'apex', 'aptéryx',
+ 'archéoptéryx', 'arrière-faix', 'bombyx', 'borax', 'bordeaux', 'bouseux',
+ 'box', 'carex', 'casse-noix', 'cedex', 'céphalothorax', 'cérambyx', 'chaux',
+ 'choix', 'coccyx', 'codex', 'contumax', 'coqueleux', 'cortex', 'courroux',
+ 'croix', 'crucifix', 'culex', 'demodex', 'duplex', 'entre-deux', 'époux',
+ 'équivaux', 'eux', 'ex', 'faix', 'faucheux', 'faux', 'fax', 'ferreux',
+ 'flux', 'fox', 'freux', 'furax', 'hapax', 'harengueux', 'hélix',
+ 'horse-pox', 'houx', 'index', 'influx', 'inox', 'juke-box', 'kleenex',
+ 'lagothrix', 'larynx', 'lastex', 'latex', 'lux', 'lynx', 'macareux', 'max',
+ 'mésothorax', 'mi-voix', 'mirepoix', 'motteux', 'multiplex', 'murex',
+ 'narthex', 'noix', 'onyx', 'opopanax', 'oropharynx', 'paix', 'panax',
+ 'perdrix', 'pharynx', 'phénix', 'phlox', 'phoenix', 'pneumothorax', 'poix',
+ 'portefaix', 'pousse-cailloux', 'preux', 'prix', 'prothorax', 'pucheux',
+ 'pyrex', 'pyroligneux', 'quadruplex', 'queux', 'redoux', 'reflex', 'reflux',
+ 'relax', 'rhinopharynx', 'rose-croix', 'rouvieux', 'roux', 'rumex',
+ 'saindoux', 'sardonyx', 'scolex', 'sèche-cheveux', 'silex', 'simplex',
+ 'sioux', 'sirex', 'smilax', 'solex', 'songe-creux', 'spalax', 'sphex',
+ 'sphinx', 'storax', 'strix', 'styrax', 'surfaix', 'surtaux', 'syrinx',
+ 'tamarix', 'taux', 'télex', 'thorax', 'tord-boyaux', 'toux', 'trionyx',
+ 'tripoux', 'tubifex', 'vertex', 'vidéotex', 'vielleux', 'vieux',
+ 'violoneux', 'voix', 'volvox', 'vortex',
+
+ // Nouns ending by -z
+ 'allume-gaz', 'assez', 'biogaz', 'cache-nez', 'camping-gaz', 'chez',
+ 'chintz', 'ersatz', 'fez', 'free-jazz', 'fritz', 'gaz', 'gin-fizz', 'hertz',
+ 'jazz', 'jerez', 'kibboutz', 'kilohertz', 'kolkhoz', 'kronprinz', 'lapiaz',
+ 'lez', 'mégahertz', 'merguez', 'nez', 'pince-nez', 'quartz', 'quiz', 'ranz',
+ 'raz', 'recez', 'rémiz', 'rez', 'riz', 'ruolz', 'seltz', 'serre-nez'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular('ail', 'aulx');
+ this.addIrregular('bétail', 'bestiaux');
+ this.addIrregular('bonhomme', 'bonshommes');
+ this.addIrregular('ciel', 'cieux');
+ this.addIrregular('monsieur', 'messieurs');
+ this.addIrregular('mafioso', 'mafiosi');
+ this.addIrregular('Å“il', 'yeux');
+ this.addIrregular('putto', 'putti');
+ this.addIrregular('targui', 'touareg'); // touareg -> touaregs is also OK.
+
+ // Pluralize
+ this.pluralForms.regularForms.push([/^(av|b|c|carnav|cérémoni|chac|corr|emment|emmenth|festiv|fut|gavi|gra|narv|p|récit|rég|rit|rorqu|st)al$/i, '$1als']);
+ this.pluralForms.regularForms.push([/^(aspir|b|cor|ém|ferm|gemm|soupir|trav|vant|vent|vitr)ail$/i, '$1aux']);
+ this.pluralForms.regularForms.push([/^(bij|caill|ch|gen|hib|jouj|p|rip|chouch)ou$/i, '$1oux']);
+ this.pluralForms.regularForms.push([/^(gr|berimb|don|karb|land|pil|rest|sarr|un)au$/i, '$1aus']);
+ this.pluralForms.regularForms.push([/^(bl|ém|enf|pn)eu$/i, '$1eus']);
+ this.pluralForms.regularForms.push([/(au|eau|eu|Å“u)$/i, '$1x']);
+ this.pluralForms.regularForms.push([/al$/i, 'aux']);
+ this.pluralForms.regularForms.push([/(s|x)$/i, '$1']);
+ this.pluralForms.regularForms.push([/(.*)$/i, '$1s']);
+
+ // Singularize
+ this.singularForms.regularForms.push([/^(aspir|b|cor|ém|ferm|gemm|soupir|trav|vant|vent|vitr)aux$/i, '$1ail']);
+ this.singularForms.regularForms.push([/^(aloy|b|bouc|boy|burg|conoy|coy|cr|esquim|ét|fabli|flé|flûti|glu|gr|gru|hoy|joy|kérab|matéri|nobli|noy|pré|sen|sén|t|touch|tuss|tuy|v|ypré)aux$/i, '$1au']);
+ this.singularForms.regularForms.push([/^(bij|caill|ch|gen|hib|jouj|p|rip|chouch)oux$/i, '$1ou']);
+ this.singularForms.regularForms.push([/^(bis)?aïeux$/i, '$1aïeul']);
+ this.singularForms.regularForms.push([/^apparaux$/i, 'appareil']); // One way transform, don't put on irregular list.
+ this.singularForms.regularForms.push([/^ciels$/i, 'ciel']);
+ this.singularForms.regularForms.push([/^Å“ils$/i, 'Å“il']);
+ this.singularForms.regularForms.push([/(eau|eu|Å“u)x$/i, '$1']);
+ this.singularForms.regularForms.push([/aux$/i, 'al']);
+ this.singularForms.regularForms.push([/(.*)s$/i, '$1']);
+
+ this.pluralize = function(token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"../form_set":54,"../singular_plural_inflector":53}],26:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A noun inflector for Japanese.
+ * Compiled from several sources including:
+ * \@see http://answers.yahoo.com/question/index?qid=20080528201740AASBWy6
+ * \@see http://www.excite.co.jp/dictionary/english_japanese/
+ *
+ * This script assumes input is normalized using normalizer_ja().
+ * Pluralizing Japanese has a very limited interest.
+ * Japanese don't usually distinct plural from singular, so even a word looking
+ * like a singular might actually be a plural.
+ *
+ * Singularization of nouns ending by -tachi or -ra is achieved using a
+ * comprehensive black list, while nouns ending by -domo or -gata use a white
+ * list because there are too many exceptions.
+ *
+ * \@todo Singularize nouns ending by -ら, but there are too many exceptions.
+ * \@todo Expand the list of common plurals ending by -domo and -gata.
+ */
+
+var SingularPluralInflector = require('../singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('../form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ };
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ };
+}
+
+
+
+/**
+ * @constructor
+ */
+var NounInflector = function() {
+ // Ambiguous a.k.a. invariant.
+ this.ambiguous = [
+ 'ã¨ã‚‚ã ã¡', 'å‹ã ã¡', 'å‹é”', 'éŠã³å‹é”', '飲ã¿å‹é”', '酒飲ã¿å‹é”', '茶飲ã¿å‹é”',
+ '学校å‹é”', '女å‹é”', 'ç”·å‹é”', 'å¹¼å‹é”'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular('神', '神神');
+ this.addIrregular('人', '人人');
+ this.addIrregular('å¹´', 'å¹´å¹´');
+ this.addIrregular('月', '月月');
+ this.addIrregular('日', '日日');
+ this.addIrregular('星', '星星');
+ this.addIrregular('島', '島島');
+ this.addIrregular('我', '我我');
+
+ /**
+ * Notes:
+ * -ãŸã¡ exceptions: ã„ãŸã¡, ãŠã„ãŸã¡, ã¤ã„ãŸã¡, ã‹ãŸã¡, ã‹ãŠã‹ãŸã¡, ãªã‚Šã‹ãŸã¡, ã„ã§ãŸã¡, ã¯ãŸã¡, ã‹ã‚‰ãŸã¡, ãªã‚ŠãŸã¡
+ * -é” exceptions: 伊é”, 男伊é”, æ „é”, 上æ„下é”, 熟é”, 上é”, 下æ„上é”, å…ˆé”, é€é”, 速é”, å³æ—¥é€Ÿé”, 書留速é”, 調é”, 通é”, ä¼é”, 到é”, é…é”, 牛乳é…é”, æ–°èžé…é”, ç„¡æ–™é…é”, 四通八é”, 発é”, 未発é”, 御用é”, 宮内åºå¾¡ç”¨é”, ç·´é”, é—Šé”
+ * -ç­‰ exceptions: 一等, 下等, 何等, å‡ç­‰, 勲等, 高等, 三等, åˆç­‰, 上等, 親等, 二親等, æ•°ç­‰, 対等, 中等, åŒç­‰, 特等, 二等, å“ç­‰, ä¸ç­‰, 平等, 悪平等, 男女平等, ä¸å¹³ç­‰, 優等, 劣等
+ */
+
+ // Pluralize
+ this.pluralForms.regularForms.push([/^(.+)$/i, '$1ãŸã¡']);
+
+ // Singularize
+ this.singularForms.regularForms.push([/^(.+)ãŸã¡$/i, function(a, mask) {
+ if (['ã„', 'ãŠã„', 'ã¤ã„', 'ã‹', 'ã‹ãŠã‹', 'ãªã‚Šã‹', 'ã„ã§', 'ã¯', 'ã‹ã‚‰',
+ 'ãªã‚Š'].indexOf(mask) >= 0)
+ return mask + 'ãŸã¡';
+ return mask;
+ }]);
+ this.singularForms.regularForms.push([/^(.+)é”$/i, function(a, mask) {
+ if (['伊', '伊', 'æ „', '上æ„下', '熟', '上', '下æ„上', 'å…ˆ', 'é€', '速',
+ 'å³æ—¥é€Ÿ', '書留速', '調', '通', 'ä¼', '到', 'é…', '牛乳é…', 'æ–°èžé…', 'ç„¡æ–™é…',
+ '四通八', '発', '未発', '御用', '宮内åºå¾¡ç”¨', 'ç·´', 'é—Š'].indexOf(mask) >= 0)
+ return mask + 'é”';
+ return mask;
+ }]); // Singularize nouns ending by -ç­‰, but not exceptions.
+ this.singularForms.regularForms.push([/^(.+)ç­‰$/i, function(a, mask) {
+ if (['一', '下', '何', 'å‡', '勲', '高', '三', 'åˆ', '親', '二親', 'æ•°', '対',
+ '中', 'åŒ', '特', '二', 'å“', 'ä¸', 'å¹³', '悪平', '男女平', 'ä¸å¹³', '優',
+ '劣'].indexOf(mask) >= 0)
+ return mask + 'ç­‰';
+ return mask;
+ }]);
+ this.singularForms.regularForms.push([/^(人間|ã‚ãŸãã—|ç§|ã¦ã¾ãˆ|手å‰|野郎|ã‚„ã‚ã†|勇者|ãŒã|ガキ|餓鬼)(å…±|ã©ã‚‚)$/i, '$1']);
+ this.singularForms.regularForms.push([/^(神様|先生|ã‚ãªãŸ)(æ–¹|ãŒãŸ)$/i, '$1']);
+
+ this.pluralize = function(token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"../singular_plural_inflector":53,"../form_set":54}],55:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+
+/**
+ * Generate a replacing function given a table of patterns. Inspired by:
+ * http://code.google.com/p/jslibs/wiki/JavascriptTips#String_converter
+ * The order of elements is significant. Longer elements should be listed first.
+ * @see Speed test http://jsperf.com/build-a-regexp-table
+ *
+ * @param {Object.<string, string>} translationTable The translation table of key value.
+ * @return {function(string): string} A translating function.
+ */
+function replacer(translationTable) {
+ /**
+ * An array of translationTable keys.
+ * @type {Array.<string>}
+ */
+ var pattern = [];
+
+ /**
+ * The regular expression doing the replacement job.
+ * @type {RegExp}
+ */
+ var regExp;
+
+ /**
+ * Used to iterate over translationTable.
+ * @type {string}
+ */
+ var key;
+
+ for (key in translationTable) {
+ // Escaping regexp special chars.
+ // @see Speed test for type casting to string http://jsperf.com/string-type-casting/2
+ // @see http://closure-library.googlecode.com/svn/docs/closure_goog_string_string.js.source.html#line956
+ key = ('' + key).replace(/([-()\[\]{}+?*.$\^|,:#<!\\\/])/g, '\\$1').
+ replace(/\x08/g, '\\x08');
+
+ pattern.push(key);
+ }
+
+ regExp = new RegExp(pattern.join('|'), 'g');
+
+ /**
+ * @param {string} str Input string.
+ * @return {string} The string replaced.
+ */
+ return function(str) {
+ return str.replace(regExp, function(str) {
+ return translationTable[str];
+ });
+ };
+}
+
+
+/**
+ * Exchanges all keys with their associated values in an object.
+ *
+ * @param {Object.<string, string>} obj An object of strings.
+ * @return {Object.<string, string>} An object of strings.
+ */
+function flip(obj) {
+ var newObj = Object.create(null),
+ key;
+
+ for (key in obj) {
+ newObj[obj[key]] = key;
+ }
+
+ return newObj;
+}
+
+
+/**
+ * Merge several objects. Properties from earlier objects are overwritten by
+ * laters's in case of conflict.
+ *
+ * @param {...Object.<string, string>} var_args One or more objects of strings.
+ * @return {!Object.<string, string>} An object of strings.
+ */
+function merge(var_args) {
+ var args = [].slice.call(arguments),
+ newObj = Object.create(null),
+ id = 0, key;
+
+ while (args[id]) {
+ for (key in args[id]) {
+ newObj[key] = args[id][key];
+ }
+
+ id++;
+ }
+
+ return newObj;
+}
+
+exports.replacer = replacer;
+exports.flip = flip;
+exports.merge = merge;
+
+},{}],50:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+exports.rules = {
+ "a": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "ia",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "a",
+ "size": "1"
+ }
+ ],
+ "b": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "bb",
+ "size": "1"
+ }
+ ],
+ "c": [
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ytic",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ic",
+ "size": "2"
+ },
+ {
+ "appendage": "t",
+ "continuation": true,
+ "intact": false,
+ "pattern": "nc",
+ "size": "1"
+ }
+ ],
+ "d": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "dd",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ied",
+ "size": "3"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ceed",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "eed",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ed",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "hood",
+ "size": "4"
+ }
+ ],
+ "e": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "e",
+ "size": "1"
+ }
+ ],
+ "f": [
+ {
+ "appendage": "v",
+ "continuation": false,
+ "intact": false,
+ "pattern": "lief",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "if",
+ "size": "2"
+ }
+ ],
+ "g": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ing",
+ "size": "3"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iag",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ag",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "gg",
+ "size": "1"
+ }
+ ],
+ "h": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "th",
+ "size": "2"
+ },
+ {
+ "appendage": "c",
+ "continuation": false,
+ "intact": false,
+ "pattern": "guish",
+ "size": "5"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ish",
+ "size": "3"
+ }
+ ],
+ "i": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "i",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "i",
+ "size": "1"
+ }
+ ],
+ "j": [
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ij",
+ "size": "1"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "fuj",
+ "size": "1"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "uj",
+ "size": "1"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "oj",
+ "size": "1"
+ },
+ {
+ "appendage": "r",
+ "continuation": false,
+ "intact": false,
+ "pattern": "hej",
+ "size": "1"
+ },
+ {
+ "appendage": "t",
+ "continuation": false,
+ "intact": false,
+ "pattern": "verj",
+ "size": "1"
+ },
+ {
+ "appendage": "t",
+ "continuation": false,
+ "intact": false,
+ "pattern": "misj",
+ "size": "2"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "nj",
+ "size": "1"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "j",
+ "size": "1"
+ }
+ ],
+ "l": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ifiabl",
+ "size": "6"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iabl",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "abl",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ibl",
+ "size": "3"
+ },
+ {
+ "appendage": "l",
+ "continuation": true,
+ "intact": false,
+ "pattern": "bil",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "cl",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iful",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ful",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ul",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ial",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ual",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "al",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ll",
+ "size": "1"
+ }
+ ],
+ "m": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ium",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "um",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ism",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "mm",
+ "size": "1"
+ }
+ ],
+ "n": [
+ {
+ "appendage": "j",
+ "continuation": true,
+ "intact": false,
+ "pattern": "sion",
+ "size": "4"
+ },
+ {
+ "appendage": "c",
+ "continuation": false,
+ "intact": false,
+ "pattern": "xion",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ion",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ian",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "an",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "een",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "en",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "nn",
+ "size": "1"
+ }
+ ],
+ "p": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ship",
+ "size": "4"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "pp",
+ "size": "1"
+ }
+ ],
+ "r": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "er",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ear",
+ "size": "0"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ar",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "or",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ur",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "rr",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "tr",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ier",
+ "size": "3"
+ }
+ ],
+ "s": [
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ies",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sis",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "is",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ness",
+ "size": "4"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ss",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ous",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "us",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": true,
+ "pattern": "s",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "s",
+ "size": "0"
+ }
+ ],
+ "t": [
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "plicat",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "at",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ment",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ent",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ant",
+ "size": "3"
+ },
+ {
+ "appendage": "b",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ript",
+ "size": "2"
+ },
+ {
+ "appendage": "b",
+ "continuation": false,
+ "intact": false,
+ "pattern": "orpt",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "duct",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sumpt",
+ "size": "2"
+ },
+ {
+ "appendage": "i",
+ "continuation": false,
+ "intact": false,
+ "pattern": "cept",
+ "size": "2"
+ },
+ {
+ "appendage": "v",
+ "continuation": false,
+ "intact": false,
+ "pattern": "olut",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sist",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ist",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "tt",
+ "size": "1"
+ }
+ ],
+ "u": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "iqu",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ogu",
+ "size": "1"
+ }
+ ],
+ "v": [
+ {
+ "appendage": "j",
+ "continuation": true,
+ "intact": false,
+ "pattern": "siv",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "eiv",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "iv",
+ "size": "2"
+ }
+ ],
+ "y": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "bly",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ily",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ply",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ly",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ogy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "phy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "omy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "opy",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ity",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ety",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "lty",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "istry",
+ "size": "5"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ary",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ory",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ify",
+ "size": "3"
+ },
+ {
+ "appendage": "t",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ncy",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "acy",
+ "size": "3"
+ }
+ ],
+ "z": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "iz",
+ "size": "2"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "yz",
+ "size": "1"
+ }
+ ]
+};
+
+
+},{}],51:[function(require,module,exports){
+// Original copyright:
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+// This version:
+/*
+Copyright (c) 2012, Guillaume Marty
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+// Original location:
+// http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/analysis/kuromoji/src/resources/org/apache/lucene/analysis/ja/stopwords.txt
+var words = ['ã®', 'ã«', 'ã¯', 'ã‚’', 'ãŸ', 'ãŒ', 'ã§', 'ã¦', 'ã¨', 'ã—', 'ã‚Œ', 'ã•',
+ 'ã‚ã‚‹', 'ã„ã‚‹', 'ã‚‚', 'ã™ã‚‹', 'ã‹ã‚‰', 'ãª', 'ã“ã¨', 'ã¨ã—ã¦', 'ã„', 'ã‚„', 'れる',
+ 'ãªã©', 'ãªã£', 'ãªã„', 'ã“ã®', 'ãŸã‚', 'ãã®', 'ã‚ã£', 'よã†', 'ã¾ãŸ', 'ã‚‚ã®',
+ 'ã¨ã„ã†', 'ã‚ã‚Š', 'ã¾ã§', 'られ', 'ãªã‚‹', 'ã¸', 'ã‹', 'ã ', 'ã“ã‚Œ', 'ã«ã‚ˆã£ã¦',
+ 'ã«ã‚ˆã‚Š', 'ãŠã‚Š', 'より', 'ã«ã‚ˆã‚‹', 'ãš', 'ãªã‚Š', 'られる', 'ã«ãŠã„ã¦', 'ã°', 'ãªã‹ã£',
+ 'ãªã', 'ã—ã‹ã—', 'ã«ã¤ã„ã¦', 'ã›', 'ã ã£', 'ãã®å¾Œ', 'ã§ãã‚‹', 'ãã‚Œ', 'ã†', 'ã®ã§',
+ 'ãªãŠ', 'ã®ã¿', 'ã§ã', 'ã', 'ã¤', 'ã«ãŠã‘ã‚‹', 'ãŠã‚ˆã³', 'ã„ã†', 'ã•ã‚‰ã«', 'ã§ã‚‚',
+ 'ら', 'ãŸã‚Š', 'ãã®ä»–', 'ã«é–¢ã™ã‚‹', 'ãŸã¡', 'ã¾ã™', 'ã‚“', 'ãªã‚‰', 'ã«å¯¾ã—ã¦', '特ã«',
+ 'ã›ã‚‹', 'åŠã³', 'ã“れら', 'ã¨ã', 'ã§ã¯', 'ã«ã¦', 'ã»ã‹', 'ãªãŒã‚‰', 'ã†ã¡', 'ãã—ã¦',
+ 'ã¨ã¨ã‚‚ã«', 'ãŸã ã—', 'ã‹ã¤ã¦', 'ãã‚Œãžã‚Œ', 'ã¾ãŸã¯', 'ãŠ', 'ã»ã©', 'ã‚‚ã®ã®', 'ã«å¯¾ã™ã‚‹',
+ 'ã»ã¨ã‚“ã©', 'ã¨å…±ã«', 'ã¨ã„ã£ãŸ', 'ã§ã™', 'ã¨ã‚‚', 'ã¨ã“ã‚', 'ã“ã“'];
+
+// tell the world about the noise words.
+module.exports = words;
+
+},{}],52:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/**
+ * \@todo Use .bind() in Tokenizer.prototype.attach().
+ */
+
+var Tokenizer = function() {
+};
+
+Tokenizer.prototype.trim = function(array) {
+ if (array[array.length - 1] == '')
+ array.pop();
+
+ if (array[0] == '')
+ array.shift();
+
+ return array;
+};
+
+// Expose an attach function that will patch String with new methods.
+Tokenizer.prototype.attach = function() {
+ var self = this;
+
+ String.prototype.tokenize = function() {
+ return self.tokenize(this);
+ }
+};
+
+Tokenizer.prototype.tokenize = function() {};
+
+module.exports = Tokenizer;
+
+},{}],53:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var TenseInflector = function () {
+};
+
+TenseInflector.prototype.addSingular = function(pattern, replacement) {
+ this.customSingularForms.push([pattern, replacement]);
+};
+
+TenseInflector.prototype.addPlural = function(pattern, replacement) {
+ this.customPluralForms.push([pattern, replacement]);
+};
+
+TenseInflector.prototype.ize = function (token, formSet, customForms) {
+ var restoreCase = this.restoreCase(token);
+ return restoreCase(this.izeRegExps(token, customForms) || this.izeAbiguous(token) ||
+ this.izeRegulars(token, formSet) || this.izeRegExps(token, formSet.regularForms) ||
+ token);
+}
+
+TenseInflector.prototype.izeAbiguous = function (token) {
+ if(this.ambiguous.indexOf(token.toLowerCase()) > -1)
+ return token.toLowerCase();
+
+ return false;
+}
+
+TenseInflector.prototype.pluralize = function (token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+};
+
+TenseInflector.prototype.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+};
+
+var uppercaseify = function(token) {
+ return token.toUpperCase();
+}
+var capitalize = function(token) {
+ return token[0].toUpperCase() + token.slice(1);
+}
+var lowercaseify = function(token) {
+ return token.toLowerCase();
+}
+
+TenseInflector.prototype.restoreCase = function(token) {
+ if (token[0] === token[0].toUpperCase()) {
+ if (token[1] && token[1] === token[1].toLowerCase()) {
+ return capitalize;
+ } else {
+ return uppercaseify;
+ }
+ } else {
+ return lowercaseify;
+ }
+}
+
+TenseInflector.prototype.izeRegulars = function(token, formSet) {
+ token = token.toLowerCase();
+
+ if(formSet.irregularForms[token])
+ return formSet.irregularForms[token];
+
+ return false;
+}
+
+TenseInflector.prototype.addForm = function(singularTable, pluralTable, singular, plural) {
+ singular = singular.toLowerCase();
+ plural = plural.toLowerCase();
+ pluralTable[singular] = plural;
+ singularTable[plural] = singular;
+};
+
+TenseInflector.prototype.addIrregular = function(singular, plural) {
+ this.addForm(this.singularForms.irregularForms, this.pluralForms.irregularForms, singular, plural);
+};
+
+TenseInflector.prototype.izeRegExps = function(token, forms) {
+ var i, form;
+ for(i = 0; i < forms.length; i++) {
+ form = forms[i];
+
+ if(token.match(form[0]))
+ return token.replace(form[0], form[1]);
+ }
+
+ return false;
+ }
+
+module.exports = TenseInflector;
+
+},{}],54:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var FormSet = function() {
+ this.regularForms = [];
+ this.irregularForms = {};
+}
+
+module.exports = FormSet;
+
+},{}],39:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A transliteration of Katakana & Hiragana to roman characters using the
+ * modified Hepburn system.
+ * Rules based on CLDR transform rule set `Katakana-Latin-BGN.xml` but with
+ * several bugs fixed:
+ * * Missing Å«
+ * * Missing tsu + voiced kana
+ * * typos on my~ transliterations
+ * * support for long vowel sign
+ * * support for final small tsu
+ * * support for u + small vowels
+ * * support for su/shi/ji + small vowels
+ * * support for tchi/tsu/te/to + small vowels
+ * * support for fu + small vowels
+ * * support for katakana middle dot
+ *
+ * \@todo Take iteration marks into account.
+ */
+
+var replacer = require('../../util/utils').replacer;
+
+var transliterationTable1 = {
+ 'ウァ': 'wa', // KATAKANA LETTER U + SMALL A
+ 'ウィ': 'wi', // KATAKANA LETTER U + SMALL I
+ 'ウェ': 'we', // KATAKANA LETTER U + SMALL E
+ 'ウォ': 'wo', // KATAKANA LETTER U + SMALL O
+ 'ウー': 'ū', // KATAKANA LETTER VU + PROLONGED SOUND MARK
+
+ 'ヴァ': 'va', // KATAKANA LETTER VU + SMALL A
+ 'ヴィ': 'vi', // KATAKANA LETTER VU + SMALL I
+ 'ヴェ': 've', // KATAKANA LETTER VU + SMALL E
+ 'ヴォ': 'vo', // KATAKANA LETTER VU + SMALL O
+ 'ヴュ': 'vyu', // KATAKANA LETTER VU + SMALL YU
+
+ 'ã†ã': 'wa', // HIRAGANA LETTER U + SMALL A
+ 'ã†ãƒ': 'wi', // HIRAGANA LETTER U + SMALL I
+ 'ã†ã‡': 'we', // HIRAGANA LETTER U + SMALL E
+ 'ã†ã‰': 'wo', // HIRAGANA LETTER U + SMALL O
+ 'ã†ãƒ¼': 'Å«', // HIRAGANA LETTER VU + PROLONGED SOUND MARK
+
+ 'ã‚”ã': 'va', // HIRAGANA LETTER VU + SMALL A
+ 'ã‚”ãƒ': 'vi', // HIRAGANA LETTER VU + SMALL I
+ 'ã‚”ã‡': 've', // HIRAGANA LETTER VU + SMALL E
+ 'ã‚”ã‰': 'vo', // HIRAGANA LETTER VU + SMALL O
+ 'ゔゅ': 'vyu' // HIRAGANA LETTER VU + SMALL YU
+};
+
+var transliterationTable2 = {
+ 'イェ': 'ye', // KATAKANA LETTER I + SMALL E
+
+ 'ã‚¢': 'a', // KATAKANA LETTER A
+ 'イ': 'i', // KATAKANA LETTER I
+ 'ウウ': 'ū', // KATAKANA LETTER U + U
+ 'ウ': 'u', // KATAKANA LETTER U
+ 'エ': 'e', // KATAKANA LETTER E
+ 'オウ': 'Å', // KATAKANA LETTER O + U
+ 'オ': 'o', // KATAKANA LETTER O
+
+ 'クァ': 'kwa', // KATAKANA LETTER KU + SMALL A
+ 'クィ': 'kwi', // KATAKANA LETTER KU + SMALL I
+ 'クェ': 'kwe', // KATAKANA LETTER KU + SMALL E
+ 'クォ': 'kwo', // KATAKANA LETTER KU + SMALL O
+
+ 'ã‚«': 'ka', // KATAKANA LETTER KA
+ 'キョウ': 'kyÅ', // KATAKANA LETTER KI + SMALL YO + U
+ 'キュウ': 'kyū', // KATAKANA LETTER KI + SMALL YU + U
+ 'キャ': 'kya', // KATAKANA LETTER KI + SMALL YA
+ 'キョ': 'kyo', // KATAKANA LETTER KI + SMALL YO
+ 'キュ': 'kyu', // KATAKANA LETTER KI + SMALL YU
+ 'ã‚­': 'ki', // KATAKANA LETTER KI
+ 'ク': 'ku', // KATAKANA LETTER KU
+ 'ケ': 'ke', // KATAKANA LETTER KE
+ 'コウ': 'kÅ', // KATAKANA LETTER KO + U
+ 'コ': 'ko', // KATAKANA LETTER KO
+
+ 'シェ': 'she', // KATAKANA LETTER SI + SMALL E
+ 'スィ': 'si', // KATAKANA LETTER SU + SMALL I
+
+ 'サ': 'sa', // KATAKANA LETTER SA
+ 'ショウ': 'shÅ', // KATAKANA LETTER SI + SMALL YO + U
+ 'シュウ': 'shū', // KATAKANA LETTER SI + SMALL YU + U
+ 'シャ': 'sha', // KATAKANA LETTER SI + SMALL YA
+ 'ショ': 'sho', // KATAKANA LETTER SI + SMALL YO
+ 'シュ': 'shu', // KATAKANA LETTER SI + SMALL YU
+ 'ã‚·': 'shi', // KATAKANA LETTER SI
+ 'スウ': 'sū', // KATAKANA LETTER SU + U
+ 'ス': 'su', // KATAKANA LETTER SU
+ 'ã‚»': 'se', // KATAKANA LETTER SE
+ 'ソウ': 'sÅ', // KATAKANA LETTER SO + U
+ 'ソ': 'so', // KATAKANA LETTER SO
+
+ 'ãƒã‚§': 'che', // KATAKANA LETTER TI + SMALL E
+ 'ツァ': 'tsa', // KATAKANA LETTER TU + SMALL A
+ 'ツィ': 'tsi', // KATAKANA LETTER TU + SMALL I
+ 'ツェ': 'tse', // KATAKANA LETTER TU + SMALL E
+ 'ツォ': 'tso', // KATAKANA LETTER TU + SMALL O
+ 'ティ': 'ti', // KATAKANA LETTER TE + SMALL I
+ 'ディ': 'di', // KATAKANA LETTER DE + SMALL I
+ 'テュ': 'tyu', // KATAKANA LETTER TE + SMALL YU
+ 'デュ': 'dyu', // KATAKANA LETTER DE + SMALL YU
+ 'トィ': 'twi', // KATAKANA LETTER TO + SMALL I
+ 'トゥ': 'tu', // KATAKANA LETTER TO + SMALL U
+ 'ドィ': 'dwi', // KATAKANA LETTER DO + SMALL I
+ 'ドゥ': 'du', // KATAKANA LETTER DO + SMALL U
+
+ 'ã‚¿': 'ta', // KATAKANA LETTER TA
+ 'ãƒãƒ§ã‚¦': 'chÅ', // KATAKANA LETTER TI + SMALL YO + U
+ 'ãƒãƒ¥ã‚¦': 'chÅ«', // KATAKANA LETTER TI + SMALL YU + U
+ 'ãƒãƒ£': 'cha', // KATAKANA LETTER TI + SMALL YA
+ 'ãƒãƒ§': 'cho', // KATAKANA LETTER TI + SMALL YO
+ 'ãƒãƒ¥': 'chu', // KATAKANA LETTER TI + SMALL YU
+ 'ãƒ': 'chi', // KATAKANA LETTER TI
+ 'ツウ': 'tsū', // KATAKANA LETTER TU + U
+ 'ツ': 'tsu', // KATAKANA LETTER TU
+ 'テ': 'te', // KATAKANA LETTER TE
+ 'トウ': 'tÅ', // KATAKANA LETTER TO + U
+ 'ト': 'to', // KATAKANA LETTER TO
+
+ 'ナ': 'na', // KATAKANA LETTER NA
+ 'ニョウ': 'nyÅ', // KATAKANA LETTER NI + SMALL YO + U
+ 'ニュウ': 'nyū', // KATAKANA LETTER NI + SMALL YU + U
+ 'ニャ': 'nya', // KATAKANA LETTER NI + SMALL YA
+ 'ニョ': 'nyo', // KATAKANA LETTER NI + SMALL YO
+ 'ニュ': 'nyu', // KATAKANA LETTER NI + SMALL YU
+ 'ニ': 'ni', // KATAKANA LETTER NI
+ 'ヌウ': 'nū', // KATAKANA LETTER NU + U
+ 'ヌ': 'nu', // KATAKANA LETTER NU
+ 'ãƒ': 'ne', // KATAKANA LETTER NE
+ 'ノウ': 'nÅ', // KATAKANA LETTER NO + U
+ 'ノ': 'no', // KATAKANA LETTER NO
+
+ 'ファ': 'fa', // KATAKANA LETTER HU + SMALL A
+ 'フィ': 'fi', // KATAKANA LETTER HU + SMALL I
+ //'フゥ': 'fu', // KATAKANA LETTER HU + SMALL U
+ 'フェ': 'fe', // KATAKANA LETTER HU + SMALL E
+ 'フォ': 'fo', // KATAKANA LETTER HU + SMALL O
+ 'フュ': 'fyu', // KATAKANA LETTER HU + SMALL YU
+ 'ホェ': 'hwe', // KATAKANA LETTER HO + SMALL E
+
+ 'ãƒ': 'ha', // KATAKANA LETTER HA
+ 'ヒョウ': 'hyÅ', // KATAKANA LETTER HI + SMALL YO + U
+ 'ヒュウ': 'hyū', // KATAKANA LETTER HI + SMALL YU + U
+ 'ヒャ': 'hya', // KATAKANA LETTER HI + SMALL YA
+ 'ヒョ': 'hyo', // KATAKANA LETTER HI + SMALL YO
+ 'ヒュ': 'hyu', // KATAKANA LETTER HI + SMALL YU
+ 'ヒ': 'hi', // KATAKANA LETTER HI
+ 'フウ': 'fū', // KATAKANA LETTER HU + U
+ 'フ': 'fu', // KATAKANA LETTER HU
+ 'ヘ': 'he', // KATAKANA LETTER HE
+ 'ホウ': 'hÅ', // KATAKANA LETTER HO + U
+ 'ホ': 'ho', // KATAKANA LETTER HO
+
+ 'マ': 'ma', // KATAKANA LETTER MA
+ 'ミョウ': 'myÅ', // KATAKANA LETTER MI + SMALL YO + U
+ 'ミュウ': 'myū', // KATAKANA LETTER MI + SMALL YU + U
+ 'ミャ': 'mya', // KATAKANA LETTER MI + SMALL YA
+ 'ミョ': 'myo', // KATAKANA LETTER MI + SMALL YO
+ 'ミュ': 'myu', // KATAKANA LETTER MI + SMALL YU
+ 'ミ': 'mi', // KATAKANA LETTER MI
+ 'ムウ': 'mū', // KATAKANA LETTER MU + U
+ 'ム': 'mu', // KATAKANA LETTER MU
+ 'メ': 'me', // KATAKANA LETTER ME
+ 'モウ': 'mÅ', // KATAKANA LETTER MO + U
+ 'モ': 'mo', // KATAKANA LETTER MO
+
+ 'ヤ': 'ya', // KATAKANA LETTER YA
+ 'ユウ': 'yū', // KATAKANA LETTER YU + U
+ 'ユ': 'yu', // KATAKANA LETTER YU
+ 'ヨウ': 'yÅ', // KATAKANA LETTER YO + U
+ 'ヨ': 'yo', // KATAKANA LETTER YO
+
+ 'リェ': 'rye', // KATAKANA LETTER RI + SMALL E
+
+ 'ラ': 'ra', // KATAKANA LETTER RA
+ 'リョウ': 'ryÅ', // KATAKANA LETTER RI + SMALL YO + U
+ 'リュウ': 'ryū', // KATAKANA LETTER RI + SMALL YU + U
+ 'リャ': 'rya', // KATAKANA LETTER RI + SMALL YA
+ 'リョ': 'ryo', // KATAKANA LETTER RI + SMALL YO
+ 'リュ': 'ryu', // KATAKANA LETTER RI + SMALL YU
+ 'リ': 'ri', // KATAKANA LETTER RI
+ 'ルウ': 'rū', // KATAKANA LETTER RU + U
+ 'ル': 'ru', // KATAKANA LETTER RU
+ 'レ': 're', // KATAKANA LETTER RE
+ 'ロウ': 'rÅ', // KATAKANA LETTER RO + U
+ 'ロ': 'ro', // KATAKANA LETTER RO
+
+ 'ワ': 'wa', // KATAKANA LETTER WA
+ 'ヰ': 'i', // KATAKANA LETTER WI
+ 'ヱ': 'e', // KATAKANA LETTER WE
+ 'ヲ': 'o', // KATAKANA LETTER WO
+
+ 'ン': 'n', // KATAKANA LETTER N
+
+ 'ã‚°ã‚¡': 'gwa', // KATAKANA LETTER GU + SMALL A
+ 'ã‚°ã‚£': 'gwi', // KATAKANA LETTER GU + SMALL I
+ 'グェ': 'gwe', // KATAKANA LETTER GU + SMALL E
+ 'ã‚°ã‚©': 'gwo', // KATAKANA LETTER GU + SMALL O
+
+ 'ガ': 'ga', // KATAKANA LETTER GA
+ 'ギョウ': 'gyÅ', // KATAKANA LETTER GI + SMALL YO + U
+ 'ギュウ': 'gyū', // KATAKANA LETTER GI + SMALL YU + U
+ 'ギャ': 'gya', // KATAKANA LETTER GI + SMALL YA
+ 'ギョ': 'gyo', // KATAKANA LETTER GI + SMALL YO
+ 'ギュ': 'gyu', // KATAKANA LETTER GI + SMALL YU
+ 'ã‚®': 'gi', // KATAKANA LETTER GI
+ 'グウ': 'gū', // KATAKANA LETTER GU + U
+ 'ã‚°': 'gu', // KATAKANA LETTER GU
+ 'ゲ': 'ge', // KATAKANA LETTER GE
+ 'ゴウ': 'gÅ', // KATAKANA LETTER GO + U
+ 'ã‚´': 'go', // KATAKANA LETTER GO
+
+ 'ジェ': 'je', // KATAKANA LETTER ZI + SMALL E
+ 'ズィ': 'zi', // KATAKANA LETTER ZU + SMALL I
+
+ 'ザ': 'za', // KATAKANA LETTER ZA
+ 'ジョウ': 'jÅ', // KATAKANA LETTER ZI + SMALL YO + U
+ 'ジュウ': 'jū', // KATAKANA LETTER ZI + SMALL YU + U
+ 'ジャ': 'ja', // KATAKANA LETTER ZI + SMALL YA
+ 'ジョ': 'jo', // KATAKANA LETTER ZI + SMALL YO
+ 'ジュ': 'ju', // KATAKANA LETTER ZI + SMALL YU
+ 'ジ': 'ji', // KATAKANA LETTER ZI
+ 'ズウ': 'zū', // KATAKANA LETTER ZU + U
+ 'ズ': 'zu', // KATAKANA LETTER ZU
+ 'ゼ': 'ze', // KATAKANA LETTER ZE
+ 'ゾウ': 'zÅ', // KATAKANA LETTER ZO + U
+ 'ゾ': 'zo', // KATAKANA LETTER ZO
+
+ 'ダ': 'da', // KATAKANA LETTER DA
+ 'ヂ': 'ji', // KATAKANA LETTER DI
+ 'ヅウ': 'zū', // KATAKANA LETTER DU + U
+ 'ヅ': 'zu', // KATAKANA LETTER DU
+ 'デ': 'de', // KATAKANA LETTER DE
+ 'ドウ': 'dÅ', // KATAKANA LETTER DO + U
+ 'ド': 'do', // KATAKANA LETTER DO
+
+ 'ブュ': 'byu', // KATAKANA LETTER BU + SMALL YU
+
+ 'ãƒ': 'ba', // KATAKANA LETTER BA
+ 'ビョウ': 'byÅ', // KATAKANA LETTER BI + SMALL YO + U
+ 'ビュウ': 'byū', // KATAKANA LETTER BI + SMALL YU + U
+ 'ビャ': 'bya', // KATAKANA LETTER BI + SMALL YA
+ 'ビョ': 'byo', // KATAKANA LETTER BI + SMALL YO
+ 'ビュ': 'byu', // KATAKANA LETTER BI + SMALL YU
+ 'ビ': 'bi', // KATAKANA LETTER BI
+ 'ブウ': 'bū', // KATAKANA LETTER BU + U
+ 'ブ': 'bu', // KATAKANA LETTER BU
+ 'ベ': 'be', // KATAKANA LETTER BE
+ 'ボウ': 'bÅ', // KATAKANA LETTER BO + U
+ 'ボ': 'bo', // KATAKANA LETTER BO
+
+ 'パ': 'pa', // KATAKANA LETTER PA
+ 'ピョウ': 'pyÅ', // KATAKANA LETTER PI + SMALL YO + U
+ 'ピュウ': 'pyū', // KATAKANA LETTER PI + SMALL YU + U
+ 'ピャ': 'pya', // KATAKANA LETTER PI + SMALL YA
+ 'ピョ': 'pyo', // KATAKANA LETTER PI + SMALL YO
+ 'ピュ': 'pyu', // KATAKANA LETTER PI + SMALL YU
+ 'ピ': 'pi', // KATAKANA LETTER PI
+ 'プウ': 'pū', // KATAKANA LETTER PU + U
+ 'プ': 'pu', // KATAKANA LETTER PU
+ 'ペ': 'pe', // KATAKANA LETTER PE
+ 'ãƒã‚¦': 'pÅ', // KATAKANA LETTER PO + U
+ 'ãƒ': 'po', // KATAKANA LETTER PO
+
+ 'ヴ': 'v', // KATAKANA LETTER VU
+
+ '・': ' ', // KATAKANA MIDDLE DOT
+
+ 'ã„ã‡': 'ye', // HIRAGANA LETTER I + SMALL E
+
+ 'ã‚': 'a', // HIRAGANA LETTER A
+ 'ã„': 'i', // HIRAGANA LETTER I
+ 'ã†ã†': 'Å«', // HIRAGANA LETTER U + U
+ 'ã†': 'u', // HIRAGANA LETTER U
+ 'ãˆ': 'e', // HIRAGANA LETTER E
+ 'ãŠã†': 'Å', // HIRAGANA LETTER O + U
+ 'ãŠ': 'o', // HIRAGANA LETTER O
+
+ 'ãã': 'kwa', // HIRAGANA LETTER KU + SMALL A
+ 'ããƒ': 'kwi', // HIRAGANA LETTER KU + SMALL I
+ 'ãã‡': 'kwe', // HIRAGANA LETTER KU + SMALL E
+ 'ãã‰': 'kwo', // HIRAGANA LETTER KU + SMALL O
+
+ 'ã‹': 'ka', // HIRAGANA LETTER KA
+ 'ãょã†': 'kyÅ', // HIRAGANA LETTER KI + SMALL YO + U
+ 'ãã‚…ã†': 'kyÅ«', // HIRAGANA LETTER KI + SMALL YU + U
+ 'ãゃ': 'kya', // HIRAGANA LETTER KI + SMALL YA
+ 'ãょ': 'kyo', // HIRAGANA LETTER KI + SMALL YO
+ 'ãã‚…': 'kyu', // HIRAGANA LETTER KI + SMALL YU
+ 'ã': 'ki', // HIRAGANA LETTER KI
+ 'ãã†': 'kÅ«', // HIRAGANA LETTER KU + U
+ 'ã': 'ku', // HIRAGANA LETTER KU
+ 'ã‘': 'ke', // HIRAGANA LETTER KE
+ 'ã“ã†': 'kÅ', // HIRAGANA LETTER KO + U
+ 'ã“': 'ko', // HIRAGANA LETTER KO
+
+ 'ã—ã‡': 'she', // HIRAGANA LETTER SI + SMALL E
+ 'ã™ãƒ': 'si', // HIRAGANA LETTER SU + SMALL I
+
+ 'ã•': 'sa', // HIRAGANA LETTER SA
+ 'ã—ょã†': 'shÅ', // HIRAGANA LETTER SI + SMALL YO + U
+ 'ã—ã‚…ã†': 'shÅ«', // HIRAGANA LETTER SI + SMALL YU + U
+ 'ã—ゃ': 'sha', // HIRAGANA LETTER SI + SMALL YA
+ 'ã—ょ': 'sho', // HIRAGANA LETTER SI + SMALL YO
+ 'ã—ã‚…': 'shu', // HIRAGANA LETTER SI + SMALL YU
+ 'ã—': 'shi', // HIRAGANA LETTER SI
+ 'ã™ã†': 'sÅ«', // HIRAGANA LETTER SU + U
+ 'ã™': 'su', // HIRAGANA LETTER SU
+ 'ã›': 'se', // HIRAGANA LETTER SE
+ 'ãã†': 'sÅ', // HIRAGANA LETTER SO + U
+ 'ã': 'so', // HIRAGANA LETTER SO
+
+ 'ã¡ã‡': 'che', // HIRAGANA LETTER TI + SMALL E
+ 'ã¤ã': 'tsa', // HIRAGANA LETTER TU + SMALL A
+ 'ã¤ãƒ': 'tsi', // HIRAGANA LETTER TU + SMALL I
+ 'ã¤ã‡': 'tse', // HIRAGANA LETTER TU + SMALL E
+ 'ã¤ã‰': 'tso', // HIRAGANA LETTER TU + SMALL O
+ 'ã¦ãƒ': 'ti', // HIRAGANA LETTER TE + SMALL I
+ 'ã§ãƒ': 'di', // HIRAGANA LETTER DE + SMALL I
+ 'ã¦ã‚…': 'tyu', // HIRAGANA LETTER TE + SMALL YU
+ 'ã§ã‚…': 'dyu', // HIRAGANA LETTER DE + SMALL YU
+ 'ã¨ãƒ': 'twi', // HIRAGANA LETTER TO + SMALL I
+ 'ã¨ã…': 'tu', // HIRAGANA LETTER TO + SMALL U
+ 'ã©ãƒ': 'dwi', // HIRAGANA LETTER DO + SMALL I
+ 'ã©ã…': 'du', // HIRAGANA LETTER DO + SMALL U
+
+ 'ãŸ': 'ta', // HIRAGANA LETTER TA
+ 'ã¡ã‚‡ã†': 'chÅ', // HIRAGANA LETTER TI + SMALL YO + U
+ 'ã¡ã‚…ã†': 'chÅ«', // HIRAGANA LETTER TI + SMALL YU + U
+ 'ã¡ã‚ƒ': 'cha', // HIRAGANA LETTER TI + SMALL YA
+ 'ã¡ã‚‡': 'cho', // HIRAGANA LETTER TI + SMALL YO
+ 'ã¡ã‚…': 'chu', // HIRAGANA LETTER TI + SMALL YU
+ 'ã¡': 'chi', // HIRAGANA LETTER TI
+ 'ã¤ã†': 'tsÅ«', // HIRAGANA LETTER TU + U
+ 'ã¤': 'tsu', // HIRAGANA LETTER TU
+ 'ã¦': 'te', // HIRAGANA LETTER TE
+ 'ã¨ã†': 'tÅ', // HIRAGANA LETTER TO + U
+ 'ã¨': 'to', // HIRAGANA LETTER TO
+
+ 'ãª': 'na', // HIRAGANA LETTER NA
+ 'ã«ã‚‡ã†': 'nyÅ', // HIRAGANA LETTER NI + SMALL YO + U
+ 'ã«ã‚…ã†': 'nyÅ«', // HIRAGANA LETTER NI + SMALL YU + U
+ 'ã«ã‚ƒ': 'nya', // HIRAGANA LETTER NI + SMALL YA
+ 'ã«ã‚‡': 'nyo', // HIRAGANA LETTER NI + SMALL YO
+ 'ã«ã‚…': 'nyu', // HIRAGANA LETTER NI + SMALL YU
+ 'ã«': 'ni', // HIRAGANA LETTER NI
+ 'ã¬ã†': 'nÅ«', // HIRAGANA LETTER NU + U
+ 'ã¬': 'nu', // HIRAGANA LETTER NU
+ 'ã­': 'ne', // HIRAGANA LETTER NE
+ 'ã®ã†': 'nÅ', // HIRAGANA LETTER NO + U
+ 'ã®': 'no', // HIRAGANA LETTER NO
+
+ 'ãµã': 'fa', // HIRAGANA LETTER HU + SMALL A
+ 'ãµãƒ': 'fi', // HIRAGANA LETTER HU + SMALL I
+ //'ãµã…': 'fu', // HIRAGANA LETTER HU + SMALL U
+ 'ãµã‡': 'fe', // HIRAGANA LETTER HU + SMALL E
+ 'ãµã‰': 'fo', // HIRAGANA LETTER HU + SMALL O
+ 'ãµã‚…': 'fyu', // HIRAGANA LETTER HU + SMALL YU
+ 'ã»ã‡': 'hwe', // HIRAGANA LETTER HO + SMALL E
+
+ 'ã¯': 'ha', // HIRAGANA LETTER HA
+ 'ã²ã‚‡ã†': 'hyÅ', // HIRAGANA LETTER HI + SMALL YO + U
+ 'ã²ã‚…ã†': 'hyÅ«', // HIRAGANA LETTER HI + SMALL YU + U
+ 'ã²ã‚ƒ': 'hya', // HIRAGANA LETTER HI + SMALL YA
+ 'ã²ã‚‡': 'hyo', // HIRAGANA LETTER HI + SMALL YO
+ 'ã²ã‚…': 'hyu', // HIRAGANA LETTER HI + SMALL YU
+ 'ã²': 'hi', // HIRAGANA LETTER HI
+ 'ãµã†': 'fÅ«', // HIRAGANA LETTER HU + U
+ 'ãµ': 'fu', // HIRAGANA LETTER HU
+ 'ã¸': 'he', // HIRAGANA LETTER HE
+ 'ã»ã†': 'hÅ', // HIRAGANA LETTER HO + U
+ 'ã»': 'ho', // HIRAGANA LETTER HO
+
+ 'ã¾': 'ma', // HIRAGANA LETTER MA
+ 'ã¿ã‚‡ã†': 'myÅ', // HIRAGANA LETTER MI + SMALL YO + U
+ 'ã¿ã‚…ã†': 'myÅ«', // HIRAGANA LETTER MI + SMALL YU + U
+ 'ã¿ã‚ƒ': 'mya', // HIRAGANA LETTER MI + SMALL YA
+ 'ã¿ã‚‡': 'myo', // HIRAGANA LETTER MI + SMALL YO
+ 'ã¿ã‚…': 'myu', // HIRAGANA LETTER MI + SMALL YU
+ 'ã¿': 'mi', // HIRAGANA LETTER MI
+ 'ã‚€ã†': 'mÅ«', // HIRAGANA LETTER MU + U
+ 'ã‚€': 'mu', // HIRAGANA LETTER MU
+ 'ã‚': 'me', // HIRAGANA LETTER ME
+ 'ã‚‚ã†': 'mÅ', // HIRAGANA LETTER MO + U
+ 'ã‚‚': 'mo', // HIRAGANA LETTER MO
+
+ 'ã‚„': 'ya', // HIRAGANA LETTER YA
+ 'ゆã†': 'yÅ«', // HIRAGANA LETTER YU + U
+ 'ゆ': 'yu', // HIRAGANA LETTER YU
+ 'よã†': 'yÅ', // HIRAGANA LETTER YO + U
+ 'よ': 'yo', // HIRAGANA LETTER YO
+
+ 'ã‚Šã‡': 'rye', // HIRAGANA LETTER RI + SMALL E
+
+ 'ら': 'ra', // HIRAGANA LETTER RA
+ 'りょã†': 'ryÅ', // HIRAGANA LETTER RI + SMALL YO + U
+ 'ã‚Šã‚…ã†': 'ryÅ«', // HIRAGANA LETTER RI + SMALL YU + U
+ 'りゃ': 'rya', // HIRAGANA LETTER RI + SMALL YA
+ 'りょ': 'ryo', // HIRAGANA LETTER RI + SMALL YO
+ 'ã‚Šã‚…': 'ryu', // HIRAGANA LETTER RI + SMALL YU
+ 'ã‚Š': 'ri', // HIRAGANA LETTER RI
+ 'ã‚‹ã†': 'rÅ«', // HIRAGANA LETTER RU + U
+ 'ã‚‹': 'ru', // HIRAGANA LETTER RU
+ 'れ': 're', // HIRAGANA LETTER RE
+ 'ã‚ã†': 'rÅ', // HIRAGANA LETTER RO + U
+ 'ã‚': 'ro', // HIRAGANA LETTER RO
+
+ 'ã‚': 'wa', // HIRAGANA LETTER WA
+ 'ã‚': 'i', // HIRAGANA LETTER WI
+ 'ã‚‘': 'e', // HIRAGANA LETTER WE
+ 'ã‚’': 'o', // HIRAGANA LETTER WO
+
+ 'ã‚“': 'n', // HIRAGANA LETTER N
+
+ 'ãã': 'gwa', // HIRAGANA LETTER GU + SMALL A
+ 'ããƒ': 'gwi', // HIRAGANA LETTER GU + SMALL I
+ 'ãã‡': 'gwe', // HIRAGANA LETTER GU + SMALL E
+ 'ãã‰': 'gwo', // HIRAGANA LETTER GU + SMALL O
+
+ 'ãŒ': 'ga', // HIRAGANA LETTER GA
+ 'ãŽã‚‡ã†': 'gyÅ', // HIRAGANA LETTER GI + SMALL YO + U
+ 'ãŽã‚…ã†': 'gyÅ«', // HIRAGANA LETTER GI + SMALL YU + U
+ 'ãŽã‚ƒ': 'gya', // HIRAGANA LETTER GI + SMALL YA
+ 'ãŽã‚‡': 'gyo', // HIRAGANA LETTER GI + SMALL YO
+ 'ãŽã‚…': 'gyu', // HIRAGANA LETTER GI + SMALL YU
+ 'ãŽ': 'gi', // HIRAGANA LETTER GI
+ 'ãã†': 'gÅ«', // HIRAGANA LETTER GU + U
+ 'ã': 'gu', // HIRAGANA LETTER GU
+ 'ã’': 'ge', // HIRAGANA LETTER GE
+ 'ã”ã†': 'gÅ', // HIRAGANA LETTER GO + U
+ 'ã”': 'go', // HIRAGANA LETTER GO
+
+ 'ã˜ã‡': 'je', // HIRAGANA LETTER ZI + SMALL E
+ 'ãšãƒ': 'zi', // HIRAGANA LETTER ZU + SMALL I
+
+ 'ã–': 'za', // HIRAGANA LETTER ZA
+ 'ã˜ã‚‡ã†': 'jÅ', // HIRAGANA LETTER ZI + SMALL YO + U
+ 'ã˜ã‚…ã†': 'jÅ«', // HIRAGANA LETTER ZI + SMALL YU + U
+ 'ã˜ã‚ƒ': 'ja', // HIRAGANA LETTER ZI + SMALL YA
+ 'ã˜ã‚‡': 'jo', // HIRAGANA LETTER ZI + SMALL YO
+ 'ã˜ã‚…': 'ju', // HIRAGANA LETTER ZI + SMALL YU
+ 'ã˜': 'ji', // HIRAGANA LETTER ZI
+ 'ãšã†': 'zÅ«', // HIRAGANA LETTER ZU + U
+ 'ãš': 'zu', // HIRAGANA LETTER ZU
+ 'ãœ': 'ze', // HIRAGANA LETTER ZE
+ 'ãžã†': 'zÅ', // HIRAGANA LETTER ZO + U
+ 'ãž': 'zo', // HIRAGANA LETTER ZO
+
+ 'ã ': 'da', // HIRAGANA LETTER DA
+ 'ã¢': 'ji', // HIRAGANA LETTER DI
+ 'ã¥ã†': 'zÅ«', // HIRAGANA LETTER DU + U
+ 'ã¥': 'zu', // HIRAGANA LETTER DU
+ 'ã§': 'de', // HIRAGANA LETTER DE
+ 'ã©ã†': 'dÅ', // HIRAGANA LETTER DO + U
+ 'ã©': 'do', // HIRAGANA LETTER DO
+
+ 'ã¶ã‚…': 'byu', // HIRAGANA LETTER BU + SMALL YU
+
+ 'ã°': 'ba', // HIRAGANA LETTER BA
+ 'ã³ã‚‡ã†': 'byÅ', // HIRAGANA LETTER BI + SMALL YO + U
+ 'ã³ã‚…ã†': 'byÅ«', // HIRAGANA LETTER BI + SMALL YU + U
+ 'ã³ã‚ƒ': 'bya', // HIRAGANA LETTER BI + SMALL YA
+ 'ã³ã‚‡': 'byo', // HIRAGANA LETTER BI + SMALL YO
+ 'ã³ã‚…': 'byu', // HIRAGANA LETTER BI + SMALL YU
+ 'ã³': 'bi', // HIRAGANA LETTER BI
+ 'ã¶ã†': 'bÅ«', // HIRAGANA LETTER BU + U
+ 'ã¶': 'bu', // HIRAGANA LETTER BU
+ 'ã¹': 'be', // HIRAGANA LETTER BE
+ 'ã¼ã†': 'bÅ', // HIRAGANA LETTER BO + U
+ 'ã¼': 'bo', // HIRAGANA LETTER BO
+
+ 'ã±': 'pa', // HIRAGANA LETTER PA
+ 'ã´ã‚‡ã†': 'pyÅ', // HIRAGANA LETTER PI + SMALL YO + U
+ 'ã´ã‚…ã†': 'pyÅ«', // HIRAGANA LETTER PI + SMALL YU + U
+ 'ã´ã‚ƒ': 'pya', // HIRAGANA LETTER PI + SMALL YA
+ 'ã´ã‚‡': 'pyo', // HIRAGANA LETTER PI + SMALL YO
+ 'ã´ã‚…': 'pyu', // HIRAGANA LETTER PI + SMALL YU
+ 'ã´': 'pi', // HIRAGANA LETTER PI
+ 'ã·ã†': 'pÅ«', // HIRAGANA LETTER PU + U
+ 'ã·': 'pu', // HIRAGANA LETTER PU
+ 'ãº': 'pe', // HIRAGANA LETTER PE
+ 'ã½ã†': 'pÅ', // HIRAGANA LETTER PO + U
+ 'ã½': 'po', // HIRAGANA LETTER PO
+
+ 'ã‚”': 'v' // HIRAGANA LETTER VU
+};
+
+var transliterationTable3 = {
+ 'aã‚¡': 'Ä',
+ 'aã': 'Ä',
+ 'iィー': 'ī',
+ 'iã‚£': 'Ä«',
+ 'iãƒãƒ¼': 'Ä«',
+ 'iãƒ': 'Ä«',
+ 'aー': 'Ä',
+ 'iー': 'ī',
+ 'uー': 'ū',
+ 'eー': 'ē',
+ 'oー': 'Å',
+
+ // Fallback for small vowels
+ 'ã‚¡': 'a',
+ 'ã‚£': 'i',
+ 'ã‚¥': 'u',
+ 'ェ': 'e',
+ 'ã‚©': 'o',
+ 'ã': 'a',
+ 'ãƒ': 'i',
+ 'ã…': 'u',
+ 'ã‡': 'e',
+ 'ã‰': 'o'
+};
+
+var replace1 = replacer(transliterationTable1);
+var replace2 = replacer(transliterationTable2);
+var replace3 = replacer(transliterationTable3);
+
+module.exports = function(str) {
+ str = replace1(str);
+
+ str = str
+ .replace(/ッ(?=[ン])/g, 'n')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã‚“])/g, 'n')// HIRAGANA LETTER SMALL TU
+ .replace(/ン(?=[ãƒãƒ“ブベボパピプペãƒãƒžãƒŸãƒ ãƒ¡ãƒ¢])/g, 'm')// KATAKANA LETTER N
+ .replace(/ã‚“(?=[ã°ã³ã¶ã¹ã¼ã±ã´ã·ãºã½ã¾ã¿ã‚€ã‚ã‚‚])/g, 'm')// HIRAGANA LETTER N
+ .replace(/ン(?=[ヤユヨアイウエオ])/g, "n'")// KATAKANA LETTER N
+ .replace(/ã‚“(?=[やゆよã‚ã„ã†ãˆãŠ])/g, "n'");// HIRAGANA LETTER N
+ str = str
+ .replace(/ッ(?=[カキクケコ])/g, 'k')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã‹ããã‘ã“])/g, 'k')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ガギグゲゴ])/g, 'g')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãŒãŽãã’ã”])/g, 'g')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[サシスセソ])/g, 's')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã•ã—ã™ã›ã])/g, 's')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ザズゼゾ])/g, 'z')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã–ãšãœãž])/g, 'z')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ジ])/g, 'j')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã˜])/g, 'j')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ã‚¿ãƒãƒ„テト])/g, 't')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãŸã¡ã¤ã¦ã¨])/g, 't')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ダヂヅデド])/g, 't')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã ã¢ã¥ã§ã©])/g, 't')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ãƒãƒ’ヘホ])/g, 'h')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã¯ã²ã¸ã»])/g, 'h')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[フ])/g, 'f')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãµ])/g, 'f')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ãƒãƒ“ブベボ])/g, 'b')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã°ã³ã¶ã¹ã¼])/g, 'b')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[パピプペãƒ])/g, 'p')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã±ã´ã·ãºã½])/g, 'p')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ラリルレロ])/g, 'r')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[らりるれã‚])/g, 'r');// HIRAGANA LETTER SMALL TU
+
+ str = replace2(str);
+ str = replace3(str);
+
+ str = str
+ .replace(/(ッ|ã£)\B/g, 't');// FINAL KATAKANA LETTER SMALL TU
+
+ return str;
+};
+
+},{"../../util/utils":55}],44:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer'),
+ tokenizer = new Tokenizer();
+
+module.exports = function() {
+ this.compare = function(stringA, stringB) {
+ return this.process(stringA) == this.process(stringB);
+ };
+
+ this.attach = function() {
+ var phonetic = this;
+
+ String.prototype.soundsLike = function(compareTo) {
+ return phonetic.compare(this, compareTo);
+ }
+
+ String.prototype.phonetics = function() {
+ return phonetic.process(this);
+ }
+
+ String.prototype.tokenizeAndPhoneticize = function(keepStops) {
+ var phoneticizedTokens = [];
+
+ tokenizer.tokenize(this).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) < 0)
+ phoneticizedTokens.push(token.phonetics());
+ });
+
+ return phoneticizedTokens;
+ }
+ };
+};
+
+})()
+},{"../util/stopwords":32,"../tokenizers/aggressive_tokenizer":18}],45:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.addStopWord = function(stopWord) {
+ stopwords.words.push(stopWord);
+ };
+
+ stemmer.addStopWords = function(moreStopWords) {
+ stopwords.words = stopwords.words.concat(moreStopWords);
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) == -1)
+ stemmedTokens.push(stemmer.stem(token));
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords":32,"../tokenizers/aggressive_tokenizer":18}],46:[function(require,module,exports){
+/*
+Copyright (c) 2012, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_ru');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_ru');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(new RegExp('[а-ÑÑ‘0-9]+', 'gi'))) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_ru":56,"../tokenizers/aggressive_tokenizer_ru":15}],47:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Stemmer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_fa');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_fa');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) == -1)
+ stemmedTokens.push(stemmer.stem(token));
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_fa":57,"../tokenizers/aggressive_tokenizer_fa":14}],49:[function(require,module,exports){
+var stopwords = require('../util/stopwords_it');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_it');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(/[a-zàèìòù0-9]/gi)) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+},{"../util/stopwords_it":58,"../tokenizers/aggressive_tokenizer_it":17}],48:[function(require,module,exports){
+/*
+Copyright (c) 2012, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_es');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_es');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(new RegExp('[а-záéíóúüñ0-9]+', 'gi'))) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_es":59,"../tokenizers/aggressive_tokenizer_es":16}],60:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util');
+
+var Classifier = function(classifier, stemmer) {
+ this.classifier = classifier;
+ this.docs = [];
+ this.features = {};
+ this.stemmer = stemmer || PorterStemmer;
+ this.lastAdded = 0;
+};
+
+function addDocument(text, classification) {
+ if(typeof text === 'string')
+ text = this.stemmer.tokenizeAndStem(text);
+
+ if(text.length === 0) {
+ // ignore empty documents
+ return;
+ }
+
+ this.docs.push({
+ label: classification,
+ text: text
+ });
+
+ for(var i = 0; i < text.length; i++) {
+ this.features[text[i]] = 1;
+ }
+}
+
+function textToFeatures(observation) {
+ var features = [];
+
+ if(typeof observation === 'string')
+ observation = this.stemmer.tokenizeAndStem(observation);
+
+ for(var feature in this.features) {
+ if(observation.indexOf(feature) > -1)
+ features.push(1);
+ else
+ features.push(0);
+ }
+
+ return features;
+}
+
+function train() {
+ for(var i = this.lastAdded; i < this.docs.length; i++) {
+ var features = this.textToFeatures(this.docs[i].text);
+ this.classifier.addExample(features, this.docs[i].label);
+ this.lastAdded++;
+ }
+
+ this.classifier.train();
+}
+
+function getClassifications(observation) {
+ return this.classifier.getClassifications(this.textToFeatures(observation));
+}
+
+function classify(observation) {
+ return this.classifier.classify(this.textToFeatures(observation));
+}
+
+function restore(classifier, stemmer) {
+ classifier.stemmer = stemmer || PorterStemmer;
+ return classifier;
+}
+
+function save(filename, callback) {
+ var data = JSON.stringify(this);
+ var fs = require('fs');
+ var classifier = this;
+ fs.writeFile(filename, data, 'utf8', function(err) {
+ if(callback) {
+ callback(err, err ? null : classifier);
+ }
+ });
+}
+
+function load(filename, callback) {
+ var fs = require('fs');
+
+ fs.readFile(filename, 'utf8', function(err, data) {
+ var classifier;
+
+ if(!err) {
+ classifier = JSON.parse(data);
+ }
+
+ if(callback)
+ callback(err, classifier);
+ });
+}
+
+Classifier.prototype.addDocument = addDocument;
+Classifier.prototype.train = train;
+Classifier.prototype.classify = classify;
+Classifier.prototype.textToFeatures = textToFeatures;
+Classifier.prototype.save = save;
+Classifier.prototype.getClassifications = getClassifications;
+Classifier.restore = restore;
+Classifier.load = load;
+
+module.exports = Classifier;
+
+},{"util":40,"fs":42,"../stemmers/porter_stemmer":7}],61:[function(require,module,exports){
+require=(function(e,t,n,r){function i(r){if(!n[r]){if(!t[r]){if(e)return e(r);throw new Error("Cannot find module '"+r+"'")}var s=n[r]={exports:{}};t[r][0](function(e){var n=t[r][1][e];return i(n?n:e)},s,s.exports)}return n[r].exports}for(var s=0;s<r.length;s++)i(r[s]);return i})(typeof require!=="undefined"&&require,{1:[function(require,module,exports){
+exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) {
+ var e, m,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ nBits = -7,
+ i = isBE ? 0 : (nBytes - 1),
+ d = isBE ? 1 : -1,
+ s = buffer[offset + i];
+
+ i += d;
+
+ e = s & ((1 << (-nBits)) - 1);
+ s >>= (-nBits);
+ nBits += eLen;
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ m = e & ((1 << (-nBits)) - 1);
+ e >>= (-nBits);
+ nBits += mLen;
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ if (e === 0) {
+ e = 1 - eBias;
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity);
+ } else {
+ m = m + Math.pow(2, mLen);
+ e = e - eBias;
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+};
+
+exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) {
+ var e, m, c,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
+ i = isBE ? (nBytes - 1) : 0,
+ d = isBE ? -1 : 1,
+ s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+
+ value = Math.abs(value);
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0;
+ e = eMax;
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2);
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--;
+ c *= 2;
+ }
+ if (e + eBias >= 1) {
+ value += rt / c;
+ } else {
+ value += rt * Math.pow(2, 1 - eBias);
+ }
+ if (value * c >= 2) {
+ e++;
+ c /= 2;
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0;
+ e = eMax;
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen);
+ e = e + eBias;
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+ e = 0;
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
+
+ e = (e << mLen) | m;
+ eLen += mLen;
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
+
+ buffer[offset + i - d] |= s * 128;
+};
+
+},{}],2:[function(require,module,exports){
+(function(){// UTILITY
+var util = require('util');
+var Buffer = require("buffer").Buffer;
+var pSlice = Array.prototype.slice;
+
+function objectKeys(object) {
+ if (Object.keys) return Object.keys(object);
+ var result = [];
+ for (var name in object) {
+ if (Object.prototype.hasOwnProperty.call(object, name)) {
+ result.push(name);
+ }
+ }
+ return result;
+}
+
+// 1. The assert module provides functions that throw
+// AssertionError's when particular conditions are not met. The
+// assert module must conform to the following interface.
+
+var assert = module.exports = ok;
+
+// 2. The AssertionError is defined in assert.
+// new assert.AssertionError({ message: message,
+// actual: actual,
+// expected: expected })
+
+assert.AssertionError = function AssertionError(options) {
+ this.name = 'AssertionError';
+ this.message = options.message;
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+ var stackStartFunction = options.stackStartFunction || fail;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, stackStartFunction);
+ }
+};
+util.inherits(assert.AssertionError, Error);
+
+function replacer(key, value) {
+ if (value === undefined) {
+ return '' + value;
+ }
+ if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) {
+ return value.toString();
+ }
+ if (typeof value === 'function' || value instanceof RegExp) {
+ return value.toString();
+ }
+ return value;
+}
+
+function truncate(s, n) {
+ if (typeof s == 'string') {
+ return s.length < n ? s : s.slice(0, n);
+ } else {
+ return s;
+ }
+}
+
+assert.AssertionError.prototype.toString = function() {
+ if (this.message) {
+ return [this.name + ':', this.message].join(' ');
+ } else {
+ return [
+ this.name + ':',
+ truncate(JSON.stringify(this.actual, replacer), 128),
+ this.operator,
+ truncate(JSON.stringify(this.expected, replacer), 128)
+ ].join(' ');
+ }
+};
+
+// assert.AssertionError instanceof Error
+
+assert.AssertionError.__proto__ = Error.prototype;
+
+// At present only the three keys mentioned above are used and
+// understood by the spec. Implementations or sub modules can pass
+// other keys to the AssertionError's constructor - they will be
+// ignored.
+
+// 3. All of the following functions must throw an AssertionError
+// when a corresponding condition is not met, with a message that
+// may be undefined if not provided. All assertion methods provide
+// both the actual and expected values to the assertion error for
+// display purposes.
+
+function fail(actual, expected, message, operator, stackStartFunction) {
+ throw new assert.AssertionError({
+ message: message,
+ actual: actual,
+ expected: expected,
+ operator: operator,
+ stackStartFunction: stackStartFunction
+ });
+}
+
+// EXTENSION! allows for well behaved errors defined elsewhere.
+assert.fail = fail;
+
+// 4. Pure assertion tests whether a value is truthy, as determined
+// by !!guard.
+// assert.ok(guard, message_opt);
+// This statement is equivalent to assert.equal(true, guard,
+// message_opt);. To test strictly for the value true, use
+// assert.strictEqual(true, guard, message_opt);.
+
+function ok(value, message) {
+ if (!!!value) fail(value, true, message, '==', assert.ok);
+}
+assert.ok = ok;
+
+// 5. The equality assertion tests shallow, coercive equality with
+// ==.
+// assert.equal(actual, expected, message_opt);
+
+assert.equal = function equal(actual, expected, message) {
+ if (actual != expected) fail(actual, expected, message, '==', assert.equal);
+};
+
+// 6. The non-equality assertion tests for whether two objects are not equal
+// with != assert.notEqual(actual, expected, message_opt);
+
+assert.notEqual = function notEqual(actual, expected, message) {
+ if (actual == expected) {
+ fail(actual, expected, message, '!=', assert.notEqual);
+ }
+};
+
+// 7. The equivalence assertion tests a deep equality relation.
+// assert.deepEqual(actual, expected, message_opt);
+
+assert.deepEqual = function deepEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'deepEqual', assert.deepEqual);
+ }
+};
+
+function _deepEqual(actual, expected) {
+ // 7.1. All identical values are equivalent, as determined by ===.
+ if (actual === expected) {
+ return true;
+
+ } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
+ if (actual.length != expected.length) return false;
+
+ for (var i = 0; i < actual.length; i++) {
+ if (actual[i] !== expected[i]) return false;
+ }
+
+ return true;
+
+ // 7.2. If the expected value is a Date object, the actual value is
+ // equivalent if it is also a Date object that refers to the same time.
+ } else if (actual instanceof Date && expected instanceof Date) {
+ return actual.getTime() === expected.getTime();
+
+ // 7.3. Other pairs that do not both pass typeof value == 'object',
+ // equivalence is determined by ==.
+ } else if (typeof actual != 'object' && typeof expected != 'object') {
+ return actual == expected;
+
+ // 7.4. For all other Object pairs, including Array objects, equivalence is
+ // determined by having the same number of owned properties (as verified
+ // with Object.prototype.hasOwnProperty.call), the same set of keys
+ // (although not necessarily the same order), equivalent values for every
+ // corresponding key, and an identical 'prototype' property. Note: this
+ // accounts for both named and indexed properties on Arrays.
+ } else {
+ return objEquiv(actual, expected);
+ }
+}
+
+function isUndefinedOrNull(value) {
+ return value === null || value === undefined;
+}
+
+function isArguments(object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+}
+
+function objEquiv(a, b) {
+ if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+ return false;
+ // an identical 'prototype' property.
+ if (a.prototype !== b.prototype) return false;
+ //~~~I've managed to break Object.keys through screwy arguments passing.
+ // Converting to array solves the problem.
+ if (isArguments(a)) {
+ if (!isArguments(b)) {
+ return false;
+ }
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b);
+ }
+ try {
+ var ka = objectKeys(a),
+ kb = objectKeys(b),
+ key, i;
+ } catch (e) {//happens when one is a string literal and the other isn't
+ return false;
+ }
+ // having the same number of owned properties (keys incorporates
+ // hasOwnProperty)
+ if (ka.length != kb.length)
+ return false;
+ //the same set of keys (although not necessarily the same order),
+ ka.sort();
+ kb.sort();
+ //~~~cheap key test
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] != kb[i])
+ return false;
+ }
+ //equivalent values for every corresponding key, and
+ //~~~possibly expensive deep test
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key])) return false;
+ }
+ return true;
+}
+
+// 8. The non-equivalence assertion tests for any deep inequality.
+// assert.notDeepEqual(actual, expected, message_opt);
+
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
+ }
+};
+
+// 9. The strict equality assertion tests strict equality, as determined by ===.
+// assert.strictEqual(actual, expected, message_opt);
+
+assert.strictEqual = function strictEqual(actual, expected, message) {
+ if (actual !== expected) {
+ fail(actual, expected, message, '===', assert.strictEqual);
+ }
+};
+
+// 10. The strict non-equality assertion tests for strict inequality, as
+// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
+
+assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+ if (actual === expected) {
+ fail(actual, expected, message, '!==', assert.notStrictEqual);
+ }
+};
+
+function expectedException(actual, expected) {
+ if (!actual || !expected) {
+ return false;
+ }
+
+ if (expected instanceof RegExp) {
+ return expected.test(actual);
+ } else if (actual instanceof expected) {
+ return true;
+ } else if (expected.call({}, actual) === true) {
+ return true;
+ }
+
+ return false;
+}
+
+function _throws(shouldThrow, block, expected, message) {
+ var actual;
+
+ if (typeof expected === 'string') {
+ message = expected;
+ expected = null;
+ }
+
+ try {
+ block();
+ } catch (e) {
+ actual = e;
+ }
+
+ message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
+ (message ? ' ' + message : '.');
+
+ if (shouldThrow && !actual) {
+ fail('Missing expected exception' + message);
+ }
+
+ if (!shouldThrow && expectedException(actual, expected)) {
+ fail('Got unwanted exception' + message);
+ }
+
+ if ((shouldThrow && actual && expected &&
+ !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+ throw actual;
+ }
+}
+
+// 11. Expected to throw an error:
+// assert.throws(block, Error_opt, message_opt);
+
+assert.throws = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [true].concat(pSlice.call(arguments)));
+};
+
+// EXTENSION! This is annoying to write outside this module.
+assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [false].concat(pSlice.call(arguments)));
+};
+
+assert.ifError = function(err) { if (err) {throw err;}};
+
+})()
+},{"util":3,"buffer":4}],"buffer-browserify":[function(require,module,exports){
+module.exports=require('q9TxCC');
+},{}],"q9TxCC":[function(require,module,exports){
+(function(){function SlowBuffer (size) {
+ this.length = size;
+};
+
+var assert = require('assert');
+
+exports.INSPECT_MAX_BYTES = 50;
+
+
+function toHex(n) {
+ if (n < 16) return '0' + n.toString(16);
+ return n.toString(16);
+}
+
+function utf8ToBytes(str) {
+ var byteArray = [];
+ for (var i = 0; i < str.length; i++)
+ if (str.charCodeAt(i) <= 0x7F)
+ byteArray.push(str.charCodeAt(i));
+ else {
+ var h = encodeURIComponent(str.charAt(i)).substr(1).split('%');
+ for (var j = 0; j < h.length; j++)
+ byteArray.push(parseInt(h[j], 16));
+ }
+
+ return byteArray;
+}
+
+function asciiToBytes(str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; i++ )
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push( str.charCodeAt(i) & 0xFF );
+
+ return byteArray;
+}
+
+function base64ToBytes(str) {
+ return require("base64-js").toByteArray(str);
+}
+
+SlowBuffer.byteLength = function (str, encoding) {
+ switch (encoding || "utf8") {
+ case 'hex':
+ return str.length / 2;
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8ToBytes(str).length;
+
+ case 'ascii':
+ case 'binary':
+ return str.length;
+
+ case 'base64':
+ return base64ToBytes(str).length;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+function blitBuffer(src, dst, offset, length) {
+ var pos, i = 0;
+ while (i < length) {
+ if ((i+offset >= dst.length) || (i >= src.length))
+ break;
+
+ dst[i + offset] = src[i];
+ i++;
+ }
+ return i;
+}
+
+SlowBuffer.prototype.utf8Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.asciiWrite = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.binaryWrite = SlowBuffer.prototype.asciiWrite;
+
+SlowBuffer.prototype.base64Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Slice = function (start, end) {
+ var bytes = Array.prototype.slice.apply(this, arguments)
+ return require("base64-js").fromByteArray(bytes);
+}
+
+function decodeUtf8Char(str) {
+ try {
+ return decodeURIComponent(str);
+ } catch (err) {
+ return String.fromCharCode(0xFFFD); // UTF 8 invalid char
+ }
+}
+
+SlowBuffer.prototype.utf8Slice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var res = "";
+ var tmp = "";
+ var i = 0;
+ while (i < bytes.length) {
+ if (bytes[i] <= 0x7F) {
+ res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]);
+ tmp = "";
+ } else
+ tmp += "%" + bytes[i].toString(16);
+
+ i++;
+ }
+
+ return res + decodeUtf8Char(tmp);
+}
+
+SlowBuffer.prototype.asciiSlice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var ret = "";
+ for (var i = 0; i < bytes.length; i++)
+ ret += String.fromCharCode(bytes[i]);
+ return ret;
+}
+
+SlowBuffer.prototype.binarySlice = SlowBuffer.prototype.asciiSlice;
+
+SlowBuffer.prototype.inspect = function() {
+ var out = [],
+ len = this.length;
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this[i]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+ return '<SlowBuffer ' + out.join(' ') + '>';
+};
+
+
+SlowBuffer.prototype.hexSlice = function(start, end) {
+ var len = this.length;
+
+ if (!start || start < 0) start = 0;
+ if (!end || end < 0 || end > len) end = len;
+
+ var out = '';
+ for (var i = start; i < end; i++) {
+ out += toHex(this[i]);
+ }
+ return out;
+};
+
+
+SlowBuffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+ start = +start || 0;
+ if (typeof end == 'undefined') end = this.length;
+
+ // Fastpath empty strings
+ if (+end == start) {
+ return '';
+ }
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.asciiSlice(start, end);
+
+ case 'binary':
+ return this.binarySlice(start, end);
+
+ case 'base64':
+ return this.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+SlowBuffer.prototype.hexWrite = function(string, offset, length) {
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length;
+ if (strLen % 2) {
+ throw new Error('Invalid hex string');
+ }
+ if (length > strLen / 2) {
+ length = strLen / 2;
+ }
+ for (var i = 0; i < length; i++) {
+ var byte = parseInt(string.substr(i * 2, 2), 16);
+ if (isNaN(byte)) throw new Error('Invalid hex string');
+ this[offset + i] = byte;
+ }
+ SlowBuffer._charsWritten = i * 2;
+ return i;
+};
+
+
+SlowBuffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexWrite(string, offset, length);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Write(string, offset, length);
+
+ case 'ascii':
+ return this.asciiWrite(string, offset, length);
+
+ case 'binary':
+ return this.binaryWrite(string, offset, length);
+
+ case 'base64':
+ return this.base64Write(string, offset, length);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Write(string, offset, length);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// slice(start, end)
+SlowBuffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ return new Buffer(this, end - start, +start);
+};
+
+SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) {
+ var temp = [];
+ for (var i=sourcestart; i<sourceend; i++) {
+ assert.ok(typeof this[i] !== 'undefined', "copying undefined buffer bytes!");
+ temp.push(this[i]);
+ }
+
+ for (var i=targetstart; i<targetstart+temp.length; i++) {
+ target[i] = temp[i-targetstart];
+ }
+};
+
+SlowBuffer.prototype.fill = function(value, start, end) {
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ for (var i = start; i < end; i++) {
+ this[i] = value;
+ }
+}
+
+function coerce(length) {
+ // Coerce length to a number (possibly NaN), round up
+ // in case it's fractional (e.g. 123.456) then do a
+ // double negate to coerce a NaN to 0. Easy, right?
+ length = ~~Math.ceil(+length);
+ return length < 0 ? 0 : length;
+}
+
+
+// Buffer
+
+function Buffer(subject, encoding, offset) {
+ if (!(this instanceof Buffer)) {
+ return new Buffer(subject, encoding, offset);
+ }
+
+ var type;
+
+ // Are we slicing?
+ if (typeof offset === 'number') {
+ this.length = coerce(encoding);
+ this.parent = subject;
+ this.offset = offset;
+ } else {
+ // Find the length
+ switch (type = typeof subject) {
+ case 'number':
+ this.length = coerce(subject);
+ break;
+
+ case 'string':
+ this.length = Buffer.byteLength(subject, encoding);
+ break;
+
+ case 'object': // Assume object is an array
+ this.length = coerce(subject.length);
+ break;
+
+ default:
+ throw new Error('First argument needs to be a number, ' +
+ 'array or string.');
+ }
+
+ if (this.length > Buffer.poolSize) {
+ // Big buffer, just alloc one.
+ this.parent = new SlowBuffer(this.length);
+ this.offset = 0;
+
+ } else {
+ // Small buffer.
+ if (!pool || pool.length - pool.used < this.length) allocPool();
+ this.parent = pool;
+ this.offset = pool.used;
+ pool.used += this.length;
+ }
+
+ // Treat array-ish objects as a byte array.
+ if (isArrayIsh(subject)) {
+ for (var i = 0; i < this.length; i++) {
+ if (subject instanceof Buffer) {
+ this.parent[i + this.offset] = subject.readUInt8(i);
+ }
+ else {
+ this.parent[i + this.offset] = subject[i];
+ }
+ }
+ } else if (type == 'string') {
+ // We are a string
+ this.length = this.write(subject, 0, encoding);
+ }
+ }
+
+}
+
+function isArrayIsh(subject) {
+ return Array.isArray(subject) || Buffer.isBuffer(subject) ||
+ subject && typeof subject === 'object' &&
+ typeof subject.length === 'number';
+}
+
+exports.SlowBuffer = SlowBuffer;
+exports.Buffer = Buffer;
+
+Buffer.poolSize = 8 * 1024;
+var pool;
+
+function allocPool() {
+ pool = new SlowBuffer(Buffer.poolSize);
+ pool.used = 0;
+}
+
+
+// Static methods
+Buffer.isBuffer = function isBuffer(b) {
+ return b instanceof Buffer || b instanceof SlowBuffer;
+};
+
+Buffer.concat = function (list, totalLength) {
+ if (!Array.isArray(list)) {
+ throw new Error("Usage: Buffer.concat(list, [totalLength])\n \
+ list should be an Array.");
+ }
+
+ if (list.length === 0) {
+ return new Buffer(0);
+ } else if (list.length === 1) {
+ return list[0];
+ }
+
+ if (typeof totalLength !== 'number') {
+ totalLength = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ totalLength += buf.length;
+ }
+ }
+
+ var buffer = new Buffer(totalLength);
+ var pos = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ buf.copy(buffer, pos);
+ pos += buf.length;
+ }
+ return buffer;
+};
+
+// Inspect
+Buffer.prototype.inspect = function inspect() {
+ var out = [],
+ len = this.length;
+
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this.parent[i + this.offset]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+
+ return '<Buffer ' + out.join(' ') + '>';
+};
+
+
+Buffer.prototype.get = function get(i) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i];
+};
+
+
+Buffer.prototype.set = function set(i, v) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i] = v;
+};
+
+
+// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8')
+Buffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ var ret;
+ switch (encoding) {
+ case 'hex':
+ ret = this.parent.hexWrite(string, this.offset + offset, length);
+ break;
+
+ case 'utf8':
+ case 'utf-8':
+ ret = this.parent.utf8Write(string, this.offset + offset, length);
+ break;
+
+ case 'ascii':
+ ret = this.parent.asciiWrite(string, this.offset + offset, length);
+ break;
+
+ case 'binary':
+ ret = this.parent.binaryWrite(string, this.offset + offset, length);
+ break;
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ ret = this.parent.base64Write(string, this.offset + offset, length);
+ break;
+
+ case 'ucs2':
+ case 'ucs-2':
+ ret = this.parent.ucs2Write(string, this.offset + offset, length);
+ break;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+
+ Buffer._charsWritten = SlowBuffer._charsWritten;
+
+ return ret;
+};
+
+
+// toString(encoding, start=0, end=buffer.length)
+Buffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ if (typeof start == 'undefined' || start < 0) {
+ start = 0;
+ } else if (start > this.length) {
+ start = this.length;
+ }
+
+ if (typeof end == 'undefined' || end > this.length) {
+ end = this.length;
+ } else if (end < 0) {
+ end = 0;
+ }
+
+ start = start + this.offset;
+ end = end + this.offset;
+
+ switch (encoding) {
+ case 'hex':
+ return this.parent.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.parent.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.parent.asciiSlice(start, end);
+
+ case 'binary':
+ return this.parent.binarySlice(start, end);
+
+ case 'base64':
+ return this.parent.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.parent.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// byteLength
+Buffer.byteLength = SlowBuffer.byteLength;
+
+
+// fill(value, start=0, end=buffer.length)
+Buffer.prototype.fill = function fill(value, start, end) {
+ value || (value = 0);
+ start || (start = 0);
+ end || (end = this.length);
+
+ if (typeof value === 'string') {
+ value = value.charCodeAt(0);
+ }
+ if (!(typeof value === 'number') || isNaN(value)) {
+ throw new Error('value is not a number');
+ }
+
+ if (end < start) throw new Error('end < start');
+
+ // Fill 0 bytes; we're done
+ if (end === start) return 0;
+ if (this.length == 0) return 0;
+
+ if (start < 0 || start >= this.length) {
+ throw new Error('start out of bounds');
+ }
+
+ if (end < 0 || end > this.length) {
+ throw new Error('end out of bounds');
+ }
+
+ return this.parent.fill(value,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function(target, target_start, start, end) {
+ var source = this;
+ start || (start = 0);
+ end || (end = this.length);
+ target_start || (target_start = 0);
+
+ if (end < start) throw new Error('sourceEnd < sourceStart');
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0;
+ if (target.length == 0 || source.length == 0) return 0;
+
+ if (target_start < 0 || target_start >= target.length) {
+ throw new Error('targetStart out of bounds');
+ }
+
+ if (start < 0 || start >= source.length) {
+ throw new Error('sourceStart out of bounds');
+ }
+
+ if (end < 0 || end > source.length) {
+ throw new Error('sourceEnd out of bounds');
+ }
+
+ // Are we oob?
+ if (end > this.length) {
+ end = this.length;
+ }
+
+ if (target.length - target_start < end - start) {
+ end = target.length - target_start + start;
+ }
+
+ return this.parent.copy(target.parent,
+ target_start + target.offset,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// slice(start, end)
+Buffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+ if (end > this.length) throw new Error('oob');
+ if (start > end) throw new Error('oob');
+
+ return new Buffer(this.parent, end - start, +start + this.offset);
+};
+
+
+// Legacy methods for backwards compatibility.
+
+Buffer.prototype.utf8Slice = function(start, end) {
+ return this.toString('utf8', start, end);
+};
+
+Buffer.prototype.binarySlice = function(start, end) {
+ return this.toString('binary', start, end);
+};
+
+Buffer.prototype.asciiSlice = function(start, end) {
+ return this.toString('ascii', start, end);
+};
+
+Buffer.prototype.utf8Write = function(string, offset) {
+ return this.write(string, offset, 'utf8');
+};
+
+Buffer.prototype.binaryWrite = function(string, offset) {
+ return this.write(string, offset, 'binary');
+};
+
+Buffer.prototype.asciiWrite = function(string, offset) {
+ return this.write(string, offset, 'ascii');
+};
+
+Buffer.prototype.readUInt8 = function(offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return;
+
+ return buffer.parent[buffer.offset + offset];
+};
+
+function readUInt16(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return 0;
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset] << 8;
+ if (offset + 1 < buffer.length) {
+ val |= buffer.parent[buffer.offset + offset + 1];
+ }
+ } else {
+ val = buffer.parent[buffer.offset + offset];
+ if (offset + 1 < buffer.length) {
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ }
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt16LE = function(offset, noAssert) {
+ return readUInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt16BE = function(offset, noAssert) {
+ return readUInt16(this, offset, true, noAssert);
+};
+
+function readUInt32(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return 0;
+
+ if (isBigEndian) {
+ if (offset + 1 < buffer.length)
+ val = buffer.parent[buffer.offset + offset + 1] << 16;
+ if (offset + 2 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 2] << 8;
+ if (offset + 3 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 3];
+ val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0);
+ } else {
+ if (offset + 2 < buffer.length)
+ val = buffer.parent[buffer.offset + offset + 2] << 16;
+ if (offset + 1 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ val |= buffer.parent[buffer.offset + offset];
+ if (offset + 3 < buffer.length)
+ val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0);
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt32LE = function(offset, noAssert) {
+ return readUInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt32BE = function(offset, noAssert) {
+ return readUInt32(this, offset, true, noAssert);
+};
+
+
+/*
+ * Signed integer types, yay team! A reminder on how two's complement actually
+ * works. The first bit is the signed bit, i.e. tells us whether or not the
+ * number should be positive or negative. If the two's complement value is
+ * positive, then we're done, as it's equivalent to the unsigned representation.
+ *
+ * Now if the number is positive, you're pretty much done, you can just leverage
+ * the unsigned translations and return those. Unfortunately, negative numbers
+ * aren't quite that straightforward.
+ *
+ * At first glance, one might be inclined to use the traditional formula to
+ * translate binary numbers between the positive and negative values in two's
+ * complement. (Though it doesn't quite work for the most negative value)
+ * Mainly:
+ * - invert all the bits
+ * - add one to the result
+ *
+ * Of course, this doesn't quite work in Javascript. Take for example the value
+ * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of
+ * course, Javascript will do the following:
+ *
+ * > ~0xff80
+ * -65409
+ *
+ * Whoh there, Javascript, that's not quite right. But wait, according to
+ * Javascript that's perfectly correct. When Javascript ends up seeing the
+ * constant 0xff80, it has no notion that it is actually a signed number. It
+ * assumes that we've input the unsigned value 0xff80. Thus, when it does the
+ * binary negation, it casts it into a signed value, (positive 0xff80). Then
+ * when you perform binary negation on that, it turns it into a negative number.
+ *
+ * Instead, we're going to have to use the following general formula, that works
+ * in a rather Javascript friendly way. I'm glad we don't support this kind of
+ * weird numbering scheme in the kernel.
+ *
+ * (BIT-MAX - (unsigned)val + 1) * -1
+ *
+ * The astute observer, may think that this doesn't make sense for 8-bit numbers
+ * (really it isn't necessary for them). However, when you get 16-bit numbers,
+ * you do. Let's go back to our prior example and see how this will look:
+ *
+ * (0xffff - 0xff80 + 1) * -1
+ * (0x007f + 1) * -1
+ * (0x0080) * -1
+ */
+Buffer.prototype.readInt8 = function(offset, noAssert) {
+ var buffer = this;
+ var neg;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return;
+
+ neg = buffer.parent[buffer.offset + offset] & 0x80;
+ if (!neg) {
+ return (buffer.parent[buffer.offset + offset]);
+ }
+
+ return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1);
+};
+
+function readInt16(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt16(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x8000;
+ if (!neg) {
+ return val;
+ }
+
+ return (0xffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt16LE = function(offset, noAssert) {
+ return readInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt16BE = function(offset, noAssert) {
+ return readInt16(this, offset, true, noAssert);
+};
+
+function readInt32(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt32(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x80000000;
+ if (!neg) {
+ return (val);
+ }
+
+ return (0xffffffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt32LE = function(offset, noAssert) {
+ return readInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt32BE = function(offset, noAssert) {
+ return readInt32(this, offset, true, noAssert);
+};
+
+function readFloat(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.readFloatLE = function(offset, noAssert) {
+ return readFloat(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readFloatBE = function(offset, noAssert) {
+ return readFloat(this, offset, true, noAssert);
+};
+
+function readDouble(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.readDoubleLE = function(offset, noAssert) {
+ return readDouble(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readDoubleBE = function(offset, noAssert) {
+ return readDouble(this, offset, true, noAssert);
+};
+
+
+/*
+ * We have to make sure that the value is a valid integer. This means that it is
+ * non-negative. It has no fractional component and that it does not exceed the
+ * maximum allowed value.
+ *
+ * value The number to check for validity
+ *
+ * max The maximum value
+ */
+function verifuint(value, max) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value >= 0,
+ 'specified a negative value for writing an unsigned value');
+
+ assert.ok(value <= max, 'value is larger than maximum value for type');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+Buffer.prototype.writeUInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xff);
+ }
+
+ if (offset < buffer.length) {
+ buffer.parent[buffer.offset + offset] = value;
+ }
+};
+
+function writeUInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffff);
+ }
+
+ for (var i = 0; i < Math.min(buffer.length - offset, 2); i++) {
+ buffer.parent[buffer.offset + offset + i] =
+ (value & (0xff << (8 * (isBigEndian ? 1 - i : i)))) >>>
+ (isBigEndian ? 1 - i : i) * 8;
+ }
+
+}
+
+Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, true, noAssert);
+};
+
+function writeUInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffffffff);
+ }
+
+ for (var i = 0; i < Math.min(buffer.length - offset, 4); i++) {
+ buffer.parent[buffer.offset + offset + i] =
+ (value >>> (isBigEndian ? 3 - i : i) * 8) & 0xff;
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, true, noAssert);
+};
+
+
+/*
+ * We now move onto our friends in the signed number category. Unlike unsigned
+ * numbers, we're going to have to worry a bit more about how we put values into
+ * arrays. Since we are only worrying about signed 32-bit values, we're in
+ * slightly better shape. Unfortunately, we really can't do our favorite binary
+ * & in this system. It really seems to do the wrong thing. For example:
+ *
+ * > -32 & 0xff
+ * 224
+ *
+ * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of
+ * this aren't treated as a signed number. Ultimately a bad thing.
+ *
+ * What we're going to want to do is basically create the unsigned equivalent of
+ * our representation and pass that off to the wuint* functions. To do that
+ * we're going to do the following:
+ *
+ * - if the value is positive
+ * we can pass it directly off to the equivalent wuint
+ * - if the value is negative
+ * we do the following computation:
+ * mb + val + 1, where
+ * mb is the maximum unsigned value in that byte size
+ * val is the Javascript negative integer
+ *
+ *
+ * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If
+ * you do out the computations:
+ *
+ * 0xffff - 128 + 1
+ * 0xffff - 127
+ * 0xff80
+ *
+ * You can then encode this value as the signed version. This is really rather
+ * hacky, but it should work and get the job done which is our goal here.
+ */
+
+/*
+ * A series of checks to make sure we actually have a signed 32-bit number
+ */
+function verifsint(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+function verifIEEE754(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+}
+
+Buffer.prototype.writeInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7f, -0x80);
+ }
+
+ if (value >= 0) {
+ buffer.writeUInt8(value, offset, noAssert);
+ } else {
+ buffer.writeUInt8(0xff + value + 1, offset, noAssert);
+ }
+};
+
+function writeInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fff, -0x8000);
+ }
+
+ if (value >= 0) {
+ writeUInt16(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt16LE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt16BE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, true, noAssert);
+};
+
+function writeInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fffffff, -0x80000000);
+ }
+
+ if (value >= 0) {
+ writeUInt32(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt32LE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt32BE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, true, noAssert);
+};
+
+function writeFloat(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.writeFloatLE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeFloatBE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, true, noAssert);
+};
+
+function writeDouble(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, true, noAssert);
+};
+
+SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8;
+SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE;
+SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE;
+SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE;
+SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE;
+SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8;
+SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE;
+SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE;
+SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE;
+SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE;
+SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE;
+SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE;
+SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE;
+SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE;
+SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8;
+SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE;
+SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE;
+SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE;
+SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE;
+SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8;
+SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE;
+SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE;
+SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE;
+SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE;
+SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE;
+SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE;
+SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE;
+SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE;
+
+})()
+},{"assert":2,"./buffer_ieee754":1,"base64-js":5}],3:[function(require,module,exports){
+var events = require('events');
+
+exports.isArray = isArray;
+exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'};
+exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'};
+
+
+exports.print = function () {};
+exports.puts = function () {};
+exports.debug = function() {};
+
+exports.inspect = function(obj, showHidden, depth, colors) {
+ var seen = [];
+
+ var stylize = function(str, styleType) {
+ // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+ var styles =
+ { 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39] };
+
+ var style =
+ { 'special': 'cyan',
+ 'number': 'blue',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red' }[styleType];
+
+ if (style) {
+ return '\033[' + styles[style][0] + 'm' + str +
+ '\033[' + styles[style][1] + 'm';
+ } else {
+ return str;
+ }
+ };
+ if (! colors) {
+ stylize = function(str, styleType) { return str; };
+ }
+
+ function format(value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value !== exports &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ return value.inspect(recurseTimes);
+ }
+
+ // Primitive types cannot have properties
+ switch (typeof value) {
+ case 'undefined':
+ return stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return stylize(simple, 'string');
+
+ case 'number':
+ return stylize('' + value, 'number');
+
+ case 'boolean':
+ return stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return stylize('null', 'null');
+ }
+
+ // Look up the keys of the object.
+ var visible_keys = Object_keys(value);
+ var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys;
+
+ // Functions without properties can be shortcutted.
+ if (typeof value === 'function' && keys.length === 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ var name = value.name ? ': ' + value.name : '';
+ return stylize('[Function' + name + ']', 'special');
+ }
+ }
+
+ // Dates without properties can be shortcutted
+ if (isDate(value) && keys.length === 0) {
+ return stylize(value.toUTCString(), 'date');
+ }
+
+ var base, type, braces;
+ // Determine the object type
+ if (isArray(value)) {
+ type = 'Array';
+ braces = ['[', ']'];
+ } else {
+ type = 'Object';
+ braces = ['{', '}'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var n = value.name ? ': ' + value.name : '';
+ base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
+ } else {
+ base = '';
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + value.toUTCString();
+ }
+
+ if (keys.length === 0) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ return stylize('[Object]', 'special');
+ }
+ }
+
+ seen.push(value);
+
+ var output = keys.map(function(key) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Getter/Setter]', 'special');
+ } else {
+ str = stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visible_keys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = format(value[key]);
+ } else {
+ str = format(value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (isArray(value)) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (type === 'Array' && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+ });
+
+ seen.pop();
+
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 50) {
+ output = braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+
+ } else {
+ output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+ }
+
+ return output;
+ }
+ return format(obj, (typeof depth === 'undefined' ? 2 : depth));
+};
+
+
+function isArray(ar) {
+ return ar instanceof Array ||
+ Array.isArray(ar) ||
+ (ar && ar !== Object.prototype && isArray(ar.__proto__));
+}
+
+
+function isRegExp(re) {
+ return re instanceof RegExp ||
+ (typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]');
+}
+
+
+function isDate(d) {
+ if (d instanceof Date) return true;
+ if (typeof d !== 'object') return false;
+ var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype);
+ var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__);
+ return JSON.stringify(proto) === JSON.stringify(properties);
+}
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+exports.log = function (msg) {};
+
+exports.pump = null;
+
+var Object_keys = Object.keys || function (obj) {
+ var res = [];
+ for (var key in obj) res.push(key);
+ return res;
+};
+
+var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) {
+ var res = [];
+ for (var key in obj) {
+ if (Object.hasOwnProperty.call(obj, key)) res.push(key);
+ }
+ return res;
+};
+
+var Object_create = Object.create || function (prototype, properties) {
+ // from es5-shim
+ var object;
+ if (prototype === null) {
+ object = { '__proto__' : null };
+ }
+ else {
+ if (typeof prototype !== 'object') {
+ throw new TypeError(
+ 'typeof prototype[' + (typeof prototype) + '] != \'object\''
+ );
+ }
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ object.__proto__ = prototype;
+ }
+ if (typeof properties !== 'undefined' && Object.defineProperties) {
+ Object.defineProperties(object, properties);
+ }
+ return object;
+};
+
+exports.inherits = function(ctor, superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object_create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+};
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (typeof f !== 'string') {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(exports.inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j': return JSON.stringify(args[i++]);
+ default:
+ return x;
+ }
+ });
+ for(var x = args[i]; i < len; x = args[++i]){
+ if (x === null || typeof x !== 'object') {
+ str += ' ' + x;
+ } else {
+ str += ' ' + exports.inspect(x);
+ }
+ }
+ return str;
+};
+
+},{"events":6}],5:[function(require,module,exports){
+(function (exports) {
+ 'use strict';
+
+ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+ function b64ToByteArray(b64) {
+ var i, j, l, tmp, placeHolders, arr;
+
+ if (b64.length % 4 > 0) {
+ throw 'Invalid string. Length must be a multiple of 4';
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ placeHolders = b64.indexOf('=');
+ placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0;
+
+ // base64 is 4/3 + up to two characters of the original data
+ arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders);
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? b64.length - 4 : b64.length;
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]);
+ arr.push((tmp & 0xFF0000) >> 16);
+ arr.push((tmp & 0xFF00) >> 8);
+ arr.push(tmp & 0xFF);
+ }
+
+ if (placeHolders === 2) {
+ tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4);
+ arr.push(tmp & 0xFF);
+ } else if (placeHolders === 1) {
+ tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2);
+ arr.push((tmp >> 8) & 0xFF);
+ arr.push(tmp & 0xFF);
+ }
+
+ return arr;
+ }
+
+ function uint8ToBase64(uint8) {
+ var i,
+ extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+ output = "",
+ temp, length;
+
+ function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
+ };
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+ temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
+ output += tripletToBase64(temp);
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ switch (extraBytes) {
+ case 1:
+ temp = uint8[uint8.length - 1];
+ output += lookup[temp >> 2];
+ output += lookup[(temp << 4) & 0x3F];
+ output += '==';
+ break;
+ case 2:
+ temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);
+ output += lookup[temp >> 10];
+ output += lookup[(temp >> 4) & 0x3F];
+ output += lookup[(temp << 2) & 0x3F];
+ output += '=';
+ break;
+ }
+
+ return output;
+ }
+
+ module.exports.toByteArray = b64ToByteArray;
+ module.exports.fromByteArray = uint8ToBase64;
+}());
+
+},{}],7:[function(require,module,exports){
+exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) {
+ var e, m,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ nBits = -7,
+ i = isBE ? 0 : (nBytes - 1),
+ d = isBE ? 1 : -1,
+ s = buffer[offset + i];
+
+ i += d;
+
+ e = s & ((1 << (-nBits)) - 1);
+ s >>= (-nBits);
+ nBits += eLen;
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ m = e & ((1 << (-nBits)) - 1);
+ e >>= (-nBits);
+ nBits += mLen;
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ if (e === 0) {
+ e = 1 - eBias;
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity);
+ } else {
+ m = m + Math.pow(2, mLen);
+ e = e - eBias;
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+};
+
+exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) {
+ var e, m, c,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
+ i = isBE ? (nBytes - 1) : 0,
+ d = isBE ? -1 : 1,
+ s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+
+ value = Math.abs(value);
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0;
+ e = eMax;
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2);
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--;
+ c *= 2;
+ }
+ if (e + eBias >= 1) {
+ value += rt / c;
+ } else {
+ value += rt * Math.pow(2, 1 - eBias);
+ }
+ if (value * c >= 2) {
+ e++;
+ c /= 2;
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0;
+ e = eMax;
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen);
+ e = e + eBias;
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+ e = 0;
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
+
+ e = (e << mLen) | m;
+ eLen += mLen;
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
+
+ buffer[offset + i - d] |= s * 128;
+};
+
+},{}],8:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+
+process.nextTick = (function () {
+ var canSetImmediate = typeof window !== 'undefined'
+ && window.setImmediate;
+ var canPost = typeof window !== 'undefined'
+ && window.postMessage && window.addEventListener
+ ;
+
+ if (canSetImmediate) {
+ return function (f) { return window.setImmediate(f) };
+ }
+
+ if (canPost) {
+ var queue = [];
+ window.addEventListener('message', function (ev) {
+ if (ev.source === window && ev.data === 'process-tick') {
+ ev.stopPropagation();
+ if (queue.length > 0) {
+ var fn = queue.shift();
+ fn();
+ }
+ }
+ }, true);
+
+ return function nextTick(fn) {
+ queue.push(fn);
+ window.postMessage('process-tick', '*');
+ };
+ }
+
+ return function nextTick(fn) {
+ setTimeout(fn, 0);
+ };
+})();
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+}
+
+// TODO(shtylman)
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+
+},{}],6:[function(require,module,exports){
+(function(process){if (!process.EventEmitter) process.EventEmitter = function () {};
+
+var EventEmitter = exports.EventEmitter = process.EventEmitter;
+var isArray = typeof Array.isArray === 'function'
+ ? Array.isArray
+ : function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]'
+ }
+;
+function indexOf (xs, x) {
+ if (xs.indexOf) return xs.indexOf(x);
+ for (var i = 0; i < xs.length; i++) {
+ if (x === xs[i]) return i;
+ }
+ return -1;
+}
+
+// By default EventEmitters will print a warning if more than
+// 10 listeners are added to it. This is a useful default which
+// helps finding memory leaks.
+//
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+var defaultMaxListeners = 10;
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!this._events) this._events = {};
+ this._events.maxListeners = n;
+};
+
+
+EventEmitter.prototype.emit = function(type) {
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events || !this._events.error ||
+ (isArray(this._events.error) && !this._events.error.length))
+ {
+ if (arguments[1] instanceof Error) {
+ throw arguments[1]; // Unhandled 'error' event
+ } else {
+ throw new Error("Uncaught, unspecified 'error' event.");
+ }
+ return false;
+ }
+ }
+
+ if (!this._events) return false;
+ var handler = this._events[type];
+ if (!handler) return false;
+
+ if (typeof handler == 'function') {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ var args = Array.prototype.slice.call(arguments, 1);
+ handler.apply(this, args);
+ }
+ return true;
+
+ } else if (isArray(handler)) {
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ var listeners = handler.slice();
+ for (var i = 0, l = listeners.length; i < l; i++) {
+ listeners[i].apply(this, args);
+ }
+ return true;
+
+ } else {
+ return false;
+ }
+};
+
+// EventEmitter is defined in src/node_events.cc
+// EventEmitter.prototype.emit() is also defined there.
+EventEmitter.prototype.addListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('addListener only takes instances of Function');
+ }
+
+ if (!this._events) this._events = {};
+
+ // To avoid recursion in the case that type == "newListeners"! Before
+ // adding it to the listeners, first emit "newListeners".
+ this.emit('newListener', type, listener);
+
+ if (!this._events[type]) {
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ } else if (isArray(this._events[type])) {
+
+ // Check for listener leak
+ if (!this._events[type].warned) {
+ var m;
+ if (this._events.maxListeners !== undefined) {
+ m = this._events.maxListeners;
+ } else {
+ m = defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ console.trace();
+ }
+ }
+
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ } else {
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ var self = this;
+ self.on(type, function g() {
+ self.removeListener(type, g);
+ listener.apply(this, arguments);
+ });
+
+ return this;
+};
+
+EventEmitter.prototype.removeListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('removeListener only takes instances of Function');
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (!this._events || !this._events[type]) return this;
+
+ var list = this._events[type];
+
+ if (isArray(list)) {
+ var i = indexOf(list, listener);
+ if (i < 0) return this;
+ list.splice(i, 1);
+ if (list.length == 0)
+ delete this._events[type];
+ } else if (this._events[type] === listener) {
+ delete this._events[type];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ if (arguments.length === 0) {
+ this._events = {};
+ return this;
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (type && this._events && this._events[type]) this._events[type] = null;
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ if (!this._events) this._events = {};
+ if (!this._events[type]) this._events[type] = [];
+ if (!isArray(this._events[type])) {
+ this._events[type] = [this._events[type]];
+ }
+ return this._events[type];
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":8}],4:[function(require,module,exports){
+(function(){function SlowBuffer (size) {
+ this.length = size;
+};
+
+var assert = require('assert');
+
+exports.INSPECT_MAX_BYTES = 50;
+
+
+function toHex(n) {
+ if (n < 16) return '0' + n.toString(16);
+ return n.toString(16);
+}
+
+function utf8ToBytes(str) {
+ var byteArray = [];
+ for (var i = 0; i < str.length; i++)
+ if (str.charCodeAt(i) <= 0x7F)
+ byteArray.push(str.charCodeAt(i));
+ else {
+ var h = encodeURIComponent(str.charAt(i)).substr(1).split('%');
+ for (var j = 0; j < h.length; j++)
+ byteArray.push(parseInt(h[j], 16));
+ }
+
+ return byteArray;
+}
+
+function asciiToBytes(str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; i++ )
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push( str.charCodeAt(i) & 0xFF );
+
+ return byteArray;
+}
+
+function base64ToBytes(str) {
+ return require("base64-js").toByteArray(str);
+}
+
+SlowBuffer.byteLength = function (str, encoding) {
+ switch (encoding || "utf8") {
+ case 'hex':
+ return str.length / 2;
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8ToBytes(str).length;
+
+ case 'ascii':
+ return str.length;
+
+ case 'base64':
+ return base64ToBytes(str).length;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+function blitBuffer(src, dst, offset, length) {
+ var pos, i = 0;
+ while (i < length) {
+ if ((i+offset >= dst.length) || (i >= src.length))
+ break;
+
+ dst[i + offset] = src[i];
+ i++;
+ }
+ return i;
+}
+
+SlowBuffer.prototype.utf8Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.asciiWrite = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Slice = function (start, end) {
+ var bytes = Array.prototype.slice.apply(this, arguments)
+ return require("base64-js").fromByteArray(bytes);
+}
+
+function decodeUtf8Char(str) {
+ try {
+ return decodeURIComponent(str);
+ } catch (err) {
+ return String.fromCharCode(0xFFFD); // UTF 8 invalid char
+ }
+}
+
+SlowBuffer.prototype.utf8Slice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var res = "";
+ var tmp = "";
+ var i = 0;
+ while (i < bytes.length) {
+ if (bytes[i] <= 0x7F) {
+ res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]);
+ tmp = "";
+ } else
+ tmp += "%" + bytes[i].toString(16);
+
+ i++;
+ }
+
+ return res + decodeUtf8Char(tmp);
+}
+
+SlowBuffer.prototype.asciiSlice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var ret = "";
+ for (var i = 0; i < bytes.length; i++)
+ ret += String.fromCharCode(bytes[i]);
+ return ret;
+}
+
+SlowBuffer.prototype.inspect = function() {
+ var out = [],
+ len = this.length;
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this[i]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+ return '<SlowBuffer ' + out.join(' ') + '>';
+};
+
+
+SlowBuffer.prototype.hexSlice = function(start, end) {
+ var len = this.length;
+
+ if (!start || start < 0) start = 0;
+ if (!end || end < 0 || end > len) end = len;
+
+ var out = '';
+ for (var i = start; i < end; i++) {
+ out += toHex(this[i]);
+ }
+ return out;
+};
+
+
+SlowBuffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+ start = +start || 0;
+ if (typeof end == 'undefined') end = this.length;
+
+ // Fastpath empty strings
+ if (+end == start) {
+ return '';
+ }
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.asciiSlice(start, end);
+
+ case 'binary':
+ return this.binarySlice(start, end);
+
+ case 'base64':
+ return this.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+SlowBuffer.prototype.hexWrite = function(string, offset, length) {
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length;
+ if (strLen % 2) {
+ throw new Error('Invalid hex string');
+ }
+ if (length > strLen / 2) {
+ length = strLen / 2;
+ }
+ for (var i = 0; i < length; i++) {
+ var byte = parseInt(string.substr(i * 2, 2), 16);
+ if (isNaN(byte)) throw new Error('Invalid hex string');
+ this[offset + i] = byte;
+ }
+ SlowBuffer._charsWritten = i * 2;
+ return i;
+};
+
+
+SlowBuffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexWrite(string, offset, length);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Write(string, offset, length);
+
+ case 'ascii':
+ return this.asciiWrite(string, offset, length);
+
+ case 'binary':
+ return this.binaryWrite(string, offset, length);
+
+ case 'base64':
+ return this.base64Write(string, offset, length);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Write(string, offset, length);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// slice(start, end)
+SlowBuffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ return new Buffer(this, end - start, +start);
+};
+
+SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) {
+ var temp = [];
+ for (var i=sourcestart; i<sourceend; i++) {
+ assert.ok(typeof this[i] !== 'undefined', "copying undefined buffer bytes!");
+ temp.push(this[i]);
+ }
+
+ for (var i=targetstart; i<targetstart+temp.length; i++) {
+ target[i] = temp[i-targetstart];
+ }
+};
+
+function coerce(length) {
+ // Coerce length to a number (possibly NaN), round up
+ // in case it's fractional (e.g. 123.456) then do a
+ // double negate to coerce a NaN to 0. Easy, right?
+ length = ~~Math.ceil(+length);
+ return length < 0 ? 0 : length;
+}
+
+
+// Buffer
+
+function Buffer(subject, encoding, offset) {
+ if (!(this instanceof Buffer)) {
+ return new Buffer(subject, encoding, offset);
+ }
+
+ var type;
+
+ // Are we slicing?
+ if (typeof offset === 'number') {
+ this.length = coerce(encoding);
+ this.parent = subject;
+ this.offset = offset;
+ } else {
+ // Find the length
+ switch (type = typeof subject) {
+ case 'number':
+ this.length = coerce(subject);
+ break;
+
+ case 'string':
+ this.length = Buffer.byteLength(subject, encoding);
+ break;
+
+ case 'object': // Assume object is an array
+ this.length = coerce(subject.length);
+ break;
+
+ default:
+ throw new Error('First argument needs to be a number, ' +
+ 'array or string.');
+ }
+
+ if (this.length > Buffer.poolSize) {
+ // Big buffer, just alloc one.
+ this.parent = new SlowBuffer(this.length);
+ this.offset = 0;
+
+ } else {
+ // Small buffer.
+ if (!pool || pool.length - pool.used < this.length) allocPool();
+ this.parent = pool;
+ this.offset = pool.used;
+ pool.used += this.length;
+ }
+
+ // Treat array-ish objects as a byte array.
+ if (isArrayIsh(subject)) {
+ for (var i = 0; i < this.length; i++) {
+ this.parent[i + this.offset] = subject[i];
+ }
+ } else if (type == 'string') {
+ // We are a string
+ this.length = this.write(subject, 0, encoding);
+ }
+ }
+
+}
+
+function isArrayIsh(subject) {
+ return Array.isArray(subject) || Buffer.isBuffer(subject) ||
+ subject && typeof subject === 'object' &&
+ typeof subject.length === 'number';
+}
+
+exports.SlowBuffer = SlowBuffer;
+exports.Buffer = Buffer;
+
+Buffer.poolSize = 8 * 1024;
+var pool;
+
+function allocPool() {
+ pool = new SlowBuffer(Buffer.poolSize);
+ pool.used = 0;
+}
+
+
+// Static methods
+Buffer.isBuffer = function isBuffer(b) {
+ return b instanceof Buffer || b instanceof SlowBuffer;
+};
+
+Buffer.concat = function (list, totalLength) {
+ if (!Array.isArray(list)) {
+ throw new Error("Usage: Buffer.concat(list, [totalLength])\n \
+ list should be an Array.");
+ }
+
+ if (list.length === 0) {
+ return new Buffer(0);
+ } else if (list.length === 1) {
+ return list[0];
+ }
+
+ if (typeof totalLength !== 'number') {
+ totalLength = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ totalLength += buf.length;
+ }
+ }
+
+ var buffer = new Buffer(totalLength);
+ var pos = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ buf.copy(buffer, pos);
+ pos += buf.length;
+ }
+ return buffer;
+};
+
+// Inspect
+Buffer.prototype.inspect = function inspect() {
+ var out = [],
+ len = this.length;
+
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this.parent[i + this.offset]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+
+ return '<Buffer ' + out.join(' ') + '>';
+};
+
+
+Buffer.prototype.get = function get(i) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i];
+};
+
+
+Buffer.prototype.set = function set(i, v) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i] = v;
+};
+
+
+// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8')
+Buffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ var ret;
+ switch (encoding) {
+ case 'hex':
+ ret = this.parent.hexWrite(string, this.offset + offset, length);
+ break;
+
+ case 'utf8':
+ case 'utf-8':
+ ret = this.parent.utf8Write(string, this.offset + offset, length);
+ break;
+
+ case 'ascii':
+ ret = this.parent.asciiWrite(string, this.offset + offset, length);
+ break;
+
+ case 'binary':
+ ret = this.parent.binaryWrite(string, this.offset + offset, length);
+ break;
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ ret = this.parent.base64Write(string, this.offset + offset, length);
+ break;
+
+ case 'ucs2':
+ case 'ucs-2':
+ ret = this.parent.ucs2Write(string, this.offset + offset, length);
+ break;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+
+ Buffer._charsWritten = SlowBuffer._charsWritten;
+
+ return ret;
+};
+
+
+// toString(encoding, start=0, end=buffer.length)
+Buffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ if (typeof start == 'undefined' || start < 0) {
+ start = 0;
+ } else if (start > this.length) {
+ start = this.length;
+ }
+
+ if (typeof end == 'undefined' || end > this.length) {
+ end = this.length;
+ } else if (end < 0) {
+ end = 0;
+ }
+
+ start = start + this.offset;
+ end = end + this.offset;
+
+ switch (encoding) {
+ case 'hex':
+ return this.parent.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.parent.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.parent.asciiSlice(start, end);
+
+ case 'binary':
+ return this.parent.binarySlice(start, end);
+
+ case 'base64':
+ return this.parent.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.parent.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// byteLength
+Buffer.byteLength = SlowBuffer.byteLength;
+
+
+// fill(value, start=0, end=buffer.length)
+Buffer.prototype.fill = function fill(value, start, end) {
+ value || (value = 0);
+ start || (start = 0);
+ end || (end = this.length);
+
+ if (typeof value === 'string') {
+ value = value.charCodeAt(0);
+ }
+ if (!(typeof value === 'number') || isNaN(value)) {
+ throw new Error('value is not a number');
+ }
+
+ if (end < start) throw new Error('end < start');
+
+ // Fill 0 bytes; we're done
+ if (end === start) return 0;
+ if (this.length == 0) return 0;
+
+ if (start < 0 || start >= this.length) {
+ throw new Error('start out of bounds');
+ }
+
+ if (end < 0 || end > this.length) {
+ throw new Error('end out of bounds');
+ }
+
+ return this.parent.fill(value,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function(target, target_start, start, end) {
+ var source = this;
+ start || (start = 0);
+ end || (end = this.length);
+ target_start || (target_start = 0);
+
+ if (end < start) throw new Error('sourceEnd < sourceStart');
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0;
+ if (target.length == 0 || source.length == 0) return 0;
+
+ if (target_start < 0 || target_start >= target.length) {
+ throw new Error('targetStart out of bounds');
+ }
+
+ if (start < 0 || start >= source.length) {
+ throw new Error('sourceStart out of bounds');
+ }
+
+ if (end < 0 || end > source.length) {
+ throw new Error('sourceEnd out of bounds');
+ }
+
+ // Are we oob?
+ if (end > this.length) {
+ end = this.length;
+ }
+
+ if (target.length - target_start < end - start) {
+ end = target.length - target_start + start;
+ }
+
+ return this.parent.copy(target.parent,
+ target_start + target.offset,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// slice(start, end)
+Buffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+ if (end > this.length) throw new Error('oob');
+ if (start > end) throw new Error('oob');
+
+ return new Buffer(this.parent, end - start, +start + this.offset);
+};
+
+
+// Legacy methods for backwards compatibility.
+
+Buffer.prototype.utf8Slice = function(start, end) {
+ return this.toString('utf8', start, end);
+};
+
+Buffer.prototype.binarySlice = function(start, end) {
+ return this.toString('binary', start, end);
+};
+
+Buffer.prototype.asciiSlice = function(start, end) {
+ return this.toString('ascii', start, end);
+};
+
+Buffer.prototype.utf8Write = function(string, offset) {
+ return this.write(string, offset, 'utf8');
+};
+
+Buffer.prototype.binaryWrite = function(string, offset) {
+ return this.write(string, offset, 'binary');
+};
+
+Buffer.prototype.asciiWrite = function(string, offset) {
+ return this.write(string, offset, 'ascii');
+};
+
+Buffer.prototype.readUInt8 = function(offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return buffer.parent[buffer.offset + offset];
+};
+
+function readUInt16(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset] << 8;
+ val |= buffer.parent[buffer.offset + offset + 1];
+ } else {
+ val = buffer.parent[buffer.offset + offset];
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt16LE = function(offset, noAssert) {
+ return readUInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt16BE = function(offset, noAssert) {
+ return readUInt16(this, offset, true, noAssert);
+};
+
+function readUInt32(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset + 1] << 16;
+ val |= buffer.parent[buffer.offset + offset + 2] << 8;
+ val |= buffer.parent[buffer.offset + offset + 3];
+ val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0);
+ } else {
+ val = buffer.parent[buffer.offset + offset + 2] << 16;
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ val |= buffer.parent[buffer.offset + offset];
+ val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0);
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt32LE = function(offset, noAssert) {
+ return readUInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt32BE = function(offset, noAssert) {
+ return readUInt32(this, offset, true, noAssert);
+};
+
+
+/*
+ * Signed integer types, yay team! A reminder on how two's complement actually
+ * works. The first bit is the signed bit, i.e. tells us whether or not the
+ * number should be positive or negative. If the two's complement value is
+ * positive, then we're done, as it's equivalent to the unsigned representation.
+ *
+ * Now if the number is positive, you're pretty much done, you can just leverage
+ * the unsigned translations and return those. Unfortunately, negative numbers
+ * aren't quite that straightforward.
+ *
+ * At first glance, one might be inclined to use the traditional formula to
+ * translate binary numbers between the positive and negative values in two's
+ * complement. (Though it doesn't quite work for the most negative value)
+ * Mainly:
+ * - invert all the bits
+ * - add one to the result
+ *
+ * Of course, this doesn't quite work in Javascript. Take for example the value
+ * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of
+ * course, Javascript will do the following:
+ *
+ * > ~0xff80
+ * -65409
+ *
+ * Whoh there, Javascript, that's not quite right. But wait, according to
+ * Javascript that's perfectly correct. When Javascript ends up seeing the
+ * constant 0xff80, it has no notion that it is actually a signed number. It
+ * assumes that we've input the unsigned value 0xff80. Thus, when it does the
+ * binary negation, it casts it into a signed value, (positive 0xff80). Then
+ * when you perform binary negation on that, it turns it into a negative number.
+ *
+ * Instead, we're going to have to use the following general formula, that works
+ * in a rather Javascript friendly way. I'm glad we don't support this kind of
+ * weird numbering scheme in the kernel.
+ *
+ * (BIT-MAX - (unsigned)val + 1) * -1
+ *
+ * The astute observer, may think that this doesn't make sense for 8-bit numbers
+ * (really it isn't necessary for them). However, when you get 16-bit numbers,
+ * you do. Let's go back to our prior example and see how this will look:
+ *
+ * (0xffff - 0xff80 + 1) * -1
+ * (0x007f + 1) * -1
+ * (0x0080) * -1
+ */
+Buffer.prototype.readInt8 = function(offset, noAssert) {
+ var buffer = this;
+ var neg;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ neg = buffer.parent[buffer.offset + offset] & 0x80;
+ if (!neg) {
+ return (buffer.parent[buffer.offset + offset]);
+ }
+
+ return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1);
+};
+
+function readInt16(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt16(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x8000;
+ if (!neg) {
+ return val;
+ }
+
+ return (0xffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt16LE = function(offset, noAssert) {
+ return readInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt16BE = function(offset, noAssert) {
+ return readInt16(this, offset, true, noAssert);
+};
+
+function readInt32(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt32(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x80000000;
+ if (!neg) {
+ return (val);
+ }
+
+ return (0xffffffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt32LE = function(offset, noAssert) {
+ return readInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt32BE = function(offset, noAssert) {
+ return readInt32(this, offset, true, noAssert);
+};
+
+function readFloat(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.readFloatLE = function(offset, noAssert) {
+ return readFloat(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readFloatBE = function(offset, noAssert) {
+ return readFloat(this, offset, true, noAssert);
+};
+
+function readDouble(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.readDoubleLE = function(offset, noAssert) {
+ return readDouble(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readDoubleBE = function(offset, noAssert) {
+ return readDouble(this, offset, true, noAssert);
+};
+
+
+/*
+ * We have to make sure that the value is a valid integer. This means that it is
+ * non-negative. It has no fractional component and that it does not exceed the
+ * maximum allowed value.
+ *
+ * value The number to check for validity
+ *
+ * max The maximum value
+ */
+function verifuint(value, max) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value >= 0,
+ 'specified a negative value for writing an unsigned value');
+
+ assert.ok(value <= max, 'value is larger than maximum value for type');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+Buffer.prototype.writeUInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xff);
+ }
+
+ buffer.parent[buffer.offset + offset] = value;
+};
+
+function writeUInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffff);
+ }
+
+ if (isBigEndian) {
+ buffer.parent[buffer.offset + offset] = (value & 0xff00) >>> 8;
+ buffer.parent[buffer.offset + offset + 1] = value & 0x00ff;
+ } else {
+ buffer.parent[buffer.offset + offset + 1] = (value & 0xff00) >>> 8;
+ buffer.parent[buffer.offset + offset] = value & 0x00ff;
+ }
+}
+
+Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, true, noAssert);
+};
+
+function writeUInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffffffff);
+ }
+
+ if (isBigEndian) {
+ buffer.parent[buffer.offset + offset] = (value >>> 24) & 0xff;
+ buffer.parent[buffer.offset + offset + 1] = (value >>> 16) & 0xff;
+ buffer.parent[buffer.offset + offset + 2] = (value >>> 8) & 0xff;
+ buffer.parent[buffer.offset + offset + 3] = value & 0xff;
+ } else {
+ buffer.parent[buffer.offset + offset + 3] = (value >>> 24) & 0xff;
+ buffer.parent[buffer.offset + offset + 2] = (value >>> 16) & 0xff;
+ buffer.parent[buffer.offset + offset + 1] = (value >>> 8) & 0xff;
+ buffer.parent[buffer.offset + offset] = value & 0xff;
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, true, noAssert);
+};
+
+
+/*
+ * We now move onto our friends in the signed number category. Unlike unsigned
+ * numbers, we're going to have to worry a bit more about how we put values into
+ * arrays. Since we are only worrying about signed 32-bit values, we're in
+ * slightly better shape. Unfortunately, we really can't do our favorite binary
+ * & in this system. It really seems to do the wrong thing. For example:
+ *
+ * > -32 & 0xff
+ * 224
+ *
+ * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of
+ * this aren't treated as a signed number. Ultimately a bad thing.
+ *
+ * What we're going to want to do is basically create the unsigned equivalent of
+ * our representation and pass that off to the wuint* functions. To do that
+ * we're going to do the following:
+ *
+ * - if the value is positive
+ * we can pass it directly off to the equivalent wuint
+ * - if the value is negative
+ * we do the following computation:
+ * mb + val + 1, where
+ * mb is the maximum unsigned value in that byte size
+ * val is the Javascript negative integer
+ *
+ *
+ * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If
+ * you do out the computations:
+ *
+ * 0xffff - 128 + 1
+ * 0xffff - 127
+ * 0xff80
+ *
+ * You can then encode this value as the signed version. This is really rather
+ * hacky, but it should work and get the job done which is our goal here.
+ */
+
+/*
+ * A series of checks to make sure we actually have a signed 32-bit number
+ */
+function verifsint(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+function verifIEEE754(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+}
+
+Buffer.prototype.writeInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7f, -0x80);
+ }
+
+ if (value >= 0) {
+ buffer.writeUInt8(value, offset, noAssert);
+ } else {
+ buffer.writeUInt8(0xff + value + 1, offset, noAssert);
+ }
+};
+
+function writeInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fff, -0x8000);
+ }
+
+ if (value >= 0) {
+ writeUInt16(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt16LE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt16BE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, true, noAssert);
+};
+
+function writeInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fffffff, -0x80000000);
+ }
+
+ if (value >= 0) {
+ writeUInt32(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt32LE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt32BE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, true, noAssert);
+};
+
+function writeFloat(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.writeFloatLE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeFloatBE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, true, noAssert);
+};
+
+function writeDouble(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, true, noAssert);
+};
+
+SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8;
+SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE;
+SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE;
+SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE;
+SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE;
+SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8;
+SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE;
+SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE;
+SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE;
+SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE;
+SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE;
+SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE;
+SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE;
+SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE;
+SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8;
+SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE;
+SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE;
+SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE;
+SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE;
+SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8;
+SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE;
+SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE;
+SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE;
+SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE;
+SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE;
+SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE;
+SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE;
+SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE;
+
+})()
+},{"assert":2,"./buffer_ieee754":7,"base64-js":9}],9:[function(require,module,exports){
+(function (exports) {
+ 'use strict';
+
+ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+ function b64ToByteArray(b64) {
+ var i, j, l, tmp, placeHolders, arr;
+
+ if (b64.length % 4 > 0) {
+ throw 'Invalid string. Length must be a multiple of 4';
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ placeHolders = b64.indexOf('=');
+ placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0;
+
+ // base64 is 4/3 + up to two characters of the original data
+ arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders);
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? b64.length - 4 : b64.length;
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]);
+ arr.push((tmp & 0xFF0000) >> 16);
+ arr.push((tmp & 0xFF00) >> 8);
+ arr.push(tmp & 0xFF);
+ }
+
+ if (placeHolders === 2) {
+ tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4);
+ arr.push(tmp & 0xFF);
+ } else if (placeHolders === 1) {
+ tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2);
+ arr.push((tmp >> 8) & 0xFF);
+ arr.push(tmp & 0xFF);
+ }
+
+ return arr;
+ }
+
+ function uint8ToBase64(uint8) {
+ var i,
+ extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+ output = "",
+ temp, length;
+
+ function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
+ };
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+ temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
+ output += tripletToBase64(temp);
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ switch (extraBytes) {
+ case 1:
+ temp = uint8[uint8.length - 1];
+ output += lookup[temp >> 2];
+ output += lookup[(temp << 4) & 0x3F];
+ output += '==';
+ break;
+ case 2:
+ temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);
+ output += lookup[temp >> 10];
+ output += lookup[(temp >> 4) & 0x3F];
+ output += lookup[(temp << 2) & 0x3F];
+ output += '=';
+ break;
+ }
+
+ return output;
+ }
+
+ module.exports.toByteArray = b64ToByteArray;
+ module.exports.fromByteArray = uint8ToBase64;
+}());
+
+},{}]},{},[])
+;;module.exports=require("buffer-browserify")
+
+},{}],62:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var WordNetFile = require('./wordnet_file'),
+ fs = require('fs'),
+ util = require('util');
+
+function get(location, callback) {
+ var buff = new Buffer(4096);
+
+ this.open(function(err, fd, done) {
+ WordNetFile.appendLineChar(fd, location, 0, buff, function(line) {
+ done();
+ var data = line.split('| ');
+ var tokens = data[0].split(/\s+/);
+ var ptrs = [];
+ var wCnt = parseInt(tokens[3], 10);
+ var synonyms = [];
+
+ for(var i = 0; i < wCnt; i++) {
+ synonyms.push(tokens[4 + i * 2]);
+ }
+
+ var ptrOffset = (wCnt - 1) * 2 + 6;
+ for(var i = 0; i < parseInt(tokens[ptrOffset], 10); i++) {
+ ptrs.push({
+ pointerSymbol: tokens[ptrOffset + 1 + i * 4],
+ synsetOffset: parseInt(tokens[ptrOffset + 2 + i * 4], 10),
+ pos: tokens[ptrOffset + 3 + i * 4],
+ sourceTarget: tokens[ptrOffset + 4 + i * 4]
+ });
+ }
+
+ callback({
+ synsetOffset: parseInt(tokens[0], 10),
+ lexFilenum: parseInt(tokens[1], 10),
+ pos: tokens[2],
+ wCnt: wCnt,
+ lemma: tokens[4],
+ synonyms: synonyms,
+ lexId: tokens[5],
+ ptrs: ptrs,
+ gloss: data[1]
+ });
+ });
+ });
+}
+
+var DataFile = function(dataDir, name) {
+ WordNetFile.call(this, dataDir, 'data.' + name);
+};
+
+util.inherits(DataFile, WordNetFile);
+DataFile.prototype.get = get;
+
+module.exports = DataFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"util":40,"./wordnet_file":63,"__browserify_buffer":61}],64:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var WordNetFile = require('./wordnet_file'),
+ fs = require('fs'),
+ util = require('util');
+
+function getFileSize(path) {
+ var stat = fs.statSync(path);
+ return stat.size;
+}
+
+function findPrevEOL(fd, pos, callback) {
+ var buff = new Buffer(1024);
+ if(pos == 0)
+ callback(0);
+ else {
+ fs.read(fd, buff, 0, 1, pos, function(err, count) {
+ if(buff[0] == 10)
+ callback(pos + 1);
+ else
+ findPrevEOL(fd, pos - 1, callback);
+ });
+ }
+}
+
+function readLine(fd, pos, callback) {
+ var buff = new Buffer(1024);
+ findPrevEOL(fd, pos, function(pos) {
+ WordNetFile.appendLineChar(fd, pos, 0, buff, callback);
+ });
+}
+
+function miss(callback) {
+ callback({status: 'miss'});
+}
+
+function findAt(fd, size, pos, lastPos, adjustment, searchKey, callback, lastKey) {
+ if (lastPos == pos || pos >= size) {
+ miss(callback);
+ } else {
+ readLine(fd, pos, function(line) {
+ var tokens = line.split(/\s+/);
+ var key = tokens[0];
+
+ if(key == searchKey) {
+ callback({status: 'hit', key: key, 'line': line, tokens: tokens});
+ } else if(adjustment == 1 || key == lastKey) {
+ miss(callback);
+ } else {
+ adjustment = Math.ceil(adjustment * 0.5);
+
+ if (key < searchKey) {
+ findAt(fd, size, pos + adjustment, pos, adjustment, searchKey, callback, key);
+ } else {
+ findAt(fd, size, pos - adjustment, pos, adjustment, searchKey, callback, key);
+ }
+ }
+ });
+ }
+}
+
+function find(searchKey, callback) {
+ var indexFile = this;
+
+ indexFile.open(function(err, fd, done) {
+ if(err) {
+ console.log(err);
+ } else {
+ var size = getFileSize(indexFile.filePath) - 1;
+ var pos = Math.ceil(size / 2);
+ findAt(fd, size, pos, null, pos, searchKey,
+ function(result) { callback(result); done(); });
+ }
+ });
+}
+
+function lookupFromFile(word, callback) {
+ this.find(word, function(record) {
+ var indexRecord = null;
+
+ if(record.status == 'hit') {
+ var ptrs = [], offsets = [];
+
+ for(var i = 0; i < parseInt(record.tokens[3]); i++)
+ ptrs.push(record.tokens[i]);
+
+ for(var i = 0; i < parseInt(record.tokens[2]); i++)
+ offsets.push(parseInt(record.tokens[ptrs.length + 6 + i], 10));
+
+ indexRecord = {
+ lemma: record.tokens[0],
+ pos: record.tokens[1],
+ ptrSymbol: ptrs,
+ senseCnt: parseInt(record.tokens[ptrs.length + 4], 10),
+ tagsenseCnt: parseInt(record.tokens[ptrs.length + 5], 10),
+ synsetOffset: offsets
+ };
+ }
+
+ callback(indexRecord);
+ });
+}
+
+function lookup(word, callback) {
+ this.lookupFromFile(word, callback);
+}
+
+var IndexFile = function(dataDir, name) {
+ WordNetFile.call(this, dataDir, 'index.' + name);
+};
+
+util.inherits(IndexFile, WordNetFile);
+
+IndexFile.prototype.lookupFromFile = lookupFromFile;
+IndexFile.prototype.lookup = lookup;
+IndexFile.prototype.find = find;
+
+IndexFile.prototype._findAt = findAt;
+
+module.exports = IndexFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"util":40,"./wordnet_file":63,"__browserify_buffer":61}],56:[function(require,module,exports){
+/*
+Copyright (c) 2011, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'о', 'поÑле', 'вÑе', 'также', 'и', 'другие', 'вÑе', 'как', 'во', 'быть',
+ 'потому', 'был', 'до', 'ÑвлÑÑŽÑÑŒ', 'между', 'вÑе', 'но', 'от', 'иди', 'могу',
+ 'подойди', 'мог', 'делал', 'делаю', 'каждый', 'длÑ', 'откуда', 'иметь', 'имел',
+ 'он', 'имеет', 'её', 'здеÑÑŒ', 'его', 'как', 'еÑли', 'в', 'оно', 'за',
+ 'делать', 'много', 'Ñ', 'может быть', 'более', 'Ñамый', 'должен',
+ 'мой', 'никогда', 'ÑейчаÑ', 'из', 'на', 'только', 'или', 'другой', 'другаÑ',
+ 'другое', 'наше', 'вне', 'конец', 'Ñказал', 'Ñказала', 'также', 'видел', 'c',
+ 'немного', 'вÑе еще', 'так', 'затем', 'тот', 'их', 'там', 'Ñтот', 'они', 'те',
+ 'через', 'тоже', 'под', 'над', 'очень', 'был', 'путь', 'мы', 'хорошо',
+ 'что', 'где', 'который', 'пока', 'кто', 'Ñ ÐºÐµÐ¼', 'хотел бы', 'Ñ‚Ñ‹', 'твои',
+ 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н',
+ 'o', 'п', 'Ñ€', 'Ñ', 'Ñ‚', 'у', 'Ñ„', 'Ñ…', 'ц', 'ч', 'ш', 'щ', 'ÑŠ', 'Ñ‹', 'ÑŒ',
+ 'Ñ', 'ÑŽ', 'Ñ','$', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],57:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Stop Words by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ // Words
+ 'از', 'با', 'یه', 'برای', 'و', 'باید', 'شاید',
+
+ // Symbols
+ '؟', '!', '٪', '.', '،', '؛', ':', ';', ',',
+
+ // Numbers
+ 'Û±', 'Û²', 'Û³', 'Û´', 'Ûµ', 'Û¶', 'Û·', 'Û¸', 'Û¹', 'Û°'
+];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],59:[function(require,module,exports){
+/*
+Copyright (c) 2011, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'a','un','el','ella','y','sobre','de','la','que','en',
+ 'los','del','se','las','por','un','para','con','no',
+ 'una','su','al','lo','como','más','pero','sus','le',
+ 'ya','o','porque','cuando','muy','sin','sobre','también',
+ 'me','hasta','donde','quien','desde','nos','durante','uno',
+ 'ni','contra','ese','eso','mí','qué','otro','él','cual',
+ 'poco','mi','tú','te','ti','sí',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],58:[function(require,module,exports){
+/*
+Copyright (c) 2011, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'ad','al','allo','ai','agli','all','agl','alla','alle','con','col','coi','da','dal','dallo',
+ 'dai','dagli','dall','dagl','dalla','dalle','di','del','dello','dei','degli','dell','degl',
+ 'della','delle','in','nel','nello','nei','negli','nell','negl','nella','nelle','su','sul',
+ 'sullo','sui','sugli','sull','sugl','sulla','sulle','per','tra','contro','io','tu','lui',
+ 'lei','noi','voi','loro','mio','mia','miei','mie','tuo','tua','tuoi','tue','suo','sua','suoi',
+ 'sue','nostro','nostra','nostri','nostre','vostro','vostra','vostri','vostre','mi','ti','ci',
+ 'vi','lo','la','li','le','gli','ne','il','un','uno','una','ma','ed','se','perché','anche','come',
+ 'dov','dove','che','chi','cui','non','più','quale','quanto','quanti','quanta','quante','quello',
+ 'quelli','quella','quelle','questo','questi','questa','queste','si','tutto','tutti','a','c','e',
+ 'i','l','o','ho','hai','ha','abbiamo','avete','hanno','abbia','abbiate','abbiano','avrò','avrai',
+ 'avrà','avremo','avrete','avranno','avrei','avresti','avrebbe','avremmo','avreste','avrebbero',
+ 'avevo','avevi','aveva','avevamo','avevate','avevano','ebbi','avesti','ebbe','avemmo','aveste',
+ 'ebbero','avessi','avesse','avessimo','avessero','avendo','avuto','avuta','avuti','avute','sono',
+ 'sei','è','siamo','siete','sia','siate','siano','sarò','sarai','sarà','saremo','sarete','saranno',
+ 'sarei','saresti','sarebbe','saremmo','sareste','sarebbero','ero','eri','era','eravamo','eravate',
+ 'erano','fui','fosti','fu','fummo','foste','furono','fossi','fosse','fossimo','fossero','essendo',
+ 'faccio','fai','facciamo','fanno','faccia','facciate','facciano','farò','farai','farà','faremo',
+ 'farete','faranno','farei','faresti','farebbe','faremmo','fareste','farebbero','facevo','facevi',
+ 'faceva','facevamo','facevate','facevano','feci','facesti','fece','facemmo','faceste','fecero',
+ 'facessi','facesse','facessimo','facessero','facendo','sto','stai','sta','stiamo','stanno','stia',
+ 'stiate','stiano','starò','starai','starà','staremo','starete','staranno','starei','staresti',
+ 'starebbe','staremmo','stareste','starebbero','stavo','stavi','stava','stavamo','stavate','stavano',
+ 'stetti','stesti','stette','stemmo','steste','stettero','stessi','stesse','stessimo','stessero','stando',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],63:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var fs = require('fs'),
+ path = require('path'),
+ util = require('util');
+
+
+function appendLineChar(fd, pos, buffPos, buff, callback) {
+ if(buffPos >= buff.length) {
+ var newBuff = new Buffer(buff.length * 2);
+ buff.copy(newBuff, 0, 0, buff.length);
+ buff = newBuff;
+ }
+
+ fs.read(fd, buff, buffPos, 1, pos, function(err, count) {
+ if(err)
+ console.log(err);
+ else {
+ if(buff[buffPos] == 10 || buffPos == buff.length)
+ callback(buff.slice(0, buffPos).toString('ASCII'));
+ else {
+ appendLineChar(fd, pos + 1, buffPos + 1, buff, callback);
+ }
+ }
+ });
+}
+
+function open(callback) {
+ var filePath = this.filePath;
+
+ fs.open(filePath, 'r', null, function(err, fd) {
+ if (err) {
+ console.log('Unable to open %s', filePath);
+ return;
+ }
+ callback(err, fd, function() {fs.close(fd)});
+ });
+}
+
+var WordNetFile = function(dataDir, fileName) {
+ this.dataDir = dataDir;
+ this.fileName = fileName;
+ this.filePath = require('path').join(this.dataDir, this.fileName);
+};
+
+WordNetFile.prototype.open = open;
+WordNetFile.appendLineChar = appendLineChar;
+
+module.exports = WordNetFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"path":65,"util":40,"__browserify_buffer":61}],19:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require("util"),
+ _ = require('underscore')._;
+
+// Base Class for RegExp Matching
+var RegexpTokenizer = function(options) {
+ var options = options || {};
+ this._pattern = options.pattern || this._pattern;
+ this.discardEmpty = options.discardEmpty || true;
+
+ // Match and split on GAPS not the actual WORDS
+ this._gaps = options.gaps;
+
+ if (this._gaps === undefined) {
+ this._gaps = true;
+ }
+};
+
+util.inherits(RegexpTokenizer, Tokenizer);
+
+RegexpTokenizer.prototype.tokenize = function(s) {
+ var results;
+
+ if (this._gaps) {
+ results = s.split(this._pattern);
+ return (this.discardEmpty) ? _.without(results,'',' ') : results;
+ } else {
+ return s.match(this._pattern);
+ }
+};
+
+exports.RegexpTokenizer = RegexpTokenizer;
+
+/***
+ * A tokenizer that divides a text into sequences of alphabetic and
+ * non-alphabetic characters. E.g.:
+ *
+ * >>> WordTokenizer().tokenize("She said 'hello'.")
+ * ['She', 'said', 'hello']
+ *
+ */
+var WordTokenizer = function(options) {
+ this._pattern = /\W+/;
+ RegexpTokenizer.call(this,options)
+};
+
+util.inherits(WordTokenizer, RegexpTokenizer);
+exports.WordTokenizer = WordTokenizer;
+
+/***
+ * A tokenizer that divides a text into sequences of alphabetic and
+ * non-alphabetic characters. E.g.:
+ *
+ * >>> WordPunctTokenizer().tokenize("She said 'hello'.")
+ * ['She', 'said', "'", 'hello', "'."]
+ *
+ */
+var WordPunctTokenizer = function(options) {
+ this._pattern = new RegExp(/(\w+|\!|\'|\"")/i);
+ RegexpTokenizer.call(this,options)
+};
+
+util.inherits(WordPunctTokenizer, RegexpTokenizer);
+exports.WordPunctTokenizer = WordPunctTokenizer;
+
+},{"util":40,"./tokenizer":52,"underscore":66}],20:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require("util"),
+ _ = require('underscore')._;
+
+var contractions2 = [
+ /(.)('ll|'re|'ve|n't|'s|'m|'d)\b/ig,
+ /\b(can)(not)\b/ig,
+ /\b(D)('ye)\b/ig,
+ /\b(Gim)(me)\b/ig,
+ /\b(Gon)(na)\b/ig,
+ /\b(Got)(ta)\b/ig,
+ /\b(Lem)(me)\b/ig,
+ /\b(Mor)('n)\b/ig,
+ /\b(T)(is)\b/ig,
+ /\b(T)(was)\b/ig,
+ /\b(Wan)(na)\b/ig];
+
+var contractions3 = [
+ /\b(Whad)(dd)(ya)\b/ig,
+ /\b(Wha)(t)(cha)\b/ig
+];
+
+var TreebankWordTokenizer = function() {
+};
+
+util.inherits(TreebankWordTokenizer, Tokenizer);
+
+TreebankWordTokenizer.prototype.tokenize = function(text) {
+ contractions2.forEach(function(regexp) {
+ text = text.replace(regexp,"$1 $2");
+ });
+
+ contractions3.forEach(function(regexp) {
+ text = text.replace(regexp,"$1 $2 $3");
+ });
+
+ // most punctuation
+ text = text.replace(/([^\w\.\'\-\/\+\<\>,&])/g, " $1 ");
+
+ // commas if followed by space
+ text = text.replace(/(,\s)/g, " $1");
+
+ // single quotes if followed by a space
+ text = text.replace(/('\s)/g, " $1");
+
+ // periods before newline or end of string
+ text = text.replace(/\. *(\n|$)/g, " . ");
+
+ return _.without(text.split(/\s+/), '');
+};
+
+module.exports = TreebankWordTokenizer;
+
+},{"util":40,"./tokenizer":52,"underscore":66}],23:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util'),
+Classifier = require('./classifier'),
+ApparatusLogisticRegressionClassifier = require('apparatus').LogisticRegressionClassifier;
+
+var LogisticRegressionClassifier = function(stemmer) {
+ Classifier.call(this, new ApparatusLogisticRegressionClassifier(), stemmer);
+};
+
+util.inherits(LogisticRegressionClassifier, Classifier);
+
+function restore(classifier, stemmer) {
+ classifier = Classifier.restore(classifier, stemmer);
+ classifier.__proto__ = LogisticRegressionClassifier.prototype;
+ classifier.classifier = ApparatusLogisticRegressionClassifier.restore(classifier.classifier);
+
+ return classifier;
+}
+
+function load(filename, stemmer, callback) {
+ Classifier.load(filename, function(err, classifier) {
+ callback(err, restore(classifier, stemmer));
+ });
+}
+
+function train() {
+ // we need to reset the traning state because logistic regression
+ // needs its matricies to have their widths synced, etc.
+ this.lastAdded = 0;
+ this.classifier = new ApparatusLogisticRegressionClassifier();
+ Classifier.prototype.train.call(this);
+}
+
+LogisticRegressionClassifier.prototype.train = train;
+LogisticRegressionClassifier.restore = restore;
+LogisticRegressionClassifier.load = load;
+
+module.exports = LogisticRegressionClassifier;
+
+},{"util":40,"../stemmers/porter_stemmer":7,"./classifier":60,"apparatus":67}],22:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util'),
+Classifier = require('./classifier'),
+ApparatusBayesClassifier = require('apparatus').BayesClassifier;
+
+var BayesClassifier = function(stemmer) {
+ Classifier.call(this, new ApparatusBayesClassifier(), stemmer);
+};
+
+util.inherits(BayesClassifier, Classifier);
+
+function restore(classifier, stemmer) {
+ classifier = Classifier.restore(classifier, stemmer);
+ classifier.__proto__ = BayesClassifier.prototype;
+ classifier.classifier = ApparatusBayesClassifier.restore(classifier.classifier);
+
+ return classifier;
+}
+
+function load(filename, stemmer, callback) {
+ Classifier.load(filename, function(err, classifier) {
+ callback(err, restore(classifier, stemmer));
+ });
+}
+
+BayesClassifier.restore = restore;
+BayesClassifier.load = load;
+
+module.exports = BayesClassifier;
+
+},{"util":40,"../stemmers/porter_stemmer":7,"./classifier":60,"apparatus":67}],65:[function(require,module,exports){
+(function(process){function filter (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ if (fn(xs[i], i, xs)) res.push(xs[i]);
+ }
+ return res;
+}
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+ // if the path tries to go above the root, `up` ends up > 0
+ var up = 0;
+ for (var i = parts.length; i >= 0; i--) {
+ var last = parts[i];
+ if (last == '.') {
+ parts.splice(i, 1);
+ } else if (last === '..') {
+ parts.splice(i, 1);
+ up++;
+ } else if (up) {
+ parts.splice(i, 1);
+ up--;
+ }
+ }
+
+ // if the path is allowed to go above the root, restore leading ..s
+ if (allowAboveRoot) {
+ for (; up--; up) {
+ parts.unshift('..');
+ }
+ }
+
+ return parts;
+}
+
+// Regex to split a filename into [*, dir, basename, ext]
+// posix version
+var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
+
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+var resolvedPath = '',
+ resolvedAbsolute = false;
+
+for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
+ var path = (i >= 0)
+ ? arguments[i]
+ : process.cwd();
+
+ // Skip empty and invalid entries
+ if (typeof path !== 'string' || !path) {
+ continue;
+ }
+
+ resolvedPath = path + '/' + resolvedPath;
+ resolvedAbsolute = path.charAt(0) === '/';
+}
+
+// At this point the path should be resolved to a full absolute path, but
+// handle relative paths to be safe (might happen when process.cwd() fails)
+
+// Normalize the path
+resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+ return !!p;
+ }), !resolvedAbsolute).join('/');
+
+ return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
+
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+var isAbsolute = path.charAt(0) === '/',
+ trailingSlash = path.slice(-1) === '/';
+
+// Normalize the path
+path = normalizeArray(filter(path.split('/'), function(p) {
+ return !!p;
+ }), !isAbsolute).join('/');
+
+ if (!path && !isAbsolute) {
+ path = '.';
+ }
+ if (path && trailingSlash) {
+ path += '/';
+ }
+
+ return (isAbsolute ? '/' : '') + path;
+};
+
+
+// posix version
+exports.join = function() {
+ var paths = Array.prototype.slice.call(arguments, 0);
+ return exports.normalize(filter(paths, function(p, index) {
+ return p && typeof p === 'string';
+ }).join('/'));
+};
+
+
+exports.dirname = function(path) {
+ var dir = splitPathRe.exec(path)[1] || '';
+ var isWindows = false;
+ if (!dir) {
+ // No dirname
+ return '.';
+ } else if (dir.length === 1 ||
+ (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
+ // It is just a slash or a drive letter with a slash
+ return dir;
+ } else {
+ // It is a full dirname, strip trailing slash
+ return dir.substring(0, dir.length - 1);
+ }
+};
+
+
+exports.basename = function(path, ext) {
+ var f = splitPathRe.exec(path)[2] || '';
+ // TODO: make this comparison case-insensitive on windows?
+ if (ext && f.substr(-1 * ext.length) === ext) {
+ f = f.substr(0, f.length - ext.length);
+ }
+ return f;
+};
+
+
+exports.extname = function(path) {
+ return splitPathRe.exec(path)[3] || '';
+};
+
+exports.relative = function(from, to) {
+ from = exports.resolve(from).substr(1);
+ to = exports.resolve(to).substr(1);
+
+ function trim(arr) {
+ var start = 0;
+ for (; start < arr.length; start++) {
+ if (arr[start] !== '') break;
+ }
+
+ var end = arr.length - 1;
+ for (; end >= 0; end--) {
+ if (arr[end] !== '') break;
+ }
+
+ if (start > end) return [];
+ return arr.slice(start, end - start + 1);
+ }
+
+ var fromParts = trim(from.split('/'));
+ var toParts = trim(to.split('/'));
+
+ var length = Math.min(fromParts.length, toParts.length);
+ var samePartsLength = length;
+ for (var i = 0; i < length; i++) {
+ if (fromParts[i] !== toParts[i]) {
+ samePartsLength = i;
+ break;
+ }
+ }
+
+ var outputParts = [];
+ for (var i = samePartsLength; i < fromParts.length; i++) {
+ outputParts.push('..');
+ }
+
+ outputParts = outputParts.concat(toParts.slice(samePartsLength));
+
+ return outputParts.join('/');
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":43}],30:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._,
+ Tokenizer = require('../tokenizers/regexp_tokenizer').WordTokenizer,
+ tokenizer = new Tokenizer(),
+ stopwords = require('../util/stopwords').words,
+ fs = require('fs');
+
+function buildDocument(text, key) {
+ var stopOut;
+
+ if(typeof text === 'string') {
+ text = tokenizer.tokenize(text.toLowerCase());
+ stopOut = true;
+ } else if(!_.isArray(text)) {
+ return text;
+ stopOut = false;
+ }
+
+ return text.reduce(function(document, term) {
+ if(!stopOut || stopwords.indexOf(term) < 0)
+ document[term] = (document[term] ? document[term] + 1 : 1);
+
+ return document;
+ }, {__key: key});
+}
+
+function tf(term, document) {
+ return document[term] ? document[term]: 0;
+}
+
+function documentHasTerm(term, document) {
+ return document[term] && document[term] > 0;
+}
+
+function TfIdf(deserialized) {
+ if(deserialized)
+ this.documents = deserialized.documents;
+ else
+ this.documents = [];
+}
+
+module.exports = TfIdf;
+TfIdf.tf = tf;
+
+TfIdf.prototype.idf = function(term) {
+ var docsWithTerm = this.documents.reduce(function(count, document) {
+ return count + (documentHasTerm(term, document) ? 1 : 0);
+ }, 1);
+
+ return Math.log(this.documents.length + 1 / docsWithTerm /* inited to 1 so
+ no addition needed */);
+};
+
+TfIdf.prototype.addDocument = function(document, key) {
+ this.documents.push(buildDocument(document, key));
+};
+
+TfIdf.prototype.addFileSync = function(path, encoding, key) {
+ if(encoding)
+ encoding = 'UTF-8';
+
+ var document = fs.readFileSync(path, 'UTF-8');
+ this.documents.push(buildDocument(document, key));
+};
+
+TfIdf.prototype.tfidf = function(terms, d) {
+ var _this = this;
+
+ if(!_.isArray(terms))
+ terms = tokenizer.tokenize(terms.toString().toLowerCase());
+
+ return terms.reduce(function(value, term) {
+ return value + (tf(term, _this.documents[d]) * _this.idf(term));
+ }, 0.0);
+};
+
+TfIdf.prototype.listTerms = function(d) {
+ var terms = [];
+
+ for(var term in this.documents[d]) {
+ terms.push({term: term, tfidf: this.tfidf(term, d)})
+ }
+
+ return terms.sort(function(x, y) { return y.tfidf - x.tfidf });
+}
+
+TfIdf.prototype.tfidfs = function(terms, callback) {
+ var tfidfs = new Array(this.documents.length);
+
+ for(var i = 0; i < this.documents.length; i++) {
+ tfidfs[i] = this.tfidf(terms, i);
+
+ if(callback)
+ callback(i, tfidfs[i], this.documents[i].__key);
+ }
+
+ return tfidfs;
+};
+
+},{"fs":42,"../tokenizers/regexp_tokenizer":19,"../util/stopwords":32,"underscore":66}],31:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._;
+
+/*
+ Sentences Analizer Class
+ From http://www.writingcentre.uottawa.ca/hypergrammar/sntpurps.html
+
+ Take a POS input and analyse it for
+ - Type of Sentense
+ - Interrogative
+ - Tag Questions
+ -
+ - Declarative
+ - Exclamatory
+ - Imperative
+
+ - Parts of a Sentense
+ - Subject
+ - Predicate
+
+ - Show Preposition Phrases
+*/
+
+var Sentences = function(pos, callback) {
+ this.posObj = pos;
+ this.senType = null;
+ callback(this);
+}
+
+Sentences.prototype.part = function(callback) {
+ var subject = [],
+ predicat = [],
+ verbFound = false;
+
+ this.prepositionPhrases();
+
+ for (var i = 0; i < this.posObj.tags.length; i++) {
+ if (this.posObj.tags[i].pos == "VB") {
+ if (i === 0) {
+ verbFound = true;
+ } else {
+ // We need to Test for any EX before the VB
+ if (this.posObj.tags[i - 1].pos != "EX") {
+ verbFound = true;
+ } else {
+ predicat.push(this.posObj.tags[i].token);
+ }
+ }
+ }
+
+ // Add Pronoun Phrase (pp) Or Subject Phrase (sp)
+ if (!verbFound) {
+ if (this.posObj.tags[i].pp != true)
+ this.posObj.tags[i].spos = "SP";
+
+ subject.push(this.posObj.tags[i].token);
+ } else {
+ if (this.posObj.tags[i].pp != true)
+ this.posObj.tags[i].spos = "PP";
+
+ predicat.push(this.posObj.tags[i].token)
+ }
+ }
+
+ if (subject.length == 0) {
+ this.posObj.tags.push({token:"You",spos:"SP",pos:"PRP",added:true});
+ }
+
+ callback(this);
+}
+
+// Takes POS and removes IN to NN or NNS
+// Adds a PP for each prepositionPhrases
+Sentences.prototype.prepositionPhrases = function() {
+ var remove = false;
+
+ for (var i = 0; i < this.posObj.tags.length; i++) {
+ if (this.posObj.tags[i].pos.match("IN")) {
+ remove = true;
+ }
+
+ if (remove) {
+ this.posObj.tags[i].pp = true;
+ }
+
+ if (this.posObj.tags[i].pos.match("NN")) {
+ remove = false;
+ }
+ }
+}
+
+Sentences.prototype.subjectToString = function() {
+ return this.posObj.tags.map(function(t){ if (t.spos == "SP" || t.spos == "S" ) return t.token }).join(' ');
+}
+
+Sentences.prototype.predicateToString = function() {
+ return this.posObj.tags.map(function(t){ if (t.spos == "PP" || t.spos == "P" ) return t.token }).join(' ');
+}
+
+Sentences.prototype.implicitYou = function() {
+ for (var i = 0; i < this.posObj.tags.length;i++) {
+ if (this.posObj.tags[i].added) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+Sentences.prototype.toString = function() {
+ return this.posObj.tags.map(function(t){return t.token}).join(' ');
+}
+
+// This is quick and incomplete.
+Sentences.prototype.type = function(callback) {
+ var callback = callback || false;
+
+ // FIXME - punct seems useless
+ var lastElement = this.posObj.punct();
+ lastElement = (lastElement.length != 0) ? lastElement.pop() : this.posObj.tags.pop();
+
+ if (lastElement.pos !== ".") {
+ if (this.implicitYou()) {
+ this.senType = "COMMAND";
+ } else if (_(["WDT","WP","WP$","WRB"]).contains(this.posObj.tags[0].pos)) {
+ // Sentences that start with: who, what where when why and how, then they are questions
+ this.senType = "INTERROGATIVE";
+ } else if (_(["PRP"]).contains(lastElement.pos)) {
+ // Sentences that end in a Personal pronoun are most likely questions
+ // eg. We should run away, should we [?]
+ // eg. You want to see that again, do you [?]
+ this.senType = "INTERROGATIVE";
+ } else {
+ this.senType = "UNKNOWN";
+ }
+
+ } else {
+ switch(lastElement.token) {
+ case "?": this.senType = "INTERROGATIVE"; break;
+ case "!": this.senType = (this.implicitYou()) ? "COMMAND":"EXCLAMATORY"; break;
+ case ".": this.senType = (this.implicitYou()) ? "COMMAND":"DECLARATIVE"; break;
+ }
+ }
+
+ if (callback && _(callback).isFunction()) {
+ callback(this);
+ } else {
+ return this.senType;
+ }
+}
+
+module.exports = Sentences;
+
+},{"underscore":66}],33:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._,
+ Tokenizer = require('../tokenizers/regexp_tokenizer').WordTokenizer,
+ tokenizer = new Tokenizer();
+
+exports.ngrams = function(sequence, n) {
+ return ngrams(sequence, n);
+}
+
+exports.bigrams = function(sequence) {
+ return ngrams(sequence, 2);
+}
+
+exports.trigrams = function(sequence) {
+ return ngrams(sequence, 3);
+}
+
+var ngrams = function(sequence, n) {
+ var result = [];
+
+ if (!_(sequence).isArray()) {
+ sequence = tokenizer.tokenize(sequence);
+ }
+
+ var count = _.max([0, sequence.length - n + 1]);
+
+ for (var i = 0; i < count; i++) {
+ result.push(sequence.slice(i, i + n));
+ }
+
+ return result;
+}
+
+
+},{"../tokenizers/regexp_tokenizer":19,"underscore":66}],66:[function(require,module,exports){
+(function(){// Underscore.js 1.4.4
+// http://underscorejs.org
+// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` in the browser, or `global` on the server.
+ var root = this;
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Establish the object that gets returned to break out of a loop iteration.
+ var breaker = {};
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ concat = ArrayProto.concat,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var
+ nativeForEach = ArrayProto.forEach,
+ nativeMap = ArrayProto.map,
+ nativeReduce = ArrayProto.reduce,
+ nativeReduceRight = ArrayProto.reduceRight,
+ nativeFilter = ArrayProto.filter,
+ nativeEvery = ArrayProto.every,
+ nativeSome = ArrayProto.some,
+ nativeIndexOf = ArrayProto.indexOf,
+ nativeLastIndexOf = ArrayProto.lastIndexOf,
+ nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeBind = FuncProto.bind;
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for the old `require()` API. If we're in
+ // the browser, add `_` as a global object via a string identifier,
+ // for Closure Compiler "advanced" mode.
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.4.4';
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles objects with the built-in `forEach`, arrays, and raw objects.
+ // Delegates to **ECMAScript 5**'s native `forEach` if available.
+ var each = _.each = _.forEach = function(obj, iterator, context) {
+ if (obj == null) return;
+ if (nativeForEach && obj.forEach === nativeForEach) {
+ obj.forEach(iterator, context);
+ } else if (obj.length === +obj.length) {
+ for (var i = 0, l = obj.length; i < l; i++) {
+ if (iterator.call(context, obj[i], i, obj) === breaker) return;
+ }
+ } else {
+ for (var key in obj) {
+ if (_.has(obj, key)) {
+ if (iterator.call(context, obj[key], key, obj) === breaker) return;
+ }
+ }
+ }
+ };
+
+ // Return the results of applying the iterator to each element.
+ // Delegates to **ECMAScript 5**'s native `map` if available.
+ _.map = _.collect = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+ each(obj, function(value, index, list) {
+ results[results.length] = iterator.call(context, value, index, list);
+ });
+ return results;
+ };
+
+ var reduceError = 'Reduce of empty array with no initial value';
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+ _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduce && obj.reduce === nativeReduce) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+ }
+ each(obj, function(value, index, list) {
+ if (!initial) {
+ memo = value;
+ initial = true;
+ } else {
+ memo = iterator.call(context, memo, value, index, list);
+ }
+ });
+ if (!initial) throw new TypeError(reduceError);
+ return memo;
+ };
+
+ // The right-associative version of reduce, also known as `foldr`.
+ // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+ _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+ }
+ var length = obj.length;
+ if (length !== +length) {
+ var keys = _.keys(obj);
+ length = keys.length;
+ }
+ each(obj, function(value, index, list) {
+ index = keys ? keys[--length] : --length;
+ if (!initial) {
+ memo = obj[index];
+ initial = true;
+ } else {
+ memo = iterator.call(context, memo, obj[index], index, list);
+ }
+ });
+ if (!initial) throw new TypeError(reduceError);
+ return memo;
+ };
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, iterator, context) {
+ var result;
+ any(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) {
+ result = value;
+ return true;
+ }
+ });
+ return result;
+ };
+
+ // Return all the elements that pass a truth test.
+ // Delegates to **ECMAScript 5**'s native `filter` if available.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+ each(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) results[results.length] = value;
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, iterator, context) {
+ return _.filter(obj, function(value, index, list) {
+ return !iterator.call(context, value, index, list);
+ }, context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Delegates to **ECMAScript 5**'s native `every` if available.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, iterator, context) {
+ iterator || (iterator = _.identity);
+ var result = true;
+ if (obj == null) return result;
+ if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+ each(obj, function(value, index, list) {
+ if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Delegates to **ECMAScript 5**'s native `some` if available.
+ // Aliased as `any`.
+ var any = _.some = _.any = function(obj, iterator, context) {
+ iterator || (iterator = _.identity);
+ var result = false;
+ if (obj == null) return result;
+ if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+ each(obj, function(value, index, list) {
+ if (result || (result = iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if the array or object contains a given value (using `===`).
+ // Aliased as `include`.
+ _.contains = _.include = function(obj, target) {
+ if (obj == null) return false;
+ if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+ return any(obj, function(value) {
+ return value === target;
+ });
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = function(obj, method) {
+ var args = slice.call(arguments, 2);
+ var isFunc = _.isFunction(method);
+ return _.map(obj, function(value) {
+ return (isFunc ? method : value[method]).apply(value, args);
+ });
+ };
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, function(value){ return value[key]; });
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs, first) {
+ if (_.isEmpty(attrs)) return first ? null : [];
+ return _[first ? 'find' : 'filter'](obj, function(value) {
+ for (var key in attrs) {
+ if (attrs[key] !== value[key]) return false;
+ }
+ return true;
+ });
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.where(obj, attrs, true);
+ };
+
+ // Return the maximum element or (element-based computation).
+ // Can't optimize arrays of integers longer than 65,535 elements.
+ // See: https://bugs.webkit.org/show_bug.cgi?id=80797
+ _.max = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+ return Math.max.apply(Math, obj);
+ }
+ if (!iterator && _.isEmpty(obj)) return -Infinity;
+ var result = {computed : -Infinity, value: -Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed >= result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+ return Math.min.apply(Math, obj);
+ }
+ if (!iterator && _.isEmpty(obj)) return Infinity;
+ var result = {computed : Infinity, value: Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed < result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Shuffle an array.
+ _.shuffle = function(obj) {
+ var rand;
+ var index = 0;
+ var shuffled = [];
+ each(obj, function(value) {
+ rand = _.random(index++);
+ shuffled[index - 1] = shuffled[rand];
+ shuffled[rand] = value;
+ });
+ return shuffled;
+ };
+
+ // An internal function to generate lookup iterators.
+ var lookupIterator = function(value) {
+ return _.isFunction(value) ? value : function(obj){ return obj[value]; };
+ };
+
+ // Sort the object's values by a criterion produced by an iterator.
+ _.sortBy = function(obj, value, context) {
+ var iterator = lookupIterator(value);
+ return _.pluck(_.map(obj, function(value, index, list) {
+ return {
+ value : value,
+ index : index,
+ criteria : iterator.call(context, value, index, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index < right.index ? -1 : 1;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(obj, value, context, behavior) {
+ var result = {};
+ var iterator = lookupIterator(value || _.identity);
+ each(obj, function(value, index) {
+ var key = iterator.call(context, value, index, obj);
+ behavior(result, key, value);
+ });
+ return result;
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = function(obj, value, context) {
+ return group(obj, value, context, function(result, key, value) {
+ (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
+ });
+ };
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = function(obj, value, context) {
+ return group(obj, value, context, function(result, key) {
+ if (!_.has(result, key)) result[key] = 0;
+ result[key]++;
+ });
+ };
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iterator, context) {
+ iterator = iterator == null ? _.identity : lookupIterator(iterator);
+ var value = iterator.call(context, obj);
+ var low = 0, high = array.length;
+ while (low < high) {
+ var mid = (low + high) >>> 1;
+ iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
+ }
+ return low;
+ };
+
+ // Safely convert anything iterable into a real, live array.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (obj.length === +obj.length) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
+ };
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null) return void 0;
+ return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N. The **guard** check allows it to work with
+ // `_.map`.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array. The **guard** check allows it to work with `_.map`.
+ _.last = function(array, n, guard) {
+ if (array == null) return void 0;
+ if ((n != null) && !guard) {
+ return slice.call(array, Math.max(array.length - n, 0));
+ } else {
+ return array[array.length - 1];
+ }
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array. The **guard**
+ // check allows it to work with `_.map`.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, (n == null) || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, _.identity);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, output) {
+ each(input, function(value) {
+ if (_.isArray(value)) {
+ shallow ? push.apply(output, value) : flatten(value, shallow, output);
+ } else {
+ output.push(value);
+ }
+ });
+ return output;
+ };
+
+ // Return a completely flattened version of an array.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, []);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = function(array) {
+ return _.difference(array, slice.call(arguments, 1));
+ };
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iterator, context) {
+ if (_.isFunction(isSorted)) {
+ context = iterator;
+ iterator = isSorted;
+ isSorted = false;
+ }
+ var initial = iterator ? _.map(array, iterator, context) : array;
+ var results = [];
+ var seen = [];
+ each(initial, function(value, index) {
+ if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
+ seen.push(value);
+ results.push(array[index]);
+ }
+ });
+ return results;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = function() {
+ return _.uniq(concat.apply(ArrayProto, arguments));
+ };
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ var rest = slice.call(arguments, 1);
+ return _.filter(_.uniq(array), function(item) {
+ return _.every(rest, function(other) {
+ return _.indexOf(other, item) >= 0;
+ });
+ });
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = function(array) {
+ var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
+ return _.filter(array, function(value){ return !_.contains(rest, value); });
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = function() {
+ var args = slice.call(arguments);
+ var length = _.max(_.pluck(args, 'length'));
+ var results = new Array(length);
+ for (var i = 0; i < length; i++) {
+ results[i] = _.pluck(args, "" + i);
+ }
+ return results;
+ };
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values.
+ _.object = function(list, values) {
+ if (list == null) return {};
+ var result = {};
+ for (var i = 0, l = list.length; i < l; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+ // we need this function. Return the position of the first occurrence of an
+ // item in an array, or -1 if the item is not included in the array.
+ // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = function(array, item, isSorted) {
+ if (array == null) return -1;
+ var i = 0, l = array.length;
+ if (isSorted) {
+ if (typeof isSorted == 'number') {
+ i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
+ } else {
+ i = _.sortedIndex(array, item);
+ return array[i] === item ? i : -1;
+ }
+ }
+ if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
+ for (; i < l; i++) if (array[i] === item) return i;
+ return -1;
+ };
+
+ // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+ _.lastIndexOf = function(array, item, from) {
+ if (array == null) return -1;
+ var hasIndex = from != null;
+ if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
+ return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
+ }
+ var i = (hasIndex ? from : array.length);
+ while (i--) if (array[i] === item) return i;
+ return -1;
+ };
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (arguments.length <= 1) {
+ stop = start || 0;
+ start = 0;
+ }
+ step = arguments[2] || 1;
+
+ var len = Math.max(Math.ceil((stop - start) / step), 0);
+ var idx = 0;
+ var range = new Array(len);
+
+ while(idx < len) {
+ range[idx++] = start;
+ start += step;
+ }
+
+ return range;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = function(func, context) {
+ if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+ var args = slice.call(arguments, 2);
+ return function() {
+ return func.apply(context, args.concat(slice.call(arguments)));
+ };
+ };
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context.
+ _.partial = function(func) {
+ var args = slice.call(arguments, 1);
+ return function() {
+ return func.apply(this, args.concat(slice.call(arguments)));
+ };
+ };
+
+ // Bind all of an object's methods to that object. Useful for ensuring that
+ // all callbacks defined on an object belong to it.
+ _.bindAll = function(obj) {
+ var funcs = slice.call(arguments, 1);
+ if (funcs.length === 0) funcs = _.functions(obj);
+ each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+ return obj;
+ };
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memo = {};
+ hasher || (hasher = _.identity);
+ return function() {
+ var key = hasher.apply(this, arguments);
+ return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+ };
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = function(func, wait) {
+ var args = slice.call(arguments, 2);
+ return setTimeout(function(){ return func.apply(null, args); }, wait);
+ };
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = function(func) {
+ return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+ };
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time.
+ _.throttle = function(func, wait) {
+ var context, args, timeout, result;
+ var previous = 0;
+ var later = function() {
+ previous = new Date;
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments;
+ var later = function() {
+ timeout = null;
+ if (!immediate) result = func.apply(context, args);
+ };
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(context, args);
+ return result;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = function(func) {
+ var ran = false, memo;
+ return function() {
+ if (ran) return memo;
+ ran = true;
+ memo = func.apply(this, arguments);
+ func = null;
+ return memo;
+ };
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return function() {
+ var args = [func];
+ push.apply(args, arguments);
+ return wrapper.apply(this, args);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var funcs = arguments;
+ return function() {
+ var args = arguments;
+ for (var i = funcs.length - 1; i >= 0; i--) {
+ args = [funcs[i].apply(this, args)];
+ }
+ return args[0];
+ };
+ };
+
+ // Returns a function that will only be executed after being called N times.
+ _.after = function(times, func) {
+ if (times <= 0) return func();
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Object Functions
+ // ----------------
+
+ // Retrieve the names of an object's properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`
+ _.keys = nativeKeys || function(obj) {
+ if (obj !== Object(obj)) throw new TypeError('Invalid object');
+ var keys = [];
+ for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var values = [];
+ for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
+ return values;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ _.pairs = function(obj) {
+ var pairs = [];
+ for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ if (source) {
+ for (var prop in source) {
+ obj[prop] = source[prop];
+ }
+ }
+ });
+ return obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = function(obj) {
+ var copy = {};
+ var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+ each(keys, function(key) {
+ if (key in obj) copy[key] = obj[key];
+ });
+ return copy;
+ };
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = function(obj) {
+ var copy = {};
+ var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+ for (var key in obj) {
+ if (!_.contains(keys, key)) copy[key] = obj[key];
+ }
+ return copy;
+ };
+
+ // Fill in a given object with default properties.
+ _.defaults = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ if (source) {
+ for (var prop in source) {
+ if (obj[prop] == null) obj[prop] = source[prop];
+ }
+ }
+ });
+ return obj;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+ if (a === b) return a !== 0 || 1 / a == 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className != toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, dates, and booleans are compared by value.
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return a == String(b);
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+ // other numeric values.
+ return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a == +b;
+ // RegExps are compared by their source patterns and flags.
+ case '[object RegExp]':
+ return a.source == b.source &&
+ a.global == b.global &&
+ a.multiline == b.multiline &&
+ a.ignoreCase == b.ignoreCase;
+ }
+ if (typeof a != 'object' || typeof b != 'object') return false;
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] == a) return bStack[length] == b;
+ }
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+ var size = 0, result = true;
+ // Recursively compare objects and arrays.
+ if (className == '[object Array]') {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ size = a.length;
+ result = size == b.length;
+ if (result) {
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (size--) {
+ if (!(result = eq(a[size], b[size], aStack, bStack))) break;
+ }
+ }
+ } else {
+ // Objects with different constructors are not equivalent, but `Object`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
+ _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
+ return false;
+ }
+ // Deep compare objects.
+ for (var key in a) {
+ if (_.has(a, key)) {
+ // Count the expected number of properties.
+ size++;
+ // Deep compare each member.
+ if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
+ }
+ }
+ // Ensure that both objects contain the same number of properties.
+ if (result) {
+ for (key in b) {
+ if (_.has(b, key) && !(size--)) break;
+ }
+ result = !size;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return result;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b, [], []);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+ for (var key in obj) if (_.has(obj, key)) return false;
+ return true;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) == '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ return obj === Object(obj);
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
+ each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) == '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return !!(obj && _.has(obj, 'callee'));
+ };
+ }
+
+ // Optimize `isFunction` if appropriate.
+ if (typeof (/./) !== 'function') {
+ _.isFunction = function(obj) {
+ return typeof obj === 'function';
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && obj != +obj;
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, key) {
+ return hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iterators.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iterator, context) {
+ var accum = Array(n);
+ for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // List of HTML entities for escaping.
+ var entityMap = {
+ escape: {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '/': '&#x2F;'
+ }
+ };
+ entityMap.unescape = _.invert(entityMap.escape);
+
+ // Regexes containing the keys and values listed immediately above.
+ var entityRegexes = {
+ escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
+ unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
+ };
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ _.each(['escape', 'unescape'], function(method) {
+ _[method] = function(string) {
+ if (string == null) return '';
+ return ('' + string).replace(entityRegexes[method], function(match) {
+ return entityMap[method][match];
+ });
+ };
+ });
+
+ // If the value of the named property is a function then invoke it;
+ // otherwise, return it.
+ _.result = function(object, property) {
+ if (object == null) return null;
+ var value = object[property];
+ return _.isFunction(value) ? value.call(object) : value;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ each(_.functions(obj), function(name){
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return result.call(this, func.apply(_, args));
+ };
+ });
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate : /<%([\s\S]+?)%>/g,
+ interpolate : /<%=([\s\S]+?)%>/g,
+ escape : /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\t': 't',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ _.template = function(text, data, settings) {
+ var render;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = new RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset)
+ .replace(escaper, function(match) { return '\\' + escapes[match]; });
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ }
+ if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ }
+ if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+ index = offset + match.length;
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + "return __p;\n";
+
+ try {
+ render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ if (data) return render(data, _);
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled function source as a convenience for precompilation.
+ template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function, which will delegate to the wrapper.
+ _.chain = function(obj) {
+ return _(obj).chain();
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var result = function(obj) {
+ return this._chain ? _(obj).chain() : obj;
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
+ return result.call(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return result.call(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ _.extend(_.prototype, {
+
+ // Start chaining a wrapped Underscore object.
+ chain: function() {
+ this._chain = true;
+ return this;
+ },
+
+ // Extracts the result from a wrapped and chained object.
+ value: function() {
+ return this._wrapped;
+ }
+
+ });
+
+}).call(this);
+
+})()
+},{}],29:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var IndexFile = require('./index_file'),
+ DataFile = require('./data_file');
+
+function pushResults(data, results, offsets, callback) {
+ var wordnet = this;
+
+ if(offsets.length == 0) {
+ callback(results);
+ } else {
+ data.get(offsets.pop(), function(record) {
+ results.push(record);
+ wordnet.pushResults(data, results, offsets, callback);
+ });
+ }
+}
+
+function lookupFromFiles(files, results, word, callback) {
+ var wordnet = this;
+
+ if(files.length == 0)
+ callback(results);
+ else {
+ var file = files.pop();
+
+ file.index.lookup(word, function(record) {
+ if(record) {
+ wordnet.pushResults(file.data, results, record.synsetOffset, function() {
+ wordnet.lookupFromFiles(files, results, word, callback);
+ });
+ } else {
+ wordnet.lookupFromFiles(files, results, word, callback);
+ }
+ });
+ }
+}
+
+function lookup(word, callback) {
+ word = word.toLowerCase().replace(/\s+/g, '_');
+
+ this.lookupFromFiles([
+ {index: this.nounIndex, data: this.nounData},
+ {index: this.verbIndex, data: this.verbData},
+ {index: this.adjIndex, data: this.adjData},
+ {index: this.advIndex, data: this.advData},
+ ], [], word, callback);
+}
+
+function get(synsetOffset, pos, callback) {
+ var dataFile = this.getDataFile(pos);
+ var wordnet = this;
+
+ dataFile.get(synsetOffset, function(result) {
+ callback(result);
+ });
+}
+
+function getDataFile(pos) {
+ switch(pos) {
+ case 'n':
+ return this.nounData;
+ case 'v':
+ return this.verbData;
+ case 'a': case 's':
+ return this.adjData;
+ case 'r':
+ return this.advData;
+ }
+}
+
+function loadSynonyms(synonyms, results, ptrs, callback) {
+ var wordnet = this;
+
+ if(ptrs.length > 0) {
+ var ptr = ptrs.pop();
+
+ this.get(ptr.synsetOffset, ptr.pos, function(result) {
+ synonyms.push(result);
+ wordnet.loadSynonyms(synonyms, results, ptrs, callback);
+ });
+ } else {
+ wordnet.loadResultSynonyms(synonyms, results, callback);
+ }
+}
+
+function loadResultSynonyms(synonyms, results, callback) {
+ var wordnet = this;
+
+ if(results.length > 0) {
+ var result = results.pop();
+ wordnet.loadSynonyms(synonyms, results, result.ptrs, callback);
+ } else
+ callback(synonyms);
+}
+
+function lookupSynonyms(word, callback) {
+ var wordnet = this;
+
+ wordnet.lookup(word, function(results) {
+ wordnet.loadResultSynonyms([], results, callback);
+ });
+}
+
+function getSynonyms() {
+ var wordnet = this;
+ var callback = arguments[2] ? arguments[2] : arguments[1];
+ var pos = arguments[0].pos ? arguments[0].pos : arguments[1];
+ var synsetOffset = arguments[0].synsetOffset ? arguments[0].synsetOffset : arguments[0];
+
+ this.get(synsetOffset, pos, function(result) {
+ wordnet.loadSynonyms([], [], result.ptrs, callback);
+ });
+}
+
+function WordNet(dataDir) {
+
+ if (!dataDir) {
+ try {
+ var WNdb = require('WNdb');
+ } catch(e) {
+ console.error("Please 'npm install WNdb' before using WordNet module or specify a dict directory.");
+ throw e;
+ }
+ dataDir = WNdb.path;
+ }
+
+ this.nounIndex = new IndexFile(dataDir, 'noun');
+ this.verbIndex = new IndexFile(dataDir, 'verb');
+ this.adjIndex = new IndexFile(dataDir, 'adj');
+ this.advIndex = new IndexFile(dataDir, 'adv');
+
+ this.nounData = new DataFile(dataDir, 'noun');
+ this.verbData = new DataFile(dataDir, 'verb');
+ this.adjData = new DataFile(dataDir, 'adj');
+ this.advData = new DataFile(dataDir, 'adv');
+
+ this.get = get;
+ this.lookup = lookup;
+ this.lookupFromFiles = lookupFromFiles;
+ this.pushResults = pushResults;
+ this.loadResultSynonyms = loadResultSynonyms;
+ this.loadSynonyms = loadSynonyms;
+ this.lookupSynonyms = lookupSynonyms;
+ this.getSynonyms = getSynonyms;
+ this.getDataFile = getDataFile;
+}
+
+module.exports = WordNet;
+
+},{"./index_file":64,"./data_file":62,"WNdb":68}],68:[function(require,module,exports){
+(function(__dirname){
+exports.version = "3.0"; // this is the WordNet DB version
+exports.path = require('path').join(__dirname, "dict");
+exports.files = require('fs').readdirSync(exports.path);
+
+})("/node_modules/WNdb")
+},{"path":65,"fs":42}],67:[function(require,module,exports){
+
+exports.BayesClassifier = require('./classifier/bayes_classifier');
+exports.LogisticRegressionClassifier = require('./classifier/logistic_regression_classifier');
+exports.KMeans = require('./clusterer/kmeans');
+
+},{"./classifier/bayes_classifier":69,"./clusterer/kmeans":70,"./classifier/logistic_regression_classifier":71}],69:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+Classifier = require('./classifier');
+
+var BayesClassifier = function(smoothing) {
+ Classifier.call(this);
+ this.classFeatures = {};
+ this.classTotals = {};
+ this.totalExamples = 1; // start at one to smooth
+ this.smoothing = smoothing === undefined ? 1.0 : smoothing;
+};
+
+util.inherits(BayesClassifier, Classifier);
+
+function addExample(observation, label) {
+ if(!this.classFeatures[label]) {
+ this.classFeatures[label] = {};
+ this.classTotals[label] = 1; // give an extra for smoothing
+ }
+
+ if(observation instanceof Array){
+ var i = observation.length;
+ this.totalExamples++;
+ this.classTotals[label]++;
+
+ while(i--) {
+ if(observation[i]) {
+ if(this.classFeatures[label][i]) {
+ this.classFeatures[label][i]++;
+ } else {
+ // give an extra for smoothing
+ this.classFeatures[label][i] = 1 + this.smoothing;
+ }
+ }
+ }
+ } else {
+ // sparse observation
+ for(var key in observation){
+ value = observation[key];
+
+ if(this.classFeatures[label][value]) {
+ this.classFeatures[label][value]++;
+ } else {
+ // give an extra for smoothing
+ this.classFeatures[label][value] = 1 + this.smoothing;
+ }
+ }
+ }
+}
+
+function train() {
+
+}
+
+function probabilityOfClass(observation, label) {
+ var prob = 0;
+
+ if(observation instanceof Array){
+ var i = observation.length;
+
+ while(i--) {
+ if(observation[i]) {
+ var count = this.classFeatures[label][i] || this.smoothing;
+
+ // numbers are tiny, add logs rather than take product
+ prob += Math.log(count / this.classTotals[label]);
+ }
+ };
+ } else {
+ // sparse observation
+ for(var key in observation){
+ var count = this.classFeatures[label][observation[key]] || this.smoothing;
+
+ // numbers are tiny, add logs rather than take product
+ prob += Math.log(count / this.classTotals[label]);
+ }
+ }
+
+ // p(C) * unlogging the above calculation P(X|C)
+ prob = (this.classTotals[label] / this.totalExamples) * Math.exp(prob);
+
+ return prob;
+}
+
+function getClassifications(observation) {
+ var classifier = this;
+ var labels = [];
+
+ for(var className in this.classFeatures) {
+ labels.push({label: className,
+ value: classifier.probabilityOfClass(observation, className)});
+ }
+
+ return labels.sort(function(x, y) {return y.value > x.value});
+}
+
+function restore(classifier) {
+ classifier = Classifier.restore(classifier);
+ classifier.__proto__ = BayesClassifier.prototype;
+
+ return classifier;
+}
+
+BayesClassifier.prototype.addExample = addExample;
+BayesClassifier.prototype.train = train;
+BayesClassifier.prototype.getClassifications = getClassifications;
+BayesClassifier.prototype.probabilityOfClass = probabilityOfClass;
+
+BayesClassifier.restore = restore;
+
+module.exports = BayesClassifier;
+},{"util":40,"./classifier":72}],72:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+function Classifier() {
+}
+
+function restore(classifier) {
+ classifier = typeof classifier == 'string' ? JSON.parse(classifier) : classifier;
+
+ return classifier;
+}
+
+function addExample(observation, classification) {
+ throw 'Not implemented';
+}
+
+function classify(observation) {
+ return this.getClassifications(observation)[0].label;
+}
+
+function train() {
+ throw 'Not implemented';
+}
+
+Classifier.prototype.addExample = addExample;
+Classifier.prototype.train = train;
+Classifier.prototype.classify = classify;
+
+Classifier.restore = restore;
+
+module.exports = Classifier;
+
+},{}],71:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+ Classifier = require('./classifier');
+
+var sylvester = require('sylvester'),
+Matrix = sylvester.Matrix,
+Vector = sylvester.Vector;
+
+function sigmoid(z) {
+ return 1 / (1 + Math.exp(0 - z));
+}
+
+function hypothesis(theta, Observations) {
+ return Observations.x(theta).map(sigmoid);
+}
+
+function cost(theta, Examples, classifications) {
+ var hypothesisResult = hypothesis(theta, Examples);
+
+ var ones = Vector.One(Examples.rows());
+ var cost_1 = Vector.Zero(Examples.rows()).subtract(classifications).elementMultiply(hypothesisResult.log());
+ var cost_0 = ones.subtract(classifications).elementMultiply(ones.subtract(hypothesisResult).log());
+
+ return (1 / Examples.rows()) * cost_1.subtract(cost_0).sum();
+}
+
+function descendGradient(theta, Examples, classifications) {
+ var maxIt = 500;
+ var last;
+ var current;
+ var learningRate = 3;
+ var learningRateFound = false;
+
+ Examples = Matrix.One(Examples.rows(), 1).augment(Examples);
+ theta = theta.augment([0]);
+
+ while(!learningRateFound) {
+ var i = 0;
+ last = null;
+
+ while(true) {
+ var hypothesisResult = hypothesis(theta, Examples);
+ theta = theta.subtract(Examples.transpose().x(
+ hypothesisResult.subtract(classifications)).x(1 / Examples.rows()).x(learningRate));
+ current = cost(theta, Examples, classifications);
+
+ i++;
+
+ if(last) {
+ if(current < last)
+ learningRateFound = true;
+ else
+ break;
+
+ if(last - current < 0.0001)
+ break;
+ }
+
+ if(i >= maxIt)
+ throw 'unable to find minimum';
+
+ last = current;
+ }
+
+ learningRate /= 3;
+ }
+
+ return theta.chomp(1);
+}
+
+var LogisticRegressionClassifier = function() {
+ Classifier.call(this);
+ this.examples = {};
+ this.features = [];
+ this.featurePositions = {};
+ this.maxFeaturePosition = 0;
+ this.classifications = [];
+ this.exampleCount = 0;
+};
+
+util.inherits(LogisticRegressionClassifier, Classifier);
+
+function createClassifications() {
+ var classifications = [];
+
+ for(var i = 0; i < this.exampleCount; i++) {
+ var classification = [];
+
+ for(var _ in this.examples)
+ classification.push(0);
+
+ classifications.push(classification);
+ }
+
+ return classifications;
+}
+
+function computeThetas(Examples, Classifications) {
+ this.theta = [];
+
+ // each class will have it's own theta.
+ for(var i = 1; i <= this.classifications.length; i++) {
+ var theta = Examples.row(1).map(function() { return 0; });
+ this.theta.push(descendGradient(theta, Examples, Classifications.column(i)));
+ }
+}
+
+function train() {
+ var examples = [];
+ var classifications = this.createClassifications();
+ var d = 0, c = 0;
+
+ for(var classification in this.examples) {
+ for(var i = 0; i < this.examples[classification].length; i++) {
+ var doc = this.examples[classification][i];
+ var example = doc;
+
+ examples.push(example);
+ classifications[d][c] = 1;
+ d++;
+ }
+
+ c++;
+ }
+
+ this.computeThetas($M(examples), $M(classifications));
+}
+
+function addExample(data, classification) {
+ if(!this.examples[classification]) {
+ this.examples[classification] = [];
+ this.classifications.push(classification);
+ }
+
+ this.examples[classification].push(data);
+ this.exampleCount++;
+}
+
+function getClassifications(observation) {
+ observation = $V(observation);
+ var classifications = [];
+
+ for(var i = 0; i < this.theta.length; i++) {
+ classifications.push({label: this.classifications[i],
+ value: sigmoid(observation.dot(this.theta[i])) });
+ }
+
+ return classifications.sort(function(x, y) {return y.value > x.value});
+}
+
+function restore(classifier) {
+ classifier = Classifier.restore(classifier);
+ classifier.__proto__ = LogisticRegressionClassifier.prototype;
+
+ return classifier;
+}
+
+LogisticRegressionClassifier.prototype.addExample = addExample;
+LogisticRegressionClassifier.prototype.restore = restore;
+LogisticRegressionClassifier.prototype.train = train;
+LogisticRegressionClassifier.prototype.createClassifications = createClassifications;
+LogisticRegressionClassifier.prototype.computeThetas = computeThetas;
+LogisticRegressionClassifier.prototype.getClassifications = getClassifications;
+
+LogisticRegressionClassifier.restore = restore;
+
+module.exports = LogisticRegressionClassifier;
+
+},{"util":40,"./classifier":72,"sylvester":73}],70:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Sylvester = require('sylvester'),
+Matrix = Sylvester.Matrix,
+Vector = Sylvester.Vector;
+
+function KMeans(Observations) {
+ if(!Observations.elements)
+ Observations = $M(Observations);
+
+ this.Observations = Observations;
+}
+
+// create an initial centroid matrix with initial values between
+// 0 and the max of feature data X.
+function createCentroids(k) {
+ var Centroid = [];
+ var maxes = this.Observations.maxColumns();
+ //console.log(maxes);
+
+ for(var i = 1; i <= k; i++) {
+ var centroid = [];
+
+ for(var j = 1; j <= this.Observations.cols(); j++) {
+ centroid.push(Math.random() * maxes.e(j));
+ }
+
+ Centroid.push(centroid);
+ }
+
+ //console.log(centroid)
+
+ return $M(Centroid);
+}
+
+// get the euclidian distance between the feature data X and
+// a given centroid matrix C.
+function distanceFrom(Centroids) {
+ var distances = [];
+
+ for(var i = 1; i <= this.Observations.rows(); i++) {
+ var distance = [];
+
+ for(var j = 1; j <= Centroids.rows(); j++) {
+ distance.push(this.Observations.row(i).distanceFrom(Centroids.row(j)));
+ }
+
+ distances.push(distance);
+ }
+
+ return $M(distances);
+}
+
+// categorize the feature data X into k clusters. return a vector
+// containing the results.
+function cluster(k) {
+ var Centroids = this.createCentroids(k);
+ var LastDistances = Matrix.Zero(this.Observations.rows(), this.Observations.cols());
+ var Distances = this.distanceFrom(Centroids);
+ var Groups;
+
+ while(!(LastDistances.eql(Distances))) {
+ Groups = Distances.minColumnIndexes();
+ LastDistances = Distances;
+
+ var newCentroids = [];
+
+ for(var i = 1; i <= Centroids.rows(); i++) {
+ var centroid = [];
+
+ for(var j = 1; j <= Centroids.cols(); j++) {
+ var sum = 0;
+ var count = 0;
+
+ for(var l = 1; l <= this.Observations.rows(); l++) {
+ if(Groups.e(l) == i) {
+ count++;
+ sum += this.Observations.e(l, j);
+ }
+ }
+
+ centroid.push(sum / count);
+ }
+
+ newCentroids.push(centroid);
+ }
+
+ Centroids = $M(newCentroids);
+ Distances = this.distanceFrom(Centroids);
+ }
+
+ return Groups;
+}
+
+KMeans.prototype.createCentroids = createCentroids;
+KMeans.prototype.distanceFrom = distanceFrom;
+KMeans.prototype.cluster = cluster;
+
+module.exports = KMeans;
+
+},{"sylvester":73}],73:[function(require,module,exports){
+(function(global){// Copyright (c) 2011, Chris Umbel
+
+exports.Vector = require('./vector');
+global.$V = exports.Vector.create;
+exports.Matrix = require('./matrix');
+global.$M = exports.Matrix.create;
+exports.Line = require('./line');
+global.$L = exports.Line.create;
+exports.Plane = require('./plane');
+global.$P = exports.Plane.create;
+exports.Line.Segment = require('./line.segment');
+exports.Sylvester = require('./sylvester');
+
+})(window)
+},{"./vector":74,"./matrix":75,"./line":76,"./plane":77,"./line.segment":78,"./sylvester":79}],79:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// This file is required in order for any other classes to work. Some Vector methods work with the
+// other Sylvester classes and are useless unless they are included. Other classes such as Line and
+// Plane will not function at all without Vector being loaded first.
+
+Math.sign = function(x) {
+ return x < 0 ? -1: 1;
+}
+
+var Sylvester = {
+ precision: 1e-6,
+ approxPrecision: 1e-5
+};
+
+module.exports = Sylvester;
+
+},{}],74:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// This file is required in order for any other classes to work. Some Vector methods work with the
+// other Sylvester classes and are useless unless they are included. Other classes such as Line and
+// Plane will not function at all without Vector being loaded first.
+
+var Sylvester = require('./sylvester'),
+Matrix = require('./matrix');
+
+function Vector() {}
+Vector.prototype = {
+
+ norm: function() {
+ var n = this.elements.length;
+ var sum = 0;
+
+ while (n--) {
+ sum += Math.pow(this.elements[n], 2);
+ }
+
+ return Math.sqrt(sum);
+ },
+
+ // Returns element i of the vector
+ e: function(i) {
+ return (i < 1 || i > this.elements.length) ? null : this.elements[i - 1];
+ },
+
+ // Returns the number of rows/columns the vector has
+ dimensions: function() {
+ return {rows: 1, cols: this.elements.length};
+ },
+
+ // Returns the number of rows in the vector
+ rows: function() {
+ return 1;
+ },
+
+ // Returns the number of columns in the vector
+ cols: function() {
+ return this.elements.length;
+ },
+
+ // Returns the modulus ('length') of the vector
+ modulus: function() {
+ return Math.sqrt(this.dot(this));
+ },
+
+ // Returns true iff the vector is equal to the argument
+ eql: function(vector) {
+ var n = this.elements.length;
+ var V = vector.elements || vector;
+ if (n != V.length) { return false; }
+ while (n--) {
+ if (Math.abs(this.elements[n] - V[n]) > Sylvester.precision) { return false; }
+ }
+ return true;
+ },
+
+ // Returns a copy of the vector
+ dup: function() {
+ return Vector.create(this.elements);
+ },
+
+ // Maps the vector to another vector according to the given function
+ map: function(fn) {
+ var elements = [];
+ this.each(function(x, i) {
+ elements.push(fn(x, i));
+ });
+ return Vector.create(elements);
+ },
+
+ // Calls the iterator for each element of the vector in turn
+ each: function(fn) {
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ fn(this.elements[i], i + 1);
+ }
+ },
+
+ // Returns a new vector created by normalizing the receiver
+ toUnitVector: function() {
+ var r = this.modulus();
+ if (r === 0) { return this.dup(); }
+ return this.map(function(x) { return x / r; });
+ },
+
+ // Returns the angle between the vector and the argument (also a vector)
+ angleFrom: function(vector) {
+ var V = vector.elements || vector;
+ var n = this.elements.length, k = n, i;
+ if (n != V.length) { return null; }
+ var dot = 0, mod1 = 0, mod2 = 0;
+ // Work things out in parallel to save time
+ this.each(function(x, i) {
+ dot += x * V[i - 1];
+ mod1 += x * x;
+ mod2 += V[i - 1] * V[i - 1];
+ });
+ mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
+ if (mod1 * mod2 === 0) { return null; }
+ var theta = dot / (mod1 * mod2);
+ if (theta < -1) { theta = -1; }
+ if (theta > 1) { theta = 1; }
+ return Math.acos(theta);
+ },
+
+ // Returns true iff the vector is parallel to the argument
+ isParallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (angle <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is antiparallel to the argument
+ isAntiparallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (Math.abs(angle - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is perpendicular to the argument
+ isPerpendicularTo: function(vector) {
+ var dot = this.dot(vector);
+ return (dot === null) ? null : (Math.abs(dot) <= Sylvester.precision);
+ },
+
+ // Returns the result of adding the argument to the vector
+ add: function(value) {
+ var V = value.elements || value;
+
+ if (this.elements.length != V.length)
+ return this.map(function(v) { return v + value });
+ else
+ return this.map(function(x, i) { return x + V[i - 1]; });
+ },
+
+ // Returns the result of subtracting the argument from the vector
+ subtract: function(v) {
+ if (typeof(v) == 'number')
+ return this.map(function(k) { return k - v; });
+
+ var V = v.elements || v;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x - V[i - 1]; });
+ },
+
+ // Returns the result of multiplying the elements of the vector by the argument
+ multiply: function(k) {
+ return this.map(function(x) { return x * k; });
+ },
+
+ elementMultiply: function(v) {
+ return this.map(function(k, i) {
+ return v.e(i) * k;
+ });
+ },
+
+ sum: function() {
+ var sum = 0;
+ this.map(function(x) { sum += x;});
+ return sum;
+ },
+
+ chomp: function(n) {
+ var elements = [];
+
+ for (var i = n; i < this.elements.length; i++) {
+ elements.push(this.elements[i]);
+ }
+
+ return Vector.create(elements);
+ },
+
+ top: function(n) {
+ var elements = [];
+
+ for (var i = 0; i < n; i++) {
+ elements.push(this.elements[i]);
+ }
+
+ return Vector.create(elements);
+ },
+
+ augment: function(elements) {
+ var newElements = this.elements;
+
+ for (var i = 0; i < elements.length; i++) {
+ newElements.push(elements[i]);
+ }
+
+ return Vector.create(newElements);
+ },
+
+ x: function(k) { return this.multiply(k); },
+
+ log: function() {
+ return Vector.log(this);
+ },
+
+ elementDivide: function(vector) {
+ return this.map(function(v, i) {
+ return v / vector.e(i);
+ });
+ },
+
+ product: function() {
+ var p = 1;
+
+ this.map(function(v) {
+ p *= v;
+ });
+
+ return p;
+ },
+
+ // Returns the scalar product of the vector with the argument
+ // Both vectors must have equal dimensionality
+ dot: function(vector) {
+ var V = vector.elements || vector;
+ var i, product = 0, n = this.elements.length;
+ if (n != V.length) { return null; }
+ while (n--) { product += this.elements[n] * V[n]; }
+ return product;
+ },
+
+ // Returns the vector product of the vector with the argument
+ // Both vectors must have dimensionality 3
+ cross: function(vector) {
+ var B = vector.elements || vector;
+ if (this.elements.length != 3 || B.length != 3) { return null; }
+ var A = this.elements;
+ return Vector.create([
+ (A[1] * B[2]) - (A[2] * B[1]),
+ (A[2] * B[0]) - (A[0] * B[2]),
+ (A[0] * B[1]) - (A[1] * B[0])
+ ]);
+ },
+
+ // Returns the (absolute) largest element of the vector
+ max: function() {
+ var m = 0, i = this.elements.length;
+ while (i--) {
+ if (Math.abs(this.elements[i]) > Math.abs(m)) { m = this.elements[i]; }
+ }
+ return m;
+ },
+
+
+ maxIndex: function() {
+ var m = 0, i = this.elements.length;
+ var maxIndex = -1;
+
+ while (i--) {
+ if (Math.abs(this.elements[i]) > Math.abs(m)) {
+ m = this.elements[i];
+ maxIndex = i + 1;
+ }
+ }
+
+ return maxIndex;
+ },
+
+
+ // Returns the index of the first match found
+ indexOf: function(x) {
+ var index = null, n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ if (index === null && this.elements[i] == x) {
+ index = i + 1;
+ }
+ }
+ return index;
+ },
+
+ // Returns a diagonal matrix with the vector's elements as its diagonal elements
+ toDiagonalMatrix: function() {
+ return Matrix.Diagonal(this.elements);
+ },
+
+ // Returns the result of rounding the elements of the vector
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Transpose a Vector, return a 1xn Matrix
+ transpose: function() {
+ var rows = this.elements.length;
+ var elements = [];
+
+ for (var i = 0; i < rows; i++) {
+ elements.push([this.elements[i]]);
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns a copy of the vector with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(y) {
+ return (Math.abs(y - x) <= Sylvester.precision) ? x : y;
+ });
+ },
+
+ // Returns the vector's distance from the argument, when considered as a point in space
+ distanceFrom: function(obj) {
+ if (obj.anchor || (obj.start && obj.end)) { return obj.distanceFrom(this); }
+ var V = obj.elements || obj;
+ if (V.length != this.elements.length) { return null; }
+ var sum = 0, part;
+ this.each(function(x, i) {
+ part = x - V[i - 1];
+ sum += part * part;
+ });
+ return Math.sqrt(sum);
+ },
+
+ // Returns true if the vector is point on the given line
+ liesOn: function(line) {
+ return line.contains(this);
+ },
+
+ // Return true iff the vector is a point in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Rotates the vector about the given object. The object should be a
+ // point if the vector is 2D, and a line if it is 3D. Be careful with line directions!
+ rotate: function(t, obj) {
+ var V, R = null, x, y, z;
+ if (t.determinant) { R = t.elements; }
+ switch (this.elements.length) {
+ case 2:
+ V = obj.elements || obj;
+ if (V.length != 2) { return null; }
+ if (!R) { R = Matrix.Rotation(t).elements; }
+ x = this.elements[0] - V[0];
+ y = this.elements[1] - V[1];
+ return Vector.create([
+ V[0] + R[0][0] * x + R[0][1] * y,
+ V[1] + R[1][0] * x + R[1][1] * y
+ ]);
+ break;
+ case 3:
+ if (!obj.direction) { return null; }
+ var C = obj.pointClosestTo(this).elements;
+ if (!R) { R = Matrix.Rotation(t, obj.direction).elements; }
+ x = this.elements[0] - C[0];
+ y = this.elements[1] - C[1];
+ z = this.elements[2] - C[2];
+ return Vector.create([
+ C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ]);
+ break;
+ default:
+ return null;
+ }
+ },
+
+ // Returns the result of reflecting the point in the given point, line or plane
+ reflectionIn: function(obj) {
+ if (obj.anchor) {
+ // obj is a plane or line
+ var P = this.elements.slice();
+ var C = obj.pointClosestTo(P).elements;
+ return Vector.create([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);
+ } else {
+ // obj is a point
+ var Q = obj.elements || obj;
+ if (this.elements.length != Q.length) { return null; }
+ return this.map(function(x, i) { return Q[i - 1] + (Q[i - 1] - x); });
+ }
+ },
+
+ // Utility to make sure vectors are 3D. If they are 2D, a zero z-component is added
+ to3D: function() {
+ var V = this.dup();
+ switch (V.elements.length) {
+ case 3: break;
+ case 2: V.elements.push(0); break;
+ default: return null;
+ }
+ return V;
+ },
+
+ // Returns a string representation of the vector
+ inspect: function() {
+ return '[' + this.elements.join(', ') + ']';
+ },
+
+ // Set vector's elements from an array
+ setElements: function(els) {
+ this.elements = (els.elements || els).slice();
+ return this;
+ }
+};
+
+// Constructor function
+Vector.create = function(elements) {
+ var V = new Vector();
+ return V.setElements(elements);
+};
+
+// i, j, k unit vectors
+Vector.i = Vector.create([1, 0, 0]);
+Vector.j = Vector.create([0, 1, 0]);
+Vector.k = Vector.create([0, 0, 1]);
+
+// Random vector of size n
+Vector.Random = function(n) {
+ var elements = [];
+ while (n--) { elements.push(Math.random()); }
+ return Vector.create(elements);
+};
+
+Vector.Fill = function(n, v) {
+ var elements = [];
+ while (n--) { elements.push(v); }
+ return Vector.create(elements);
+};
+
+// Vector filled with zeros
+Vector.Zero = function(n) {
+ return Vector.Fill(n, 0);
+};
+
+Vector.One = function(n) {
+ return Vector.Fill(n, 1);
+};
+
+Vector.log = function(v) {
+ return v.map(function(x) {
+ return Math.log(x);
+ });
+};
+
+module.exports = Vector;
+
+},{"./sylvester":79,"./matrix":75}],76:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+var Vector = require('./vector');
+var Matrix = require('./matrix');
+var Plane = require('./plane');
+var Sylvester = require('./sylvester');
+
+// Line class - depends on Vector, and some methods require Matrix and Plane.
+
+function Line() {}
+Line.prototype = {
+
+ // Returns true if the argument occupies the same space as the line
+ eql: function(line) {
+ return (this.isParallelTo(line) && this.contains(line.anchor));
+ },
+
+ // Returns a copy of the line
+ dup: function() {
+ return Line.create(this.anchor, this.direction);
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Line.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.direction);
+ },
+
+ // Returns true if the line is parallel to the argument. Here, 'parallel to'
+ // means that the argument's direction is either parallel or antiparallel to
+ // the line's own direction. A line is parallel to a plane if the two do not
+ // have a unique intersection.
+ isParallelTo: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.isParallelTo(this); }
+ var theta = this.direction.angleFrom(obj.direction);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns the line's perpendicular distance from the argument,
+ // which can be a point, a line or a plane
+ distanceFrom: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.distanceFrom(this); }
+ if (obj.direction) {
+ // obj is a line
+ if (this.isParallelTo(obj)) { return this.distanceFrom(obj.anchor); }
+ var N = this.direction.cross(obj.direction).toUnitVector().elements;
+ var A = this.anchor.elements, B = obj.anchor.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var PA1 = P[0] - A[0], PA2 = P[1] - A[1], PA3 = (P[2] || 0) - A[2];
+ var modPA = Math.sqrt(PA1*PA1 + PA2*PA2 + PA3*PA3);
+ if (modPA === 0) return 0;
+ // Assumes direction vector is normalized
+ var cosTheta = (PA1 * D[0] + PA2 * D[1] + PA3 * D[2]) / modPA;
+ var sin2 = 1 - cosTheta*cosTheta;
+ return Math.abs(modPA * Math.sqrt(sin2 < 0 ? 0 : sin2));
+ }
+ },
+
+ // Returns true iff the argument is a point on the line, or if the argument
+ // is a line segment lying within the receiver
+ contains: function(obj) {
+ if (obj.start && obj.end) { return this.contains(obj.start) && this.contains(obj.end); }
+ var dist = this.distanceFrom(obj);
+ return (dist !== null && dist <= Sylvester.precision);
+ },
+
+ // Returns the distance from the anchor of the given point. Negative values are
+ // returned for points that are in the opposite direction to the line's direction from
+ // the line's anchor point.
+ positionOf: function(point) {
+ if (!this.contains(point)) { return null; }
+ var P = point.elements || point;
+ var A = this.anchor.elements, D = this.direction.elements;
+ return (P[0] - A[0]) * D[0] + (P[1] - A[1]) * D[1] + ((P[2] || 0) - A[2]) * D[2];
+ },
+
+ // Returns true iff the line lies in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Returns true iff the line has a unique point of intersection with the argument
+ intersects: function(obj) {
+ if (obj.normal) { return obj.intersects(this); }
+ return (!this.isParallelTo(obj) && this.distanceFrom(obj) <= Sylvester.precision);
+ },
+
+ // Returns the unique intersection point with the argument, if one exists
+ intersectionWith: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.intersectionWith(this); }
+ if (!this.intersects(obj)) { return null; }
+ var P = this.anchor.elements, X = this.direction.elements,
+ Q = obj.anchor.elements, Y = obj.direction.elements;
+ var X1 = X[0], X2 = X[1], X3 = X[2], Y1 = Y[0], Y2 = Y[1], Y3 = Y[2];
+ var PsubQ1 = P[0] - Q[0], PsubQ2 = P[1] - Q[1], PsubQ3 = P[2] - Q[2];
+ var XdotQsubP = - X1*PsubQ1 - X2*PsubQ2 - X3*PsubQ3;
+ var YdotPsubQ = Y1*PsubQ1 + Y2*PsubQ2 + Y3*PsubQ3;
+ var XdotX = X1*X1 + X2*X2 + X3*X3;
+ var YdotY = Y1*Y1 + Y2*Y2 + Y3*Y3;
+ var XdotY = X1*Y1 + X2*Y2 + X3*Y3;
+ var k = (XdotQsubP * YdotY / XdotX + XdotY * YdotPsubQ) / (YdotY - XdotY * XdotY);
+ return Vector.create([P[0] + k*X1, P[1] + k*X2, P[2] + k*X3]);
+ },
+
+ // Returns the point on the line that is closest to the given point or line/line segment
+ pointClosestTo: function(obj) {
+ if (obj.start && obj.end) {
+ // obj is a line segment
+ var P = obj.pointClosestTo(this);
+ return (P === null) ? null : this.pointClosestTo(P);
+ } else if (obj.direction) {
+ // obj is a line
+ if (this.intersects(obj)) { return this.intersectionWith(obj); }
+ if (this.isParallelTo(obj)) { return null; }
+ var D = this.direction.elements, E = obj.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], E1 = E[0], E2 = E[1], E3 = E[2];
+ // Create plane containing obj and the shared normal and intersect this with it
+ // Thank you: http://www.cgafaq.info/wiki/Line-line_distance
+ var x = (D3 * E1 - D1 * E3), y = (D1 * E2 - D2 * E1), z = (D2 * E3 - D3 * E2);
+ var N = [x * E3 - y * E2, y * E1 - z * E3, z * E2 - x * E1];
+ var P = Plane.create(obj.anchor, N);
+ return P.intersectionWith(this);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ if (this.contains(P)) { return Vector.create(P); }
+ var A = this.anchor.elements, D = this.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = D1 * (P[1]-A2) - D2 * (P[0]-A1), y = D2 * ((P[2] || 0) - A3) - D3 * (P[1]-A2),
+ z = D3 * (P[0]-A1) - D1 * ((P[2] || 0) - A3);
+ var V = Vector.create([D2 * x - D3 * z, D3 * y - D1 * x, D1 * z - D2 * y]);
+ var k = this.distanceFrom(P) / V.modulus();
+ return Vector.create([
+ P[0] + V.elements[0] * k,
+ P[1] + V.elements[1] * k,
+ (P[2] || 0) + V.elements[2] * k
+ ]);
+ }
+ },
+
+ // Returns a copy of the line rotated by t radians about the given line. Works by
+ // finding the argument's closest point to this line's anchor point (call this C) and
+ // rotating the anchor about C. Also rotates the line's direction about the argument's.
+ // Be careful with this - the rotation axis' direction affects the outcome!
+ rotate: function(t, line) {
+ // If we're working in 2D
+ if (typeof(line.direction) == 'undefined') { line = Line.create(line.to3D(), Vector.k); }
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Line.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * D[0] + R[0][1] * D[1] + R[0][2] * D[2],
+ R[1][0] * D[0] + R[1][1] * D[1] + R[1][2] * D[2],
+ R[2][0] * D[0] + R[2][1] * D[1] + R[2][2] * D[2]
+ ]);
+ },
+
+ // Returns a copy of the line with its direction vector reversed.
+ // Useful when using lines for rotations.
+ reverse: function() {
+ return Line.create(this.anchor, this.direction.x(-1));
+ },
+
+ // Returns the line's reflection in the given point or line
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, D = this.direction.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], D1 = D[0], D2 = D[1], D3 = D[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the line's direction vector to its anchor, then mirror that in the plane
+ var AD1 = A1 + D1, AD2 = A2 + D2, AD3 = A3 + D3;
+ var Q = obj.pointClosestTo([AD1, AD2, AD3]).elements;
+ var newD = [Q[0] + (Q[0] - AD1) - newA[0], Q[1] + (Q[1] - AD2) - newA[1], Q[2] + (Q[2] - AD3) - newA[2]];
+ return Line.create(newA, newD);
+ } else if (obj.direction) {
+ // obj is a line - reflection obtained by rotating PI radians about obj
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point - just reflect the line's anchor in it
+ var P = obj.elements || obj;
+ return Line.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.direction);
+ }
+ },
+
+ // Set the line's anchor point and direction.
+ setVectors: function(anchor, direction) {
+ // Need to do this so that line's properties are not
+ // references to the arguments passed in
+ anchor = Vector.create(anchor);
+ direction = Vector.create(direction);
+ if (anchor.elements.length == 2) {anchor.elements.push(0); }
+ if (direction.elements.length == 2) { direction.elements.push(0); }
+ if (anchor.elements.length > 3 || direction.elements.length > 3) { return null; }
+ var mod = direction.modulus();
+ if (mod === 0) { return null; }
+ this.anchor = anchor;
+ this.direction = Vector.create([
+ direction.elements[0] / mod,
+ direction.elements[1] / mod,
+ direction.elements[2] / mod
+ ]);
+ return this;
+ }
+};
+
+// Constructor function
+Line.create = function(anchor, direction) {
+ var L = new Line();
+ return L.setVectors(anchor, direction);
+};
+
+// Axes
+Line.X = Line.create(Vector.Zero(3), Vector.i);
+Line.Y = Line.create(Vector.Zero(3), Vector.j);
+Line.Z = Line.create(Vector.Zero(3), Vector.k);
+
+module.exports = Line;
+
+},{"./vector":74,"./matrix":75,"./plane":77,"./sylvester":79}],78:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Line.Segment class - depends on Line and its dependencies.
+
+var Line = require('./line');
+var Vector = require('./vector');
+
+Line.Segment = function() {};
+Line.Segment.prototype = {
+
+ // Returns true iff the line segment is equal to the argument
+ eql: function(segment) {
+ return (this.start.eql(segment.start) && this.end.eql(segment.end)) ||
+ (this.start.eql(segment.end) && this.end.eql(segment.start));
+ },
+
+ // Returns a copy of the line segment
+ dup: function() {
+ return Line.Segment.create(this.start, this.end);
+ },
+
+ // Returns the length of the line segment
+ length: function() {
+ var A = this.start.elements, B = this.end.elements;
+ var C1 = B[0] - A[0], C2 = B[1] - A[1], C3 = B[2] - A[2];
+ return Math.sqrt(C1*C1 + C2*C2 + C3*C3);
+ },
+
+ // Returns the line segment as a vector equal to its
+ // end point relative to its endpoint
+ toVector: function() {
+ var A = this.start.elements, B = this.end.elements;
+ return Vector.create([B[0] - A[0], B[1] - A[1], B[2] - A[2]]);
+ },
+
+ // Returns the segment's midpoint as a vector
+ midpoint: function() {
+ var A = this.start.elements, B = this.end.elements;
+ return Vector.create([(B[0] + A[0])/2, (B[1] + A[1])/2, (B[2] + A[2])/2]);
+ },
+
+ // Returns the plane that bisects the segment
+ bisectingPlane: function() {
+ return Plane.create(this.midpoint(), this.toVector());
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ var S = this.start.elements, E = this.end.elements;
+ return Line.Segment.create(
+ [S[0] + V[0], S[1] + V[1], S[2] + (V[2] || 0)],
+ [E[0] + V[0], E[1] + V[1], E[2] + (V[2] || 0)]
+ );
+ },
+
+ // Returns true iff the line segment is parallel to the argument. It simply forwards
+ // the method call onto its line property.
+ isParallelTo: function(obj) {
+ return this.line.isParallelTo(obj);
+ },
+
+ // Returns the distance between the argument and the line segment's closest point to the argument
+ distanceFrom: function(obj) {
+ var P = this.pointClosestTo(obj);
+ return (P === null) ? null : P.distanceFrom(obj);
+ },
+
+ // Returns true iff the given point lies on the segment
+ contains: function(obj) {
+ if (obj.start && obj.end) { return this.contains(obj.start) && this.contains(obj.end); }
+ var P = (obj.elements || obj).slice();
+ if (P.length == 2) { P.push(0); }
+ if (this.start.eql(P)) { return true; }
+ var S = this.start.elements;
+ var V = Vector.create([S[0] - P[0], S[1] - P[1], S[2] - (P[2] || 0)]);
+ var vect = this.toVector();
+ return V.isAntiparallelTo(vect) && V.modulus() <= vect.modulus();
+ },
+
+ // Returns true iff the line segment intersects the argument
+ intersects: function(obj) {
+ return (this.intersectionWith(obj) !== null);
+ },
+
+ // Returns the unique point of intersection with the argument
+ intersectionWith: function(obj) {
+ if (!this.line.intersects(obj)) { return null; }
+ var P = this.line.intersectionWith(obj);
+ return (this.contains(P) ? P : null);
+ },
+
+ // Returns the point on the line segment closest to the given object
+ pointClosestTo: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var V = this.line.intersectionWith(obj);
+ if (V === null) { return null; }
+ return this.pointClosestTo(V);
+ } else {
+ // obj is a line (segment) or point
+ var P = this.line.pointClosestTo(obj);
+ if (P === null) { return null; }
+ if (this.contains(P)) { return P; }
+ return (this.line.positionOf(P) < 0 ? this.start : this.end).dup();
+ }
+ },
+
+ // Set the start and end-points of the segment
+ setPoints: function(startPoint, endPoint) {
+ startPoint = Vector.create(startPoint).to3D();
+ endPoint = Vector.create(endPoint).to3D();
+ if (startPoint === null || endPoint === null) { return null; }
+ this.line = Line.create(startPoint, endPoint.subtract(startPoint));
+ this.start = startPoint;
+ this.end = endPoint;
+ return this;
+ }
+};
+
+// Constructor function
+Line.Segment.create = function(v1, v2) {
+ var S = new Line.Segment();
+ return S.setPoints(v1, v2);
+};
+
+module.exports = Line.Segment;
+
+},{"./line":76,"./vector":74}],77:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Plane class - depends on Vector. Some methods require Matrix and Line.
+var Vector = require('./vector');
+var Matrix = require('./matrix');
+var Line = require('./line');
+
+var Sylvester = require('./sylvester');
+
+function Plane() {}
+Plane.prototype = {
+
+ // Returns true iff the plane occupies the same space as the argument
+ eql: function(plane) {
+ return (this.contains(plane.anchor) && this.isParallelTo(plane));
+ },
+
+ // Returns a copy of the plane
+ dup: function() {
+ return Plane.create(this.anchor, this.normal);
+ },
+
+ // Returns the result of translating the plane by the given vector
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Plane.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.normal);
+ },
+
+ // Returns true iff the plane is parallel to the argument. Will return true
+ // if the planes are equal, or if you give a line and it lies in the plane.
+ isParallelTo: function(obj) {
+ var theta;
+ if (obj.normal) {
+ // obj is a plane
+ theta = this.normal.angleFrom(obj.normal);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(Math.PI - theta) <= Sylvester.precision);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.normal.isPerpendicularTo(obj.direction);
+ }
+ return null;
+ },
+
+ // Returns true iff the receiver is perpendicular to the argument
+ isPerpendicularTo: function(plane) {
+ var theta = this.normal.angleFrom(plane.normal);
+ return (Math.abs(Math.PI/2 - theta) <= Sylvester.precision);
+ },
+
+ // Returns the plane's distance from the given object (point, line or plane)
+ distanceFrom: function(obj) {
+ if (this.intersects(obj) || this.contains(obj)) { return 0; }
+ if (obj.anchor) {
+ // obj is a plane or line
+ var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);
+ }
+ },
+
+ // Returns true iff the plane contains the given point or line
+ contains: function(obj) {
+ if (obj.normal) { return null; }
+ if (obj.direction) {
+ return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));
+ } else {
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var diff = Math.abs(N[0]*(A[0] - P[0]) + N[1]*(A[1] - P[1]) + N[2]*(A[2] - (P[2] || 0)));
+ return (diff <= Sylvester.precision);
+ }
+ },
+
+ // Returns true iff the plane has a unique point/line of intersection with the argument
+ intersects: function(obj) {
+ if (typeof(obj.direction) == 'undefined' && typeof(obj.normal) == 'undefined') { return null; }
+ return !this.isParallelTo(obj);
+ },
+
+ // Returns the unique intersection with the argument, if one exists. The result
+ // will be a vector if a line is supplied, and a line if a plane is supplied.
+ intersectionWith: function(obj) {
+ if (!this.intersects(obj)) { return null; }
+ if (obj.direction) {
+ // obj is a line
+ var A = obj.anchor.elements, D = obj.direction.elements,
+ P = this.anchor.elements, N = this.normal.elements;
+ var multiplier = (N[0]*(P[0]-A[0]) + N[1]*(P[1]-A[1]) + N[2]*(P[2]-A[2])) / (N[0]*D[0] + N[1]*D[1] + N[2]*D[2]);
+ return Vector.create([A[0] + D[0]*multiplier, A[1] + D[1]*multiplier, A[2] + D[2]*multiplier]);
+ } else if (obj.normal) {
+ // obj is a plane
+ var direction = this.normal.cross(obj.normal).toUnitVector();
+ // To find an anchor point, we find one co-ordinate that has a value
+ // of zero somewhere on the intersection, and remember which one we picked
+ var N = this.normal.elements, A = this.anchor.elements,
+ O = obj.normal.elements, B = obj.anchor.elements;
+ var solver = Matrix.Zero(2,2), i = 0;
+ while (solver.isSingular()) {
+ i++;
+ solver = Matrix.create([
+ [ N[i%3], N[(i+1)%3] ],
+ [ O[i%3], O[(i+1)%3] ]
+ ]);
+ }
+ // Then we solve the simultaneous equations in the remaining dimensions
+ var inverse = solver.inverse().elements;
+ var x = N[0]*A[0] + N[1]*A[1] + N[2]*A[2];
+ var y = O[0]*B[0] + O[1]*B[1] + O[2]*B[2];
+ var intersection = [
+ inverse[0][0] * x + inverse[0][1] * y,
+ inverse[1][0] * x + inverse[1][1] * y
+ ];
+ var anchor = [];
+ for (var j = 1; j <= 3; j++) {
+ // This formula picks the right element from intersection by
+ // cycling depending on which element we set to zero above
+ anchor.push((i == j) ? 0 : intersection[(j + (5 - i)%3)%3]);
+ }
+ return Line.create(anchor, direction);
+ }
+ },
+
+ // Returns the point in the plane closest to the given point
+ pointClosestTo: function(point) {
+ var P = point.elements || point;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];
+ return Vector.create([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);
+ },
+
+ // Returns a copy of the plane, rotated by t radians about the given line
+ // See notes on Line#rotate.
+ rotate: function(t, line) {
+ var R = t.determinant ? t.elements : Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Plane.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],
+ R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],
+ R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]
+ ]);
+ },
+
+ // Returns the reflection of the plane in the given point, line or plane.
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, N = this.normal.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the plane's normal to its anchor, then mirror that in the other plane
+ var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;
+ var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;
+ var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];
+ return Plane.create(newA, newN);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ return Plane.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);
+ }
+ },
+
+ // Sets the anchor point and normal to the plane. If three arguments are specified,
+ // the normal is calculated by assuming the three points should lie in the same plane.
+ // If only two are sepcified, the second is taken to be the normal. Normal vector is
+ // normalised before storage.
+ setVectors: function(anchor, v1, v2) {
+ anchor = Vector.create(anchor);
+ anchor = anchor.to3D(); if (anchor === null) { return null; }
+ v1 = Vector.create(v1);
+ v1 = v1.to3D(); if (v1 === null) { return null; }
+ if (typeof(v2) == 'undefined') {
+ v2 = null;
+ } else {
+ v2 = Vector.create(v2);
+ v2 = v2.to3D(); if (v2 === null) { return null; }
+ }
+ var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];
+ var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];
+ var normal, mod;
+ if (v2 !== null) {
+ var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];
+ normal = Vector.create([
+ (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),
+ (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),
+ (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)
+ ]);
+ mod = normal.modulus();
+ if (mod === 0) { return null; }
+ normal = Vector.create([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);
+ } else {
+ mod = Math.sqrt(v11*v11 + v12*v12 + v13*v13);
+ if (mod === 0) { return null; }
+ normal = Vector.create([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);
+ }
+ this.anchor = anchor;
+ this.normal = normal;
+ return this;
+ }
+};
+
+// Constructor function
+Plane.create = function(anchor, v1, v2) {
+ var P = new Plane();
+ return P.setVectors(anchor, v1, v2);
+};
+
+// X-Y-Z planes
+Plane.XY = Plane.create(Vector.Zero(3), Vector.k);
+Plane.YZ = Plane.create(Vector.Zero(3), Vector.i);
+Plane.ZX = Plane.create(Vector.Zero(3), Vector.j);
+Plane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;
+
+// Returns the plane containing the given points (can be arrays as
+// well as vectors). If the points are not coplanar, returns null.
+Plane.fromPoints = function(points) {
+ var np = points.length, list = [], i, P, n, N, A, B, C, D, theta, prevN, totalN = Vector.Zero(3);
+ for (i = 0; i < np; i++) {
+ P = Vector.create(points[i]).to3D();
+ if (P === null) { return null; }
+ list.push(P);
+ n = list.length;
+ if (n > 2) {
+ // Compute plane normal for the latest three points
+ A = list[n-1].elements; B = list[n-2].elements; C = list[n-3].elements;
+ N = Vector.create([
+ (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),
+ (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),
+ (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])
+ ]).toUnitVector();
+ if (n > 3) {
+ // If the latest normal is not (anti)parallel to the previous one, we've strayed off the plane.
+ // This might be a slightly long-winded way of doing things, but we need the sum of all the normals
+ // to find which way the plane normal should point so that the points form an anticlockwise list.
+ theta = N.angleFrom(prevN);
+ if (theta !== null) {
+ if (!(Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision)) { return null; }
+ }
+ }
+ totalN = totalN.add(N);
+ prevN = N;
+ }
+ }
+ // We need to add in the normals at the start and end points, which the above misses out
+ A = list[1].elements; B = list[0].elements; C = list[n-1].elements; D = list[n-2].elements;
+ totalN = totalN.add(Vector.create([
+ (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),
+ (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),
+ (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])
+ ]).toUnitVector()).add(Vector.create([
+ (B[1] - C[1]) * (D[2] - C[2]) - (B[2] - C[2]) * (D[1] - C[1]),
+ (B[2] - C[2]) * (D[0] - C[0]) - (B[0] - C[0]) * (D[2] - C[2]),
+ (B[0] - C[0]) * (D[1] - C[1]) - (B[1] - C[1]) * (D[0] - C[0])
+ ]).toUnitVector());
+ return Plane.create(list[0], totalN);
+};
+
+module.exports = Plane;
+
+},{"./vector":74,"./matrix":75,"./line":76,"./sylvester":79}],75:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Matrix class - depends on Vector.
+
+var fs = require('fs');
+var Sylvester = require('./sylvester');
+var Vector = require('./vector');
+
+// augment a matrix M with identity rows/cols
+function identSize(M, m, n, k) {
+ var e = M.elements;
+ var i = k - 1;
+
+ while(i--) {
+ var row = [];
+
+ for(var j = 0; j < n; j++)
+ row.push(j == i ? 1 : 0);
+
+ e.unshift(row);
+ }
+
+ for(var i = k - 1; i < m; i++) {
+ while(e[i].length < n)
+ e[i].unshift(0);
+ }
+
+ return $M(e);
+}
+
+function pca(X) {
+ var Sigma = X.transpose().x(X).x(1 / X.rows());
+ var svd = Sigma.svd();
+ return {U: svd.U, S: svd.S};
+}
+
+// singular value decomposition in pure javascript
+function svdJs() {
+ var A = this;
+ var V = Matrix.I(A.rows());
+ var S = A.transpose();
+ var U = Matrix.I(A.cols());
+ var err = Number.MAX_VALUE;
+ var i = 0;
+ var maxLoop = 100;
+
+ while(err > 2.2737e-13 && i < maxLoop) {
+ var qr = S.transpose().qrJs();
+ S = qr.R;
+ V = V.x(qr.Q);
+ qr = S.transpose().qrJs();
+ U = U.x(qr.Q);
+ S = qr.R;
+
+ var e = S.triu(1).unroll().norm();
+ var f = S.diagonal().norm();
+
+ if(f == 0)
+ f = 1;
+
+ err = e / f;
+
+ i++;
+ }
+
+ var ss = S.diagonal();
+ var s = [];
+
+ for(var i = 1; i <= ss.cols(); i++) {
+ var ssn = ss.e(i);
+ s.push(Math.abs(ssn));
+
+ if(ssn < 0) {
+ for(var j = 0; j < U.rows(); j++) {
+ V.elements[j][i - 1] = -(V.elements[j][i - 1]);
+ }
+ }
+ }
+
+ return {U: U, S: $V(s).toDiagonalMatrix(), V: V};
+}
+
+// singular value decomposition using LAPACK
+function svdPack() {
+ var result = lapack.sgesvd('A', 'A', this.elements);
+
+ return {
+ U: $M(result.U),
+ S: $M(result.S).column(1).toDiagonalMatrix(),
+ V: $M(result.VT).transpose()
+ };
+}
+
+// QR decomposition in pure javascript
+function qrJs() {
+ var m = this.rows();
+ var n = this.cols();
+ var Q = Matrix.I(m);
+ var A = this;
+
+ for(var k = 1; k < Math.min(m, n); k++) {
+ var ak = A.slice(k, 0, k, k).col(1);
+ var oneZero = [1];
+
+ while(oneZero.length <= m - k)
+ oneZero.push(0);
+
+ oneZero = $V(oneZero);
+ var vk = ak.add(oneZero.x(ak.norm() * Math.sign(ak.e(1))));
+ var Vk = $M(vk);
+ var Hk = Matrix.I(m - k + 1).subtract(Vk.x(2).x(Vk.transpose()).div(Vk.transpose().x(Vk).e(1, 1)));
+ var Qk = identSize(Hk, m, n, k);
+ A = Qk.x(A);
+ // slow way to compute Q
+ Q = Q.x(Qk);
+ }
+
+ return {Q: Q, R: A};
+}
+
+// QR decomposition using LAPACK
+function qrPack() {
+ var qr = lapack.qr(this.elements);
+
+ return {
+ Q: $M(qr.Q),
+ R: $M(qr.R)
+ };
+}
+
+function Matrix() {}
+Matrix.prototype = {
+ // solve a system of linear equations (work in progress)
+ solve: function(b) {
+ var lu = this.lu();
+ b = lu.P.x(b);
+ var y = lu.L.forwardSubstitute(b);
+ var x = lu.U.backSubstitute(y);
+ return lu.P.x(x);
+ //return this.inv().x(b);
+ },
+
+ // project a matrix onto a lower dim
+ pcaProject: function(k, U) {
+ var U = U || pca(this).U;
+ var Ureduce= U.slice(1, U.rows(), 1, k);
+ return {Z: this.x(Ureduce), U: U};
+ },
+
+ // recover a matrix to a higher dimension
+ pcaRecover: function(U) {
+ var k = this.cols();
+ var Ureduce = U.slice(1, U.rows(), 1, k);
+ return this.x(Ureduce.transpose());
+ },
+
+ // grab the upper triangular part of the matrix
+ triu: function(k) {
+ if(!k)
+ k = 0;
+
+ return this.map(function(x, i, j) {
+ return j - i >= k ? x : 0;
+ });
+ },
+
+ // unroll a matrix into a vector
+ unroll: function() {
+ var v = [];
+
+ for(var i = 1; i <= this.cols(); i++) {
+ for(var j = 1; j <= this.rows(); j++) {
+ v.push(this.e(j, i));
+ }
+ }
+
+ return $V(v);
+ },
+
+ // return a sub-block of the matrix
+ slice: function(startRow, endRow, startCol, endCol) {
+ var x = [];
+
+ if(endRow == 0)
+ endRow = this.rows();
+
+ if(endCol == 0)
+ endCol = this.cols();
+
+ for(i = startRow; i <= endRow; i++) {
+ var row = [];
+
+ for(j = startCol; j <= endCol; j++) {
+ row.push(this.e(i, j));
+ }
+
+ x.push(row);
+ }
+
+ return $M(x);
+ },
+
+ // Returns element (i,j) of the matrix
+ e: function(i,j) {
+ if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
+ return this.elements[i - 1][j - 1];
+ },
+
+ // Returns row k of the matrix as a vector
+ row: function(i) {
+ if (i > this.elements.length) { return null; }
+ return $V(this.elements[i - 1]);
+ },
+
+ // Returns column k of the matrix as a vector
+ col: function(j) {
+ if (j > this.elements[0].length) { return null; }
+ var col = [], n = this.elements.length;
+ for (var i = 0; i < n; i++) { col.push(this.elements[i][j - 1]); }
+ return $V(col);
+ },
+
+ // Returns the number of rows/columns the matrix has
+ dimensions: function() {
+ return {rows: this.elements.length, cols: this.elements[0].length};
+ },
+
+ // Returns the number of rows in the matrix
+ rows: function() {
+ return this.elements.length;
+ },
+
+ // Returns the number of columns in the matrix
+ cols: function() {
+ return this.elements[0].length;
+ },
+
+ approxEql: function(matrix) {
+ return this.eql(matrix, Sylvester.approxPrecision);
+ },
+
+ // Returns true iff the matrix is equal to the argument. You can supply
+ // a vector as the argument, in which case the receiver must be a
+ // one-column matrix equal to the vector.
+ eql: function(matrix, precision) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (this.elements.length != M.length ||
+ this.elements[0].length != M[0].length) { return false; }
+ var i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) { j = nj;
+ while (j--) {
+ if (Math.abs(this.elements[i][j] - M[i][j]) > (precision || Sylvester.precision)) { return false; }
+ }
+ }
+ return true;
+ },
+
+ // Returns a copy of the matrix
+ dup: function() {
+ return Matrix.create(this.elements);
+ },
+
+ // Maps the matrix to another matrix (of the same dimensions) according to the given function
+ map: function(fn) {
+ var els = [], i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) { j = nj;
+ els[i] = [];
+ while (j--) {
+ els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
+ }
+ }
+ return Matrix.create(els);
+ },
+
+ // Returns true iff the argument has the same dimensions as the matrix
+ isSameSizeAs: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ return (this.elements.length == M.length &&
+ this.elements[0].length == M[0].length);
+ },
+
+ // Returns the result of adding the argument to the matrix
+ add: function(matrix) {
+ if(typeof(matrix) == 'number') {
+ return this.map(function(x, i, j) { return x + matrix});
+ } else {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x + M[i - 1][j - 1]; });
+ }
+ },
+
+ // Returns the result of subtracting the argument from the matrix
+ subtract: function(matrix) {
+ if(typeof(matrix) == 'number') {
+ return this.map(function(x, i, j) { return x - matrix});
+ } else {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x - M[i - 1][j - 1]; });
+ }
+ },
+
+ // Returns true iff the matrix can multiply the argument from the left
+ canMultiplyFromLeft: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ // this.columns should equal matrix.rows
+ return (this.elements[0].length == M.length);
+ },
+
+ // Returns the result of a multiplication-style operation the matrix from the right by the argument.
+ // If the argument is a scalar then just operate on all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ mulOp: function(matrix, op) {
+ if (!matrix.elements) {
+ return this.map(function(x) { return op(x, matrix); });
+ }
+
+ var returnVector = matrix.modulus ? true : false;
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined')
+ M = Matrix.create(M).elements;
+ if (!this.canMultiplyFromLeft(M))
+ return null;
+ var e = this.elements, rowThis, rowElem, elements = [],
+ sum, m = e.length, n = M[0].length, o = e[0].length, i = m, j, k;
+
+ while (i--) {
+ rowElem = [];
+ rowThis = e[i];
+ j = n;
+
+ while (j--) {
+ sum = 0;
+ k = o;
+
+ while (k--) {
+ sum += op(rowThis[k], M[k][j]);
+ }
+
+ rowElem[j] = sum;
+ }
+
+ elements[i] = rowElem;
+ }
+
+ var M = Matrix.create(elements);
+ return returnVector ? M.col(1) : M;
+ },
+
+ // Returns the result of dividing the matrix from the right by the argument.
+ // If the argument is a scalar then just divide all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ div: function(matrix) {
+ return this.mulOp(matrix, function(x, y) { return x / y});
+ },
+
+ // Returns the result of multiplying the matrix from the right by the argument.
+ // If the argument is a scalar then just multiply all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ multiply: function(matrix) {
+ return this.mulOp(matrix, function(x, y) { return x * y});
+ },
+
+ x: function(matrix) { return this.multiply(matrix); },
+
+ elementMultiply: function(v) {
+ return this.map(function(k, i, j) {
+ return v.e(i, j) * k;
+ });
+ },
+
+ // sum all elements in the matrix
+ sum: function() {
+ var sum = 0;
+
+ this.map(function(x) { sum += x;});
+
+ return sum;
+ },
+
+ // Returns a Vector of each colum averaged.
+ mean: function() {
+ var dim = this.dimensions();
+ var r = [];
+ for (var i = 1; i <= dim.cols; i++) {
+ r.push(this.col(i).sum() / dim.rows);
+ }
+ return $V(r);
+ },
+
+ column: function(n) {
+ return this.col(n);
+ },
+
+ // element-wise log
+ log: function() {
+ return this.map(function(x) { return Math.log(x); });
+ },
+
+ // Returns a submatrix taken from the matrix
+ // Argument order is: start row, start col, nrows, ncols
+ // Element selection wraps if the required index is outside the matrix's bounds, so you could
+ // use this to perform row/column cycling or copy-augmenting.
+ minor: function(a, b, c, d) {
+ var elements = [], ni = c, i, nj, j;
+ var rows = this.elements.length, cols = this.elements[0].length;
+ while (ni--) {
+ i = c - ni - 1;
+ elements[i] = [];
+ nj = d;
+ while (nj--) {
+ j = d - nj - 1;
+ elements[i][j] = this.elements[(a + i - 1) % rows][(b + j - 1) % cols];
+ }
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns the transpose of the matrix
+ transpose: function() {
+ var rows = this.elements.length, i, cols = this.elements[0].length, j;
+ var elements = [], i = cols;
+ while (i--) {
+ j = rows;
+ elements[i] = [];
+ while (j--) {
+ elements[i][j] = this.elements[j][i];
+ }
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns true iff the matrix is square
+ isSquare: function() {
+ return (this.elements.length == this.elements[0].length);
+ },
+
+ // Returns the (absolute) largest element of the matrix
+ max: function() {
+ var m = 0, i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) {
+ j = nj;
+ while (j--) {
+ if (Math.abs(this.elements[i][j]) > Math.abs(m)) { m = this.elements[i][j]; }
+ }
+ }
+ return m;
+ },
+
+ // Returns the indeces of the first match found by reading row-by-row from left to right
+ indexOf: function(x) {
+ var index = null, ni = this.elements.length, i, nj = this.elements[0].length, j;
+ for (i = 0; i < ni; i++) {
+ for (j = 0; j < nj; j++) {
+ if (this.elements[i][j] == x) { return {i: i + 1, j: j + 1}; }
+ }
+ }
+ return null;
+ },
+
+ // If the matrix is square, returns the diagonal elements as a vector.
+ // Otherwise, returns null.
+ diagonal: function() {
+ if (!this.isSquare) { return null; }
+ var els = [], n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ els.push(this.elements[i][i]);
+ }
+ return $V(els);
+ },
+
+ // Make the matrix upper (right) triangular by Gaussian elimination.
+ // This method only adds multiples of rows to other rows. No rows are
+ // scaled up or switched, and the determinant is preserved.
+ toRightTriangular: function() {
+ var M = this.dup(), els;
+ var n = this.elements.length, i, j, np = this.elements[0].length, p;
+ for (i = 0; i < n; i++) {
+ if (M.elements[i][i] == 0) {
+ for (j = i + 1; j < n; j++) {
+ if (M.elements[j][i] != 0) {
+ els = [];
+ for (p = 0; p < np; p++) { els.push(M.elements[i][p] + M.elements[j][p]); }
+ M.elements[i] = els;
+ break;
+ }
+ }
+ }
+ if (M.elements[i][i] != 0) {
+ for (j = i + 1; j < n; j++) {
+ var multiplier = M.elements[j][i] / M.elements[i][i];
+ els = [];
+ for (p = 0; p < np; p++) {
+ // Elements with column numbers up to an including the number
+ // of the row that we're subtracting can safely be set straight to
+ // zero, since that's the point of this routine and it avoids having
+ // to loop over and correct rounding errors later
+ els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);
+ }
+ M.elements[j] = els;
+ }
+ }
+ }
+ return M;
+ },
+
+ toUpperTriangular: function() { return this.toRightTriangular(); },
+
+ // Returns the determinant for square matrices
+ determinant: function() {
+ if (!this.isSquare()) { return null; }
+ if (this.cols == 1 && this.rows == 1) { return this.row(1); }
+ if (this.cols == 0 && this.rows == 0) { return 1; }
+ var M = this.toRightTriangular();
+ var det = M.elements[0][0], n = M.elements.length;
+ for (var i = 1; i < n; i++) {
+ det = det * M.elements[i][i];
+ }
+ return det;
+ },
+ det: function() { return this.determinant(); },
+
+ // Returns true iff the matrix is singular
+ isSingular: function() {
+ return (this.isSquare() && this.determinant() === 0);
+ },
+
+ // Returns the trace for square matrices
+ trace: function() {
+ if (!this.isSquare()) { return null; }
+ var tr = this.elements[0][0], n = this.elements.length;
+ for (var i = 1; i < n; i++) {
+ tr += this.elements[i][i];
+ }
+ return tr;
+ },
+
+ tr: function() { return this.trace(); },
+
+ // Returns the rank of the matrix
+ rank: function() {
+ var M = this.toRightTriangular(), rank = 0;
+ var i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) {
+ j = nj;
+ while (j--) {
+ if (Math.abs(M.elements[i][j]) > Sylvester.precision) { rank++; break; }
+ }
+ }
+ return rank;
+ },
+
+ rk: function() { return this.rank(); },
+
+ // Returns the result of attaching the given argument to the right-hand side of the matrix
+ augment: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ var T = this.dup(), cols = T.elements[0].length;
+ var i = T.elements.length, nj = M[0].length, j;
+ if (i != M.length) { return null; }
+ while (i--) {
+ j = nj;
+ while (j--) {
+ T.elements[i][cols + j] = M[i][j];
+ }
+ }
+ return T;
+ },
+
+ // Returns the inverse (if one exists) using Gauss-Jordan
+ inverse: function() {
+ if (!this.isSquare() || this.isSingular()) { return null; }
+ var n = this.elements.length, i = n, j;
+ var M = this.augment(Matrix.I(n)).toRightTriangular();
+ var np = M.elements[0].length, p, els, divisor;
+ var inverse_elements = [], new_element;
+ // Matrix is non-singular so there will be no zeros on the diagonal
+ // Cycle through rows from last to first
+ while (i--) {
+ // First, normalise diagonal elements to 1
+ els = [];
+ inverse_elements[i] = [];
+ divisor = M.elements[i][i];
+ for (p = 0; p < np; p++) {
+ new_element = M.elements[i][p] / divisor;
+ els.push(new_element);
+ // Shuffle off the current row of the right hand side into the results
+ // array as it will not be modified by later runs through this loop
+ if (p >= n) { inverse_elements[i].push(new_element); }
+ }
+ M.elements[i] = els;
+ // Then, subtract this row from those above it to
+ // give the identity matrix on the left hand side
+ j = i;
+ while (j--) {
+ els = [];
+ for (p = 0; p < np; p++) {
+ els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);
+ }
+ M.elements[j] = els;
+ }
+ }
+ return Matrix.create(inverse_elements);
+ },
+
+ inv: function() { return this.inverse(); },
+
+ // Returns the result of rounding all the elements
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the matrix with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(p) {
+ return (Math.abs(p - x) <= Sylvester.precision) ? x : p;
+ });
+ },
+
+ // Returns a string representation of the matrix
+ inspect: function() {
+ var matrix_rows = [];
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ matrix_rows.push($V(this.elements[i]).inspect());
+ }
+ return matrix_rows.join('\n');
+ },
+
+ // Returns a array representation of the matrix
+ toArray: function() {
+ var matrix_rows = [];
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ matrix_rows.push(this.elements[i]);
+ }
+ return matrix_rows;
+ },
+
+
+ // Set the matrix's elements from an array. If the argument passed
+ // is a vector, the resulting matrix will be a single column.
+ setElements: function(els) {
+ var i, j, elements = els.elements || els;
+ if (typeof(elements[0][0]) != 'undefined') {
+ i = elements.length;
+ this.elements = [];
+ while (i--) {
+ j = elements[i].length;
+ this.elements[i] = [];
+ while (j--) {
+ this.elements[i][j] = elements[i][j];
+ }
+ }
+ return this;
+ }
+ var n = elements.length;
+ this.elements = [];
+ for (i = 0; i < n; i++) {
+ this.elements.push([elements[i]]);
+ }
+ return this;
+ },
+
+ // return the indexes of the columns with the largest value
+ // for each row
+ maxColumnIndexes: function() {
+ var maxes = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var max = null;
+ var maxIndex = -1;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(max === null || this.e(i, j) > max) {
+ max = this.e(i, j);
+ maxIndex = j;
+ }
+ }
+
+ maxes.push(maxIndex);
+ }
+
+ return $V(maxes);
+ },
+
+ // return the largest values in each row
+ maxColumns: function() {
+ var maxes = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var max = null;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(max === null || this.e(i, j) > max) {
+ max = this.e(i, j);
+ }
+ }
+
+ maxes.push(max);
+ }
+
+ return $V(maxes);
+ },
+
+ // return the indexes of the columns with the smallest values
+ // for each row
+ minColumnIndexes: function() {
+ var mins = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var min = null;
+ var minIndex = -1;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(min === null || this.e(i, j) < min) {
+ min = this.e(i, j);
+ minIndex = j;
+ }
+ }
+
+ mins.push(minIndex);
+ }
+
+ return $V(mins);
+ },
+
+ // return the smallest values in each row
+ minColumns: function() {
+ var mins = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var min = null;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(min === null || this.e(i, j) < min) {
+ min = this.e(i, j);
+ }
+ }
+
+ mins.push(min);
+ }
+
+ return $V(mins);
+ },
+
+ // perorm a partial pivot on the matrix. essentially move the largest
+ // row below-or-including the pivot and replace the pivot's row with it.
+ // a pivot matrix is returned so multiplication can perform the transform.
+ partialPivot: function(k, j, P, A, L) {
+ var maxIndex = 0;
+ var maxValue = 0;
+
+ for(var i = k; i <= A.rows(); i++) {
+ if(Math.abs(A.e(i, j)) > maxValue) {
+ maxValue = Math.abs(A.e(k, j));
+ maxIndex = i;
+ }
+ }
+
+ if(maxIndex != k) {
+ var tmp = A.elements[k - 1];
+ A.elements[k - 1] = A.elements[maxIndex - 1];
+ A.elements[maxIndex - 1] = tmp;
+
+ P.elements[k - 1][k - 1] = 0;
+ P.elements[k - 1][maxIndex - 1] = 1;
+ P.elements[maxIndex - 1][maxIndex - 1] = 0;
+ P.elements[maxIndex - 1][k - 1] = 1;
+ }
+
+ return P;
+ },
+
+ // solve lower-triangular matrix * x = b via forward substitution
+ forwardSubstitute: function(b) {
+ var xa = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var w = 0;
+
+ for(var j = 1; j < i; j++) {
+ w += this.e(i, j) * xa[j - 1];
+ }
+
+ xa.push((b.e(i) - w) / this.e(i, i));
+ }
+
+ return $V(xa);
+ },
+
+ // solve an upper-triangular matrix * x = b via back substitution
+ backSubstitute: function(b) {
+ var xa = [];
+
+ for(var i = this.rows(); i > 0; i--) {
+ var w = 0;
+
+ for(var j = this.cols(); j > i; j--) {
+ w += this.e(i, j) * xa[this.rows() - j];
+ }
+
+ xa.push((b.e(i) - w) / this.e(i, i));
+ }
+
+ return $V(xa.reverse());
+ },
+
+ luPack: luPack,
+ luJs: luJs,
+ svdJs: svdJs,
+ svdPack: svdPack,
+ qrJs: qrJs,
+ qrPack: qrPack
+};
+
+// LU factorization from LAPACK
+function luPack() {
+ var lu = lapack.lu(this.elements);
+ return {
+ L: $M(lu.L),
+ U: $M(lu.U),
+ P: $M(lu.P)
+ // don't pass back IPIV
+ };
+}
+
+var tolerance = 1.4901e-08;
+
+// pure Javascript LU factorization
+function luJs() {
+ var A = this.dup();
+ var L = Matrix.I(A.rows());
+ var P = Matrix.I(A.rows());
+ var U = Matrix.Zeros(A.rows(), A.cols());
+ var p = 1;
+
+ for(var k = 1; k <= Math.min(A.cols(), A.rows()); k++) {
+ P = A.partialPivot(k, p, P, A, L);
+
+ for(var i = k + 1; i <= A.rows(); i++) {
+ var l = A.e(i, p) / A.e(k, p);
+ L.elements[i - 1][k - 1] = l;
+
+ for(var j = k + 1 ; j <= A.cols(); j++) {
+ A.elements[i - 1][j - 1] -= A.e(k, j) * l;
+ }
+ }
+
+ for(var j = k; j <= A.cols(); j++) {
+ U.elements[k - 1][j - 1] = A.e(k, j);
+ }
+
+ if(p < A.cols())
+ p++;
+ }
+
+ return {L: L, U: U, P: P};
+}
+
+function getLapack() {
+ try {
+ return require('lapack');
+ } catch(e) {}
+}
+
+var lapack;
+
+// if node-lapack is installed use the fast, native fortran routines
+if(lapack = getLapack()) {
+ Matrix.prototype.svd = svdPack;
+ Matrix.prototype.qr = qrPack;
+ Matrix.prototype.lu = luPack;
+} else {
+ // otherwise use the slower pure Javascript versions
+ Matrix.prototype.svd = svdJs;
+ Matrix.prototype.qr = qrJs;
+ Matrix.prototype.lu = luJs;
+}
+
+// Constructor function
+Matrix.create = function(aElements, ignoreLapack) {
+ var M = new Matrix().setElements(aElements);
+ return M;
+};
+
+// Identity matrix of size n
+Matrix.I = function(n) {
+ var els = [], i = n, j;
+ while (i--) {
+ j = n;
+ els[i] = [];
+ while (j--) {
+ els[i][j] = (i == j) ? 1 : 0;
+ }
+ }
+ return Matrix.create(els);
+};
+
+Matrix.loadFile = function(file) {
+ var contents = fs.readFileSync(file, 'utf-8');
+ var matrix = [];
+
+ var rowArray = contents.split('\n');
+ for (var i = 0; i < rowArray.length; i++) {
+ var d = rowArray[i].split(',');
+ if (d.length > 1) {
+ matrix.push(d);
+ }
+ }
+
+ var M = new Matrix();
+ return M.setElements(matrix);
+};
+
+// Diagonal matrix - all off-diagonal elements are zero
+Matrix.Diagonal = function(elements) {
+ var i = elements.length;
+ var M = Matrix.I(i);
+ while (i--) {
+ M.elements[i][i] = elements[i];
+ }
+ return M;
+};
+
+// Rotation matrix about some axis. If no axis is
+// supplied, assume we're after a 2D transform
+Matrix.Rotation = function(theta, a) {
+ if (!a) {
+ return Matrix.create([
+ [Math.cos(theta), -Math.sin(theta)],
+ [Math.sin(theta), Math.cos(theta)]
+ ]);
+ }
+ var axis = a.dup();
+ if (axis.elements.length != 3) { return null; }
+ var mod = axis.modulus();
+ var x = axis.elements[0] / mod, y = axis.elements[1] / mod, z = axis.elements[2] / mod;
+ var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;
+ // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp
+ // That proof rotates the co-ordinate system so theta
+ // becomes -theta and sin becomes -sin here.
+ return Matrix.create([
+ [t * x * x + c, t * x * y - s * z, t * x * z + s * y],
+ [t * x * y + s * z, t * y * y + c, t * y * z - s * x],
+ [t * x * z - s * y, t * y * z + s * x, t * z * z + c]
+ ]);
+};
+
+// Special case rotations
+Matrix.RotationX = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [1, 0, 0],
+ [0, c, -s],
+ [0, s, c]
+ ]);
+};
+
+Matrix.RotationY = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, 0, s],
+ [0, 1, 0],
+ [-s, 0, c]
+ ]);
+};
+
+Matrix.RotationZ = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, -s, 0],
+ [s, c, 0],
+ [0, 0, 1]
+ ]);
+};
+
+// Random matrix of n rows, m columns
+Matrix.Random = function(n, m) {
+ if (arguments.length === 1) m = n;
+ return Matrix.Zero(n, m).map(
+ function() { return Math.random(); }
+ );
+};
+
+Matrix.Fill = function(n, m, v) {
+ if (arguments.length === 2) {
+ v = m;
+ m = n;
+ }
+
+ var els = [], i = n, j;
+
+ while (i--) {
+ j = m;
+ els[i] = [];
+
+ while (j--) {
+ els[i][j] = v;
+ }
+ }
+
+ return Matrix.create(els);
+};
+
+// Matrix filled with zeros
+Matrix.Zero = function(n, m) {
+ return Matrix.Fill(n, m, 0);
+};
+
+// Matrix filled with zeros
+Matrix.Zeros = function(n, m) {
+ return Matrix.Zero(n, m);
+};
+
+// Matrix filled with ones
+Matrix.One = function(n, m) {
+ return Matrix.Fill(n, m, 1);
+};
+
+// Matrix filled with ones
+Matrix.Ones = function(n, m) {
+ return Matrix.One(n, m);
+};
+
+module.exports = Matrix;
+
+},{"fs":42,"./vector":74,"./sylvester":79,"lapack":80}],80:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+
+var lapack = require('./lapack.js');
+exports.sgeqrf = lapack.sgeqrf;
+exports.sgesvd = lapack.sgesvd;
+exports.qr = lapack.qr;
+exports.lu = lapack.lu;
+exports.sgetrf = lapack.sgetrf;
+exports.sgesv = lapack.sgesv;
+
+},{"./lapack.js":81}],81:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var fortranArray = require('./fortranArray');
+var FFI = require('node-ffi');
+
+var LAPACK;
+
+try {
+ LAPACK = new FFI.Library('liblapack', {
+ "sgeqrf_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer"]],
+ "sorgqr_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer"]],
+ "sgesvd_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer", "pointer", ]],
+ "sgetrf_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer"]],
+ "sgesv_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer"]]
+
+ });
+} catch(e) {
+ console.log("!!! node-lapack requires the native lapack to be built as a shared lib.");
+ console.log(e);
+}
+
+var FORTRAN_INT = 4;
+var FORTRAN_CHAR = 1;
+var FORTRAN_FLOAT = 4;
+
+function eye(m) {
+ var matrix = [];
+
+ for(var i = 0; i < m; i++) {
+ var row = [];
+ matrix.push(row);
+
+ for(var j = 0; j < m; j++) {
+ if(i == j)
+ row.push(1);
+ else
+ row.push(0);
+ }
+ }
+
+ return matrix;
+}
+
+function matrixOp(matrix, callback) {
+ var m = matrix.length;
+ var n = matrix[0].length;
+ var f_m = new FFI.Pointer(FORTRAN_INT);
+ var f_n = new FFI.Pointer(FORTRAN_INT);
+ var f_a = fortranArray.jsMatrixToFortranArray(matrix);
+ var f_lda = new FFI.Pointer(FORTRAN_INT);
+
+ f_m.putInt32(m);
+ f_n.putInt32(n);
+ f_lda.putInt32(Math.max(1, m));
+
+ callback(m, n, f_m, f_n, f_a, f_lda);
+}
+
+function zeroBottomLeft(matrix) {
+ // zero out bottom left forming an upper right triangle matrix
+ for(var i = 1; i < matrix.length; i++) {
+ for(var j = 0; j < i && j < matrix[0].length; j++)
+ matrix[i][j] = 0;
+ }
+
+ return matrix
+}
+
+function sgesv(a, b) {
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ var result = {};
+
+ matrixOp(a, function(am, an, af_m, af_n, f_a) {
+ var f_ipiv = new FFI.Pointer(am * FORTRAN_INT);
+
+ matrixOp(b, function(bm, bn, bf_m, bf_n, f_b) {
+ LAPACK.sgesv_(af_m, bf_n, f_a, af_n, f_ipiv, f_b, bf_m, f_info);
+ result.X = fortranArray.fortranArrayToJSMatrix(f_b, bm, bn);
+ result.P = ipivToP(bm, fortranArray.fortranIntArrayToJSArray(f_ipiv, bm));
+ });
+ });
+
+ return result;
+}
+
+function qr(matrix) {
+ var result;
+
+ sgeqrf(matrix, function(qr, m, n, f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info) {
+ var f_k = new FFI.Pointer(FORTRAN_INT);
+ f_k.putInt32(Math.min(m, n));
+ LAPACK.sorgqr_(f_m, f_n, f_k, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ qr.Q = fortranArray.fortranArrayToJSMatrix(f_a, m, n);
+ qr.R = zeroBottomLeft(qr.R);
+ result = qr;
+ });
+
+ return result;
+}
+
+function sgeqrf(matrix, callback) {
+ var qr;
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_tau = new FFI.Pointer(m * n * FORTRAN_FLOAT);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ var f_lwork = new FFI.Pointer(FORTRAN_INT);
+ var f_work;
+ f_lwork.putInt32(-1);
+
+ // get optimal size of workspace
+ f_work = new FFI.Pointer(FORTRAN_INT);
+ LAPACK.sgeqrf_(f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ lwork = f_work.getFloat();
+
+ // allocate workspace
+ f_work = new FFI.Pointer(lwork * FORTRAN_FLOAT);
+ f_lwork.putInt32(lwork);
+
+ // perform QR decomp
+ LAPACK.sgeqrf_(f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+
+ qr = {
+ R: fortranArray.fortranArrayToJSMatrix(f_a, m, n),
+ tau: fortranArray.fortranArrayToJSArray(f_tau, Math.min(m, n))
+ };
+
+ if(callback)
+ qr = callback(qr, m, n, f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ });
+
+ return qr;
+}
+
+function cloneMatrix(matrix, height, width) {
+ var clone = [];
+
+ height = height || matrix.length;
+ width = width || matrix[0].length;
+
+ for(var i = 0; i < height; i++) {
+ var row = [];
+ clone.push(row);
+
+ for(var j = 0; j < width; j++) {
+ row.push(matrix[i][j]);
+ }
+ }
+
+ return clone;
+}
+
+function swapRows(matrix, i, j) {
+ var tmp = matrix[j];
+ matrix[j] = matrix[i];
+ matrix[i] = tmp;
+ return matrix;
+}
+
+function lu(matrix) {
+ var result = sgetrf(matrix);
+ var P = ipivToP(matrix.length, result.IPIV);
+ var L = cloneMatrix(result.LU);
+ var m = n = Math.min(matrix.length, matrix[0].length);
+
+ for(var i = 0; i < L.length; i++) {
+ for(var j = i; j < L[i].length; j++) {
+ if(i == j)
+ L[i][j] = 1;
+ else
+ L[i][j] = 0;
+ }
+ }
+
+ return {
+ L: L,
+ U: zeroBottomLeft(cloneMatrix(result.LU, n, n)),
+ P: P,
+ IPIV: result.IPIV
+ };
+}
+
+function ipivToP(m, ipiv){
+ var P = eye(m);
+
+ for(var i = 0; i < ipiv.length; i++) {
+ if(i != ipiv[i] - 1)
+ swapRows(P, i, ipiv[i] - 1);
+ }
+
+ return P;
+}
+
+function sgetrf(matrix) {
+ var result = {};
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_ipiv = new FFI.Pointer(Math.min(m, n) * FORTRAN_INT);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ LAPACK.sgetrf_(f_m, f_n, f_a, f_m, f_ipiv, f_info);
+ result.LU = fortranArray.fortranArrayToJSMatrix(f_a, m, n);
+ result.IPIV = fortranArray.fortranIntArrayToJSArray(f_ipiv, Math.min(m, n));
+ });
+
+ return result;
+}
+
+function sgesvd(jobu, jobvt, matrix) {
+ var f_jobu = new FFI.Pointer(FORTRAN_CHAR);
+ var f_jobvt = new FFI.Pointer(FORTRAN_CHAR);
+ f_jobu.putChar(jobu.charCodeAt(0));
+ f_jobvt.putChar(jobvt.charCodeAt(0));
+ var svd;
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_s = new FFI.Pointer(Math.pow(Math.min(m, n), 2) * FORTRAN_FLOAT);
+ var f_u = new FFI.Pointer(Math.pow(m, 2) * FORTRAN_FLOAT);
+ var f_ldu = new FFI.Pointer(FORTRAN_INT);
+ f_ldu.putInt32(m);
+
+ // TODO: punting on dims for now. revisit with http://www.netlib.org/lapack/single/sgesvd.f
+ var f_vt = new FFI.Pointer(Math.pow(n, 2) * FORTRAN_FLOAT);
+ var f_ldvt = new FFI.Pointer(FORTRAN_INT);
+ f_ldvt.putInt32(n);
+
+ var lwork = -1;
+ var f_work = new FFI.Pointer(FORTRAN_FLOAT);
+ var f_lwork = new FFI.Pointer(FORTRAN_INT);
+ f_lwork.putInt32(lwork);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+
+ LAPACK.sgesvd_(f_jobu, f_jobvt, f_m, f_n, f_a, f_lda, f_s, f_u, f_ldu, f_vt, f_ldvt,
+ f_work, f_lwork, f_info);
+
+ lwork = f_work.getFloat();
+ f_work = new FFI.Pointer(lwork * FORTRAN_FLOAT);
+ f_lwork.putInt32(lwork);
+
+ LAPACK.sgesvd_(f_jobu, f_jobvt, f_m, f_n, f_a, f_lda, f_s, f_u, f_ldu, f_vt, f_ldvt,
+ f_work, f_lwork, f_info);
+
+ svd = {
+ U: fortranArray.fortranArrayToJSMatrix(f_u, m, m),
+ S: fortranArray.fortranArrayToJSMatrix(f_s, n, n),
+ VT: fortranArray.fortranArrayToJSMatrix(f_vt, n, n)
+ };
+ });
+
+ return svd;
+}
+
+exports.sgeqrf = sgeqrf;
+exports.sgesvd = sgesvd;
+exports.sgetrf = sgetrf;
+exports.sgesv = sgesv;
+exports.qr = qr;
+exports.lu = lu;
+
+},{"./fortranArray":82,"node-ffi":83}],82:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var FFI = require('node-ffi');
+
+var elementSize = 4;
+
+function fortranArrayToJSMatrix(fortranArray, m, n) {
+ var array = [];
+ var a;
+ var rowWidth = elementSize * n;
+ var columnOffset = m * elementSize;
+
+ for(var i = 0; i < m; i++) {
+ var row = [];
+ var rowStart = i * elementSize;
+
+ for(var j = 0; j < n; j++) {
+ a = fortranArray.seek(columnOffset * j + rowStart);
+ row.push(a.getFloat());
+ }
+
+ array.push(row);
+ }
+
+ return array;
+}
+
+function jsMatrixToFortranArray(array) {
+ var m = array.length;
+ var n = array[0].length;
+ var fortranArrayStart = fortranArray = new FFI.Pointer(m * n * elementSize);
+ for(var j = 0; j < n; j++) {
+ for(var i = 0; i < m; i++) {
+ fortranArray.putFloat(array[i][j]);
+ fortranArray = fortranArray.seek(elementSize);
+ }
+ }
+
+ return fortranArrayStart;
+}
+
+function fortranArrayToJSArray(fortranArray, n) {
+ var array = [];
+
+ for(var i = 0; i < n; i++) {
+ array.push(fortranArray.getFloat());
+ fortranArray = fortranArray.seek(elementSize);
+ }
+
+ return array;
+}
+
+function fortranIntArrayToJSArray(fortranArray, n) {
+ var array = [];
+
+ for(var i = 0; i < n; i++) {
+ array.push(fortranArray.getInt32());
+ fortranArray = fortranArray.seek(4);
+ }
+
+ return array;
+}
+
+module.exports.fortranArrayToJSMatrix = fortranArrayToJSMatrix;
+module.exports.jsMatrixToFortranArray = jsMatrixToFortranArray;
+module.exports.fortranArrayToJSArray = fortranArrayToJSArray;
+module.exports.fortranIntArrayToJSArray = fortranIntArrayToJSArray;
+
+},{"node-ffi":83}],83:[function(require,module,exports){
+var ffi = module.exports
+
+ffi.Bindings = require('bindings')('ffi_bindings.node')
+
+ffi.VERSION = '0.5.0'
+
+ffi.TYPE_TO_POINTER_METHOD_MAP = {
+ 'uint8': 'UInt8'
+ , 'int8': 'Int8'
+ , 'uint8': 'UInt8'
+ , 'int16': 'Int16'
+ , 'uint16': 'UInt16'
+ , 'int32': 'Int32'
+ , 'uint32': 'UInt32'
+ , 'int64': 'Int64'
+ , 'uint64': 'UInt64'
+ , 'float': 'Float'
+ , 'double': 'Double'
+ , 'string': 'CString'
+ , 'pointer': 'Pointer'
+}
+
+ffi.SIZE_TO_POINTER_METHOD_MAP = {
+ 1: 'Int8'
+ , 2: 'Int16'
+ , 4: 'Int32'
+ , 8: 'Int64'
+}
+
+ffi.PLATFORM_LIBRARY_EXTENSIONS = {
+ 'linux': '.so'
+ , 'linux2': '.so'
+ , 'sunos': '.so'
+ , 'solaris':'.so'
+ , 'darwin': '.dylib'
+ , 'mac': '.dylib'
+ , 'win32': '.dll'
+}
+
+// A list of types with no hard C++ methods to read/write them
+ffi.NON_SPECIFIC_TYPES = {
+ 'byte': 'Byte'
+ , 'char': 'Char'
+ , 'uchar': 'UChar'
+ , 'short': 'Short'
+ , 'ushort': 'UShort'
+ , 'int': 'Int'
+ , 'uint': 'UInt'
+ , 'long': 'Long'
+ , 'ulong': 'ULong'
+ , 'longlong': 'LongLong'
+ , 'ulonglong': 'ULongLong'
+ , 'size_t': 'SizeT'
+}
+
+// ------------------------------------------------------
+// Miscellaneous Utility Functions
+// ------------------------------------------------------
+
+// Returns true if the passed type is a valid param type
+ffi.isValidParamType = function(type) {
+ return ffi.isStructType(type) || ffi.Bindings.FFI_TYPES[type] != undefined
+}
+
+// Returns true if the passed type is a valid return type
+ffi.isValidReturnType = function(type) {
+ return ffi.isValidParamType(type) || type == 'void'
+}
+
+ffi.derefValuePtr = function(type, ptr) {
+ if (!ffi.isValidParamType(type)) {
+ throw new Error('Invalid Type: ' + type)
+ }
+
+ if (ffi.isStructType(type)) {
+ return new type(ptr)
+ }
+
+ if (type == 'void') {
+ return null
+ }
+
+ var dptr = ptr
+
+ if (type == 'string') {
+ dptr = ptr.getPointer()
+ if (dptr.isNull()) {
+ return null
+ }
+ }
+
+ return dptr['get' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]]()
+}
+
+// Generates a derefValuePtr for a specific type
+ffi.derefValuePtrFunc = function(type) {
+ if (!ffi.isValidParamType(type)) {
+ throw new Error('Invalid Type: ' + type)
+ }
+
+ if (ffi.isStructType(type)) {
+ return function(ptr) {
+ return new type(ptr)
+ }
+ }
+
+ if (type == 'void') {
+ return function(ptr) { return null; }
+ }
+
+ var getf = 'get' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+
+ if (type == 'string') {
+ return function(ptr) {
+ var dptr = ptr.getPointer()
+ if (dptr.isNull()) {
+ return null
+ }
+ return dptr[getf]()
+ }
+ } else {
+ return function(ptr) {
+ return ptr[getf]()
+ }
+ }
+}
+
+/**
+ * Returns the byte size of the given type. `type` may be a string name
+ * identifier or a Struct type.
+ * Roughly equivalent to the C sizeof() operator.
+ */
+
+function sizeof (type) {
+ return ffi.isStructType(type)
+ ? type.__structInfo__.size
+ : ffi.Bindings.TYPE_SIZE_MAP[type]
+}
+ffi.sizeOf = ffi.sizeof = sizeof
+
+/**
+ * Returns the FFI_TYPE for the given `type`. May be a `Struct` type.
+ */
+
+function ffiTypeFor (type) {
+ return ffi.isStructType(type)
+ ? type._ffiType().ref()
+ : ffi.Bindings.FFI_TYPES[type]
+}
+ffi.ffiTypeFor = ffiTypeFor
+
+/**
+ * Returns true if the given `type` is a Struct type, false otherwise.
+ */
+
+function isStructType (type) {
+ return !!type.__isStructType__
+}
+ffi.isStructType = isStructType
+
+// Direct exports from the bindings
+ffi.free = ffi.Bindings.free
+ffi.CallbackInfo = ffi.Bindings.CallbackInfo
+
+// Include our other modules
+ffi.Pointer = require('./pointer')
+ffi.CIF = require('./cif')
+ffi.ForeignFunction = require('./foreign_function')
+ffi.DynamicLibrary = require('./dynamic_library')
+ffi.Library = require('./library')
+ffi.Callback = require('./callback')
+ffi.Struct = require('./struct')
+ffi.errno = require('./errno')
+
+/**
+ * Define the `FFI_TYPE` struct for use in JS.
+ * This struct type is used internally to define custom struct rtn/arg types.
+ */
+
+ffi.FFI_TYPE = ffi.Struct([
+ ['size_t', 'size']
+ , ['ushort', 'alignment']
+ , ['ushort', 'type']
+ , ['pointer','elements']
+])
+
+
+},{"./pointer":84,"./cif":85,"./foreign_function":86,"./dynamic_library":87,"./library":88,"./callback":89,"./struct":90,"./errno":91,"bindings":92}],84:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+ , util = require('util')
+ , Pointer = module.exports = ffi.Bindings.Pointer
+
+/**
+ * `attach()` is used for tracking dependencies among pointers to prevent
+ * garbage collection.
+ */
+
+Pointer.prototype.attach = function attach (friend) {
+ if (!Array.isArray(friend.__attached)) {
+ friend.__attached = []
+ }
+ friend.__attached.push(this)
+}
+
+/**
+ * Creates and returns a new Pointer that points to the same `address` as this
+ * pointer. Usefor for when you want to use a pointer as in iterator, but still
+ * want to retain this original pointer's address for use.
+ *
+ * The returned Pointer's `free` variable is set to `false` by default.
+ *
+ * @return {Pointer} A new Pointer independent of this one, but points to the same `address`.
+ */
+
+Pointer.prototype.clone = function clone () {
+ return this.seek(0)
+}
+
+/**
+ * This wraps _putPointer so it supports direct Struct writing.
+ */
+
+Pointer.prototype.putPointer = function putPointer (ptr, seek) {
+ var p = ptr && 'pointer' in ptr ? ptr.pointer : ptr
+ return this._putPointer(p, seek)
+}
+
+/**
+ * Custom inspect() function for easier inspecting of Pointers in the REPL
+ */
+
+Pointer.prototype.inspect = function inspect (depth, hidden, colors) {
+ return '<Pointer address="'
+ + util.inspect(this.address, hidden, depth - 1, colors)
+ +'" allocated="'
+ + util.inspect(this.allocated, hidden, depth - 1, colors)
+ +'" free="'
+ + util.inspect(this.free, hidden, depth - 1, colors)
+ +'">'
+}
+
+/**
+ * Returns `true` if the given argument is a `Pointer` instance.
+ * Returns `false` otherwise.
+ *
+ * @param {Object} p A pointer object (possibly...)
+ * @return {Boolean} `true` if the object is a `Pointer` instance
+ */
+
+Pointer.isPointer = function isPointer (p) {
+ return p instanceof Pointer
+}
+
+/**
+ * Allocates a pointer big enough to fit *type* and *value*, writes the value,
+ * and returns it.
+ */
+
+Pointer.alloc = function alloc (type, value) {
+ var size = type == 'string'
+ ? Buffer.byteLength(value, 'utf8') + 1
+ : ffi.sizeOf(type)
+
+ // malloc() the buffer
+ var ptr = new Pointer(size)
+
+ // write the value
+ ptr['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]](value)
+
+ if (type == 'string') {
+ // XXX: consider removing this string special case. it's dumb.
+ // we have to actually build an "in-between" pointer for strings
+ var dptr = new ffi.Pointer(ffi.Bindings.TYPE_SIZE_MAP.pointer)
+ ptr.attach(dptr) // save it from garbage collection
+ dptr.putPointer(ptr)
+ return dptr
+ }
+
+ return ptr
+}
+
+/**
+ * Appends the `NON_SPECIFIC_TYPES` to the `TYPE_TO_POINTER_METHOD_MAP` by
+ * discovering the method suffix by type size.
+ */
+
+Object.keys(ffi.NON_SPECIFIC_TYPES).forEach(function (type) {
+ var method = ffi.NON_SPECIFIC_TYPES[type]
+ , suffix = ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+
+ if (!suffix) {
+ // No hard mapping, determine by size
+ var size = ffi.sizeOf(type)
+ , szFunc = ffi.SIZE_TO_POINTER_METHOD_MAP[size]
+ , signed = type !== 'byte' && type != 'size_t' && type[0] != 'u'
+ suffix = (signed ? '' : 'U') + szFunc
+ }
+
+ ffi.TYPE_TO_POINTER_METHOD_MAP[type] = suffix
+
+ Pointer.prototype['put' + method] = Pointer.prototype['put' + suffix]
+ Pointer.prototype['get' + method] = Pointer.prototype['get' + suffix]
+})
+
+/**
+ * Define the `NULL` pointer. Used internally in other parts of node-ffi.
+ */
+
+Pointer.NULL = new Pointer(0)
+
+})(require("__browserify_buffer").Buffer)
+},{"util":40,"./ffi":83,"__browserify_buffer":61}],86:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+ , EventEmitter = require('events').EventEmitter
+ , POINTER_SIZE = ffi.Bindings.POINTER_SIZE
+
+/**
+ * Represents a foreign function in another library. Manages all of the aspects
+ * of function execution, including marshalling the data parameters for the
+ * function into native types and also unmarshalling the return from function
+ * execution.
+ */
+
+function ForeignFunction (ptr, returnType, types, async) {
+ if (!(this instanceof ForeignFunction)) {
+ return new ForeignFunction(ptr, returnType, types, async)
+ }
+
+ var self = this
+ , numArgs = types.length
+ , drefVal = ffi.derefValuePtrFunc(returnType)
+ , result = new ffi.Pointer(ffi.sizeOf(returnType))
+ , argsList = new ffi.Pointer(numArgs * POINTER_SIZE)
+ , cif = new ffi.CIF(returnType, types)
+ , caller = new ffi.Bindings.ForeignCaller(
+ cif.getPointer()
+ , ptr
+ , argsList
+ , result
+ , async
+ )
+
+ // XXX: Can't remove or shit segsaults... WTF....
+ this._ = cif
+
+ // allocate a storage area for each argument,
+ // then write the pointer to the argument list
+ var argputf = types.map(function (type, i) {
+ var argPtr = argsList.seek(i * POINTER_SIZE)
+
+ if (ffi.isStructType(type)) {
+ return function (val) {
+ argPtr.putPointer(val.ref())
+ }
+ }
+
+ var valPtr = new ffi.Pointer(ffi.sizeOf(type))
+ argPtr.putPointer(valPtr)
+
+ if (type == 'string') {
+ return function (val) {
+ var ptr = ffi.Pointer.NULL
+ if (typeof val !== 'undefined' && val !== null) {
+ var len = Buffer.byteLength(val, 'utf8')
+ ptr = new ffi.Pointer(len+1)
+ ptr.putCString(val)
+ }
+ valPtr.putPointer(ptr)
+ }
+ } else if (type == 'pointer') {
+ // Bypass the struct check for non-struct types
+ return function (val) {
+ valPtr._putPointer(val)
+ }
+ } else {
+ // Generic type putter function
+ var putCall = 'put' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+ return function (val) {
+ valPtr[putCall](val)
+ }
+ }
+ })
+
+ var proxy = function () {
+ self // XXX: if this isn't in here, callbacks segfault. what.. the.. f?
+
+ if (arguments.length !== numArgs) {
+ throw new Error('Function arguments did not meet specification')
+ }
+
+ // write arguments to storage areas
+ for (var i=0; i<numArgs; i++) {
+ argputf[i](arguments[i])
+ }
+
+ var r = caller.exec()
+
+ if (async) {
+ var emitter = new EventEmitter()
+ r.on('success', function () {
+ emitter.emit('success', drefVal(result))
+ })
+ return emitter
+ }
+
+ return drefVal(result)
+ }
+
+ // Backwards compat
+ // XXX: Remove soon...
+ proxy.getFunction = function () { return this }
+
+ return proxy
+}
+module.exports = ForeignFunction
+
+/**
+ * Deprecated. Just invoke ForeignFunction() instead.
+ */
+
+ForeignFunction.build = ForeignFunction
+
+})(require("__browserify_buffer").Buffer)
+},{"events":41,"./ffi":83,"__browserify_buffer":61}],87:[function(require,module,exports){
+var ffi = require('./ffi')
+ , read = require('fs').readFileSync
+ , dlopen = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlopen
+ , 'pointer', [ 'string', 'int32' ])
+ , dlclose = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlclose
+ , 'int32', [ 'pointer' ])
+ , dlsym = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlsym
+ , 'pointer', [ 'pointer', 'string' ])
+ , dlerror = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlerror
+ , 'string', [ ])
+
+/**
+ * `DynamicLibrary` loads and fetches function pointers for dynamic libraries
+ * (.so, .dylib, etc). After the libray's function pointer is acquired, then you
+ * call `get(symbol)` to retreive a pointer to an exported symbol. You need to
+ * call `get___()` on the pointer to dereference it into it's acutal value, or
+ * turn the pointer into a callable function with `ForeignFunction`.
+ */
+
+function DynamicLibrary (path, mode) {
+ this._handle = dlopen(path, mode || DynamicLibrary.FLAGS.RTLD_NOW)
+
+ if (this._handle.isNull()) {
+ var err = this.error()
+
+ // THIS CODE IS BASED ON GHC Trac ticket #2615
+ // http://hackage.haskell.org/trac/ghc/attachment/ticket/2615
+
+ // On some systems (e.g., Gentoo Linux) dynamic files (e.g. libc.so)
+ // contain linker scripts rather than ELF-format object code. This
+ // code handles the situation by recognizing the real object code
+ // file name given in the linker script.
+
+ // If an "invalid ELF header" error occurs, it is assumed that the
+ // .so file contains a linker script instead of ELF object code.
+ // In this case, the code looks for the GROUP ( ... ) linker
+ // directive. If one is found, the first file name inside the
+ // parentheses is treated as the name of a dynamic library and the
+ // code attempts to dlopen that file. If this is also unsuccessful,
+ // an error message is returned.
+
+ // see if the error message is due to an invalid ELF header
+ var match
+
+ if (match = err.match(/^(([^ \t()])+\.so([^ \t:()])*):([ \t])*invalid ELF header$/)) {
+ var content = read(match[1], 'ascii')
+ // try to find a GROUP ( ... ) command
+ if (match = content.match(/GROUP *\( *(([^ )])+)/)){
+ return DynamicLibrary.call(this, match[1], mode)
+ }
+ }
+
+ throw new Error('Dynamic Linking Error: ' + err)
+ }
+}
+module.exports = DynamicLibrary
+
+DynamicLibrary.FLAGS = {
+ 'RTLD_LAZY': 0x1
+ , 'RTLD_NOW': 0x2
+ , 'RTLD_LOCAL': 0x4
+ , 'RTLD_GLOBAL': 0x8
+}
+
+/**
+ * Close this library, returns the result of the dlclose() system function.
+ */
+
+DynamicLibrary.prototype.close = function () {
+ return dlclose(this._handle)
+}
+
+/**
+ * Get a symbol from this library, returns a Pointer for (memory address of) the symbol
+ */
+
+DynamicLibrary.prototype.get = function (symbol) {
+ var ptr = dlsym(this._handle, symbol)
+
+ if (ptr.isNull()) {
+ throw new Error('Dynamic Symbol Retrieval Error: ' + this.error())
+ }
+
+ return ptr
+}
+
+/**
+ * Returns the result of the dlerror() system function
+ */
+
+DynamicLibrary.prototype.error = function error () {
+ return dlerror()
+}
+
+},{"fs":42,"./ffi":83}],85:[function(require,module,exports){
+var ffi = require('./ffi')
+
+/**
+ * CIF provides a JS interface for the libffi "callback info" (CIF) structure.
+ * TODO: Deprecate this class. Turn this into a simple function that returns the
+ * CIF pointer.
+ */
+
+function CIF (rtype, types) {
+
+ if (!ffi.isValidReturnType(rtype)) {
+ throw new Error('Invalid Return Type: ' + rtype)
+ }
+
+ var numArgs = types.length
+
+ this._argtypesptr = new ffi.Pointer(types.length * ffi.Bindings.FFI_TYPE_SIZE)
+ this._rtypeptr = ffi.ffiTypeFor(rtype)
+
+ var tptr = this._argtypesptr.clone()
+
+ for (var i=0; i<numArgs; i++) {
+ var typeName = types[i]
+
+ if (!ffi.isValidParamType(typeName)) {
+ throw new Error('Invalid Type: ' + typeName)
+ }
+
+ var ffiType = ffi.ffiTypeFor(typeName)
+ tptr.putPointer(ffiType, true)
+ }
+
+ this.pointer = ffi.Bindings.prepCif(numArgs, this._rtypeptr, this._argtypesptr)
+}
+module.exports = CIF
+
+CIF.prototype.getPointer = function () { return this.pointer }
+
+},{"./ffi":83}],88:[function(require,module,exports){
+(function(process){var ffi = require('./ffi')
+ , EXT = ffi.PLATFORM_LIBRARY_EXTENSIONS[process.platform]
+ , RTLD_NOW = ffi.DynamicLibrary.FLAGS.RTLD_NOW
+
+/**
+ * Provides a friendly abstraction/API on-top of DynamicLibrary and
+ * ForeignFunction.
+ */
+function Library (libfile, funcs) {
+ if (libfile && libfile.indexOf(EXT) === -1) {
+ libfile += EXT
+ }
+
+ var lib = {}
+ , dl = new ffi.DynamicLibrary(libfile || null, RTLD_NOW)
+
+ if (funcs) {
+ Object.keys(funcs).forEach(function (func) {
+ var fptr = dl.get(func)
+ , info = funcs[func]
+
+ if (fptr.isNull()) {
+ throw new Error('DynamicLibrary "'+libfile+'" returned NULL function pointer for "'+func+'"')
+ }
+
+ var resultType = info[0]
+ , paramTypes = info[1]
+ , fopts = info[2]
+ , async = fopts ? fopts.async : false
+
+ lib[func] = ffi.ForeignFunction(fptr, resultType, paramTypes, async)
+ })
+ }
+
+ return lib
+}
+module.exports = Library
+
+})(require("__browserify_process"))
+},{"./ffi":83,"__browserify_process":43}],89:[function(require,module,exports){
+var ffi = require('./ffi')
+
+/**
+ * Turns a JavaScript function into a C function pointer.
+ * The function pointer may be used in other C functions that
+ * accept C callback functions.
+ * TODO: Deprecate this class, make this function return the callback pointer
+ * directly.
+ */
+
+function Callback (typedata, func) {
+ var retType = typedata[0]
+ , types = typedata[1]
+
+ this._cif = new ffi.CIF(retType, types)
+ this._info = new ffi.CallbackInfo(this._cif.getPointer(), function (retval, params) {
+ var pptr = params.clone()
+ var args = types.map(function (type) {
+ return ffi.derefValuePtr(type, pptr.getPointer(true))
+ })
+
+ // Invoke the user-given function
+ var result = func.apply(null, args)
+
+ if (retType !== 'void') {
+ retval['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[retType]](result)
+ }
+ })
+
+ this.pointer = this._info.pointer
+}
+module.exports = Callback
+
+/**
+ * Returns the callback function pointer. Deprecated. Use `callback.pointer`
+ * instead.
+ */
+
+Callback.prototype.getPointer = function getPointer () {
+ return this.pointer
+}
+
+},{"./ffi":83}],91:[function(require,module,exports){
+(function(process){
+/**
+ * Implementation of errno. This is a #define :/
+ * On Linux, it's a global variable with the symbol `errno`,
+ * but on Darwin it's a method execution called `__error`.
+ */
+
+var ffi = require('./ffi')
+ , errnoPtr = null
+
+if (process.platform == 'darwin' || process.platform == 'mac') {
+ var __error = new ffi.DynamicLibrary().get('__error')
+ errnoPtr = ffi.ForeignFunction(__error, 'pointer', [])
+} else if (process.platform == 'win32') {
+ var _errno = new ffi.DynamicLibrary('msvcrt.dll').get('_errno')
+ errnoPtr = ffi.ForeignFunction(_errno, 'pointer', [])
+} else {
+ var errnoGlobal = new ffi.DynamicLibrary().get('errno');
+ errnoPtr = function () { return errnoGlobal }
+}
+
+function errno () {
+ return errnoPtr().getInt32()
+}
+module.exports = errno
+
+})(require("__browserify_process"))
+},{"./ffi":83,"__browserify_process":43}],90:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+
+/**
+ * An interface for modeling and instantiating C-style data structures. This is
+ * not a constructor per-say, but a constructor generator. It takes an array of
+ * tuples, the left side being the type, and the right side being a field name.
+ * The order should be the same order it would appear in the C-style struct
+ * definition. It returns a function that can be used to construct an object that
+ * reads and writes to the data structure using properties specified by the
+ * initial field list.
+ *
+ * Example:
+ *
+ * var PasswordEntry = ffi.Struct(
+ * ['string', 'username']
+ * , ['string', 'password']
+ * )
+ * var pwd = new PasswordEntry()
+ * pwd.username = 'ricky'
+ * pwd.password = 'rbransonlovesnode.js'
+ */
+
+function Struct () {
+ var struct = {}
+ , fields = arguments
+
+ // Legacy API, pass an Array of Arrays
+ if (arguments.length > 0) {
+ var firstArg = arguments[0]
+ if (Array.isArray(firstArg) && firstArg.length > 0 && Array.isArray(firstArg[0])) {
+ fields = firstArg
+ }
+ }
+
+ struct.struct = {}
+ struct.members = []
+ struct.size = 0
+ struct.alignment = 0
+
+ function read (ptr, name) {
+ var info = struct.struct[name]
+ var fptr = ptr.seek(info.offset)
+
+ if (ffi.isStructType(info.type)) {
+ return new info.type(fptr)
+ } else if (info.type == 'string') {
+ return fptr.getPointer().getCString()
+ } else {
+ return fptr['get' + ffi.TYPE_TO_POINTER_METHOD_MAP[info.type]]()
+ }
+ }
+
+ function write (ptr, name, val) {
+ var info = struct.struct[name]
+ var fptr = ptr.seek(info.offset)
+
+ if (ffi.isStructType(info.type)) {
+ new info.type(fptr, val)
+ } else if (info.type == 'string') {
+ if (typeof val == 'undefined' || val === null) {
+ return fptr.putPointer(ffi.Pointer.NULL)
+ }
+ var len = Buffer.byteLength(val, 'utf8')
+ var strPtr = new ffi.Pointer(len+1)
+ strPtr.putCString(val)
+ fptr.putPointer(strPtr)
+ } else {
+ return fptr['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[info.type]](val)
+ }
+ }
+
+ // Read the fields list and apply all the fields to the struct
+ for (var i=0, len=fields.length; i<len; i++) {
+ var field = fields[i]
+ , type = field[0]
+ , name = field[1]
+ //console.log(name)
+
+ if (name in struct.struct) {
+ throw new Error('Error when constructing Struct: ' + name + ' field specified twice!')
+ }
+
+ var stype = ffi.isStructType(type)
+ , sz = ffi.sizeOf(type)
+ , asz = stype ? type.__structInfo__.alignment : sz
+ //console.log(' size:',sz)
+ //console.log(' offset:', struct.size)
+ //console.log(' asz:',asz)
+
+ struct.alignment = Math.max(struct.alignment, asz)
+
+ var left = struct.size % struct.alignment
+ , offset = struct.size
+
+ if (sz > left) {
+ offset += left
+ }
+
+ struct.size = offset + sz
+
+ struct.struct[name] = {
+ name: name
+ , type: type
+ , size: sz
+ , offset: offset
+ }
+ struct.members.push(name)
+ }
+ //console.log('before left:', struct.size, struct.alignment)
+ var left = struct.size % struct.alignment
+ if (left) {
+ struct.size += struct.alignment - left
+ }
+ //console.log('after left:', struct.size)
+
+ var constructor = function (arg, data) {
+ if (!(this instanceof constructor)) {
+ return new constructor(arg, data)
+ }
+ if (ffi.Pointer.isPointer(arg)) {
+ this.pointer = arg
+ arg = data
+ } else {
+ this.pointer = new ffi.Pointer(struct.size)
+ }
+ if (arg) {
+ for (var key in arg) {
+ write(this.pointer, key, arg[key])
+ }
+ }
+ }
+
+ // Function to return an `FFI_TYPE` struct instance from this struct
+ constructor._ffiType = function ffiType () {
+ // return cached if available
+ if (this._ffiTypeCached) {
+ return this._ffiTypeCached
+ }
+ var props = this.__structInfo__.struct
+ , propNames = Object.keys(props)
+ , numProps = propNames.length
+ var t = new ffi.FFI_TYPE()
+ t.size = 0
+ t.alignment = 0
+ t.type = 13 // FFI_TYPE_STRUCT
+ t.elements = new ffi.Pointer(ffi.Bindings.POINTER_SIZE * (numProps+1))
+ var tptr = t.elements.clone()
+ for (var i=0; i<numProps; i++) {
+ var prop = props[propNames[i]]
+ tptr.putPointer(ffi.ffiTypeFor(prop.type), true)
+ }
+ // Final NULL pointer to terminate the Array
+ tptr.putPointer(ffi.Pointer.NULL)
+ return this._ffiTypeCached = t
+ }
+
+ // Add getters & setters for each field to the constructor's prototype
+ struct.members.forEach(function (field) {
+ Object.defineProperty(constructor.prototype, field, {
+ get: function () {
+ return read(this.pointer, field)
+ }
+ , set: function (val) {
+ write(this.pointer, field, val)
+ }
+ , enumerable: true
+ , configurable: true
+ })
+ })
+
+ constructor.prototype.__isStructInstance__ == true
+ constructor.prototype.__structInfo__ = struct
+ constructor.prototype.ref = function ref () {
+ return this.pointer
+ }
+
+ constructor.__isStructType__ = true
+ constructor.__structInfo__ = struct
+
+ return constructor
+}
+module.exports = Struct
+
+})(require("__browserify_buffer").Buffer)
+},{"./ffi":83,"__browserify_buffer":61}],92:[function(require,module,exports){
+(function(process,__filename){
+/**
+ * Module dependencies.
+ */
+
+var fs = require('fs')
+ , path = require('path')
+ , join = path.join
+ , dirname = path.dirname
+ , exists = fs.existsSync || path.existsSync
+ , defaults = {
+ arrow: process.env.NODE_BINDINGS_ARROW || ' → '
+ , compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled'
+ , platform: process.platform
+ , arch: process.arch
+ , version: process.versions.node
+ , bindings: 'bindings.node'
+ , try: [
+ // node-gyp's linked version in the "build" dir
+ [ 'module_root', 'build', 'bindings' ]
+ // node-waf and gyp_addon (a.k.a node-gyp)
+ , [ 'module_root', 'build', 'Debug', 'bindings' ]
+ , [ 'module_root', 'build', 'Release', 'bindings' ]
+ // Debug files, for development (legacy behavior, remove for node v0.9)
+ , [ 'module_root', 'out', 'Debug', 'bindings' ]
+ , [ 'module_root', 'Debug', 'bindings' ]
+ // Release files, but manually compiled (legacy behavior, remove for node v0.9)
+ , [ 'module_root', 'out', 'Release', 'bindings' ]
+ , [ 'module_root', 'Release', 'bindings' ]
+ // Legacy from node-waf, node <= 0.4.x
+ , [ 'module_root', 'build', 'default', 'bindings' ]
+ // Production "Release" buildtype binary (meh...)
+ , [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ]
+ ]
+ }
+
+/**
+ * The main `bindings()` function loads the compiled bindings for a given module.
+ * It uses V8's Error API to determine the parent filename that this function is
+ * being invoked from, which is then used to find the root directory.
+ */
+
+function bindings (opts) {
+
+ // Argument surgery
+ if (typeof opts == 'string') {
+ opts = { bindings: opts }
+ } else if (!opts) {
+ opts = {}
+ }
+ opts.__proto__ = defaults
+
+ // Get the module root
+ if (!opts.module_root) {
+ opts.module_root = exports.getRoot(exports.getFileName())
+ }
+
+ // Ensure the given bindings name ends with .node
+ if (path.extname(opts.bindings) != '.node') {
+ opts.bindings += '.node'
+ }
+
+ var tries = []
+ , i = 0
+ , l = opts.try.length
+ , n
+ , b
+ , err
+
+ for (; i<l; i++) {
+ n = join.apply(null, opts.try[i].map(function (p) {
+ return opts[p] || p
+ }))
+ tries.push(n)
+ try {
+ b = opts.path ? require.resolve(n) : require(n)
+ if (!opts.path) {
+ b.path = n
+ }
+ return b
+ } catch (e) {
+ if (!/not find/i.test(e.message)) {
+ throw e
+ }
+ }
+ }
+
+ err = new Error('Could not locate the bindings file. Tried:\n'
+ + tries.map(function (a) { return opts.arrow + a }).join('\n'))
+ err.tries = tries
+ throw err
+}
+module.exports = exports = bindings
+
+
+/**
+ * Gets the filename of the JavaScript file that invokes this function.
+ * Used to help find the root directory of a module.
+ */
+
+exports.getFileName = function getFileName () {
+ var origPST = Error.prepareStackTrace
+ , dummy = {}
+ , fileName
+
+ Error.prepareStackTrace = function (e, st) {
+ for (var i=0, l=st.length; i<l; i++) {
+ fileName = st[i].getFileName()
+ if (fileName !== __filename) {
+ return
+ }
+ }
+ }
+
+ // run the 'prepareStackTrace' function above
+ Error.captureStackTrace(dummy)
+ dummy.stack
+
+ // cleanup
+ Error.prepareStackTrace = origPST
+
+ return fileName
+}
+
+/**
+ * Gets the root directory of a module, given an arbitrary filename
+ * somewhere in the module tree. The "root directory" is the directory
+ * containing the `package.json` file.
+ *
+ * In: /home/nate/node-native-module/lib/index.js
+ * Out: /home/nate/node-native-module
+ */
+
+exports.getRoot = function getRoot (file) {
+ var dir = dirname(file)
+ , prev
+ while (true) {
+ if (dir === '.') {
+ // Avoids an infinite loop in rare cases, like the REPL
+ dir = process.cwd()
+ }
+ if (exists(join(dir, 'package.json')) || exists(join(dir, 'node_modules'))) {
+ // Found the 'package.json' file or 'node_modules' dir; we're done
+ return dir
+ }
+ if (prev === dir) {
+ // Got to the top
+ throw new Error('Could not find module root given file: "' + file
+ + '". Do you have a `package.json` file? ')
+ }
+ // Try the parent dir next
+ prev = dir
+ dir = join(dir, '..')
+ }
+}
+
+})(require("__browserify_process"),"/node_modules/lapack/node_modules/node-ffi/node_modules/bindings/bindings.js")
+},{"fs":42,"path":65,"__browserify_process":43}]},{},[1])
+; \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/nattest1.js b/exampleData/ruleSets/language-processing/natural/nattest1.js
new file mode 100644
index 0000000..bcb8712
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/nattest1.js
@@ -0,0 +1,66 @@
+exports.name = "Common words";
+exports.description = "Identifies rare word use (words not in the 1000 most common English word list).";
+
+var natural = require('natural');
+
+var stemmer = natural.PorterStemmer;
+var tokenizer = new natural.TreebankWordTokenizer();
+
+var getTextNodesIn = function (node, includeWhitespaceNodes) {
+ var textNodes = [], whitespace = /^\s*$/;
+
+ function getTextNodes(node) {
+ if (node.nodeType == 3) {
+ if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {
+ textNodes.push(node);
+ }
+ } else {
+ for (var i = 0, len = node.childNodes.length; i < len; ++i) {
+ getTextNodes(node.childNodes[i]);
+ }
+ }
+ }
+
+ getTextNodes(node);
+ return textNodes;
+};
+
+var commonWord = function(word) {
+ return _.contains(words, word);
+};
+
+var isPunctuation = function(str) {
+ return _.contains(['&', '%', '(', ')', ';', ':', '.', ',', '"', "'", '`', '!', '?' ], str);
+};
+
+
+var markWords = function(obj, report) {
+
+ var mergeFn = function(obj, tok) {
+ if (commonWord(tok) || isPunctuation(tok) || _.isNumber(tok)) {
+ obj.append(tok + ' ');
+ } else {
+ // var newObj = "<span style='background-color: red'>"+tok+"</span> ");
+ var newObj = $("<span>"+tok+"</span> ");
+ obj.append(newObj);
+ report.error("The word '"+tok+"' is uncommon", newObj);
+ }
+ return obj;
+ };
+
+ var toks = tokenizer.tokenize(obj.text());
+ var rawObj = $('<p></p>', {id: 'text'});
+ var newObj = _.reduce(toks, mergeFn , rawObj);
+
+ obj.replaceWith(newObj);
+};
+
+exports.rule = function(report) {
+ $5('body').each(
+ function(i){
+ var nodes = getTextNodesIn($(this));
+ _.map(nodes, function(n){
+ markWords(n, report);
+ });
+ });
+}; \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/natural-test1.html b/exampleData/ruleSets/language-processing/natural/natural-test1.html
new file mode 100644
index 0000000..cfeb995
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/natural-test1.html
@@ -0,0 +1,31 @@
+<html>
+<head>
+<script src="underscore-min.js"></script>
+<script src="jquery.js"></script>
+<!-- <script src="1-1000.js"></script> -->
+<!-- <script src="nattest1-gen.js"></script> -->
+<script src="upGoerFive-gen.js"></script>
+<script>
+</script>
+
+<style>
+</style>
+
+</head>
+<body>
+<p id="text">
+Bonaparte has been as profuse in his disposal of the Imperial
+diadem of Germany, as in his promises of the papal tiara of Rome. The
+Houses of Austria and Brandenburgh, the Electors of Bavaria and Baden,
+have by turns been cajoled into a belief of his exclusive support towards
+obtaining it at the first vacancy. Those, however, who have paid
+attention to his machinations, and studied his actions; who remember his
+pedantic affectation of being considered a modern, or rather a second
+Charlemagne; and who have traced his steps through the labyrinth of folly
+and wickedness, of meanness and greatness, of art, corruption, and
+policy, which have seated him on the present throne, can entertain little
+doubt but that he is seriously bent on seizing and adding the sceptre of
+Germany to the crowns of France and Italy.
+</p>
+</body>
+</html>
diff --git a/exampleData/ruleSets/language-processing/natural/underscore-min.js b/exampleData/ruleSets/language-processing/natural/underscore-min.js
new file mode 100644
index 0000000..c1d9d3a
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/underscore-min.js
@@ -0,0 +1 @@
+(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index<t.index?-1:1}),"value")};var F=function(n,t,r,e){var u={},i=k(t||w.identity);return A(n,function(t,a){var o=i.call(r,t,a,n);e(u,o,t)}),u};w.groupBy=function(n,t,r){return F(n,t,r,function(n,t,r){(w.has(n,t)?n[t]:n[t]=[]).push(r)})},w.countBy=function(n,t,r){return F(n,t,r,function(n,t){w.has(n,t)||(n[t]=0),n[t]++})},w.sortedIndex=function(n,t,r,e){r=null==r?w.identity:k(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/upGoerFive-gen.js b/exampleData/ruleSets/language-processing/natural/upGoerFive-gen.js
new file mode 100644
index 0000000..9af1b3d
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/upGoerFive-gen.js
@@ -0,0 +1,17930 @@
+;(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
+(function(){var natural = require('natural');
+
+exports = {};
+exports.name = "Common words";
+exports.description = "Identifies rare word use (words not in the 1000 most common English word list).";
+
+// var words = require('./1-1000');
+
+words = ['the', 'of', 'to', 'and', 'a', 'in', 'is', 'it',
+'you', 'that', 'he', 'was', 'for', 'on', 'are', 'with', 'as', 'I',
+'his', 'they', 'be', 'at', 'one', 'have', 'this', 'from', 'or', 'had',
+'by', 'hot', 'word', 'but', 'what', 'some', 'we', 'can', 'out',
+'other', 'were', 'all', 'there', 'when', 'up', 'use', 'your', 'how',
+'said', 'an', 'each', 'she', 'which', 'do', 'their', 'time', 'if',
+'will', 'way', 'about', 'many', 'then', 'them', 'write', 'would',
+'like', 'so', 'these', 'her', 'long', 'make', 'thing', 'see', 'him',
+'two', 'has', 'look', 'more', 'day', 'could', 'go', 'come', 'did',
+'number', 'sound', 'no', 'most', 'people', 'my', 'over', 'know',
+'water', 'than', 'call', 'first', 'who', 'may', 'down', 'side',
+'been', 'now', 'find', 'any', 'new', 'work', 'part', 'take', 'get',
+'place', 'made', 'live', 'where', 'after', 'back', 'little', 'only',
+'round', 'man', 'year', 'came', 'show', 'every', 'good', 'me', 'give',
+'our', 'under', 'name', 'very', 'through', 'just', 'form', 'sentence',
+'great', 'think', 'say', 'help', 'low', 'line', 'differ', 'turn',
+'cause', 'much', 'mean', 'before', 'move', 'right', 'boy', 'old',
+'too', 'same', 'tell', 'does', 'set', 'three', 'want', 'air', 'well',
+'also', 'play', 'small', 'end', 'put', 'home', 'read', 'hand', 'port',
+'large', 'spell', 'add', 'even', 'land', 'here', 'must', 'big',
+'high', 'such', 'follow', 'act', 'why', 'ask', 'men', 'change',
+'went', 'light', 'kind', 'off', 'need', 'house', 'picture', 'try',
+'us', 'again', 'animal', 'point', 'mother', 'world', 'near', 'build',
+'self', 'earth', 'father', 'head', 'stand', 'own', 'page', 'should',
+'country', 'found', 'answer', 'school', 'grow', 'study', 'still',
+'learn', 'plant', 'cover', 'food', 'sun', 'four', 'between', 'state',
+'keep', 'eye', 'never', 'last', 'let', 'thought', 'city', 'tree',
+'cross', 'farm', 'hard', 'start', 'might', 'story', 'saw', 'far',
+'sea', 'draw', 'left', 'late', 'run', 'don\'t', 'while', 'press',
+'close', 'night', 'real', 'life', 'few', 'north', 'open', 'seem',
+'together', 'next', 'white', 'children', 'begin', 'got', 'walk',
+'example', 'ease', 'paper', 'group', 'always', 'music', 'those',
+'both', 'mark', 'often', 'letter', 'until', 'mile', 'river', 'car',
+'feet', 'care', 'second', 'book', 'carry', 'took', 'science', 'eat',
+'room', 'friend', 'began', 'idea', 'fish', 'mountain', 'stop', 'once',
+'base', 'hear', 'horse', 'cut', 'sure', 'watch', 'color', 'face',
+'wood', 'main', 'enough', 'plain', 'girl', 'usual', 'young', 'ready',
+'above', 'ever', 'red', 'list', 'though', 'feel', 'talk', 'bird',
+'soon', 'body', 'dog', 'family', 'direct', 'pose', 'leave', 'song',
+'measure', 'door', 'product', 'black', 'short', 'numeral', 'class',
+'wind', 'question', 'happen', 'complete', 'ship', 'area', 'half',
+'rock', 'order', 'fire', 'south', 'problem', 'piece', 'told', 'knew',
+'pass', 'since', 'top', 'whole', 'king', 'space', 'heard', 'best',
+'hour', 'better', 'true .', 'during', 'hundred', 'five', 'remember',
+'step', 'early', 'hold', 'west', 'ground', 'interest', 'reach',
+'fast', 'verb', 'sing', 'listen', 'six', 'table', 'travel', 'less',
+'morning', 'ten', 'simple', 'several', 'vowel', 'toward', 'war',
+'lay', 'against', 'pattern', 'slow', 'center', 'love', 'person',
+'money', 'serve', 'appear', 'road', 'map', 'rain', 'rule', 'govern',
+'pull', 'cold', 'notice', 'voice', 'unit', 'power', 'town', 'fine',
+'certain', 'fly', 'fall', 'lead', 'cry', 'dark', 'machine', 'note',
+'wait', 'plan', 'figure', 'star', 'box', 'noun', 'field', 'rest',
+'correct', 'able', 'pound', 'done', 'beauty', 'drive', 'stood',
+'contain', 'front', 'teach', 'week', 'final', 'gave', 'green', 'oh',
+'quick', 'develop', 'ocean', 'warm', 'free', 'minute', 'strong',
+'special', 'mind', 'behind', 'clear', 'tail', 'produce', 'fact',
+'street', 'inch', 'multiply', 'nothing', 'course', 'stay', 'wheel',
+'full', 'force', 'blue', 'object', 'decide', 'surface', 'deep',
+'moon', 'island', 'foot', 'system', 'busy', 'test', 'record', 'boat',
+'common', 'gold', 'possible', 'plane', 'stead', 'dry', 'wonder',
+'laugh', 'thousand', 'ago', 'ran', 'check', 'game', 'shape', 'equate',
+'miss', 'brought', 'heat', 'snow', 'tire', 'bring', 'yes', 'distant',
+'fill', 'east', 'paint', 'language', 'among', 'grand', 'ball', 'yet',
+'wave', 'drop', 'heart', 'am', 'present', 'heavy', 'dance', 'engine',
+'position', 'arm', 'wide', 'sail', 'material', 'size', 'vary',
+'settle', 'speak', 'weight', 'general', 'ice', 'matter', 'circle',
+'pair', 'include', 'divide', 'syllable', 'felt', 'perhaps', 'pick',
+'sudden', 'count', 'square', 'reason', 'length', 'represent', 'art',
+'subject', 'region', 'energy', 'hunt', 'probable', 'bed', 'brother',
+'egg', 'ride', 'cell', 'believe', 'fraction', 'forest', 'sit', 'race',
+'window', 'store', 'summer', 'train', 'sleep', 'prove', 'lone', 'leg',
+'exercise', 'wall', 'catch', 'mount', 'wish', 'sky', 'board', 'joy',
+'winter', 'sat', 'written', 'wild', 'instrument', 'kept', 'glass',
+'grass', 'cow', 'job', 'edge', 'sign', 'visit', 'past', 'soft', 'fun',
+'bright', 'gas', 'weather', 'month', 'million', 'bear', 'finish',
+'happy', 'hope', 'flower', 'clothe', 'strange', 'gone', 'jump',
+'baby', 'eight', 'village', 'meet', 'root', 'buy', 'raise', 'solve',
+'metal', 'whether', 'push', 'seven', 'paragraph', 'third', 'shall',
+'held', 'hair', 'describe', 'cook', 'floor', 'either', 'result',
+'burn', 'hill', 'safe', 'cat', 'century', 'consider', 'type', 'law',
+'bit', 'coast', 'copy', 'phrase', 'silent', 'tall', 'sand', 'soil',
+'roll', 'temperature', 'finger', 'industry', 'value', 'fight', 'lie',
+'beat', 'excite', 'natural', 'view', 'sense', 'ear', 'else', 'quite',
+'broke', 'case', 'middle', 'kill', 'son', 'lake', 'moment', 'scale',
+'loud', 'spring', 'observe', 'child', 'straight', 'consonant',
+'nation', 'dictionary', 'milk', 'speed', 'method', 'organ', 'pay',
+'age', 'section', 'dress', 'cloud', 'surprise', 'quiet', 'stone',
+'tiny', 'climb', 'cool', 'design', 'poor', 'lot', 'experiment',
+'bottom', 'key', 'iron', 'single', 'stick', 'flat', 'twenty', 'skin',
+'smile', 'crease', 'hole', 'trade', 'melody', 'trip', 'office',
+'receive', 'row', 'mouth', 'exact', 'symbol', 'die', 'least',
+'trouble', 'shout', 'except', 'wrote', 'seed', 'tone', 'join',
+'suggest', 'clean', 'break', 'lady', 'yard', 'rise', 'bad', 'blow',
+'oil', 'blood', 'touch', 'grew', 'cent', 'mix', 'team', 'wire',
+'cost', 'lost', 'brown', 'wear', 'garden', 'equal', 'sent', 'choose',
+'fell', 'fit', 'flow', 'fair', 'bank', 'collect', 'save', 'control',
+'decimal', 'gentle', 'woman', 'captain', 'practice', 'separate',
+'difficult', 'doctor', 'please', 'protect', 'noon', 'whose', 'locate',
+'ring', 'character', 'insect', 'caught', 'period', 'indicate',
+'radio', 'spoke', 'atom', 'human', 'history', 'effect', 'electric',
+'expect', 'crop', 'modern', 'element', 'hit', 'student', 'corner',
+'party', 'supply', 'bone', 'rail', 'imagine', 'provide', 'agree',
+'thus', 'capital', 'won\'t', 'chair', 'danger', 'fruit', 'rich',
+'thick', 'soldier', 'process', 'operate', 'guess', 'necessary',
+'sharp', 'wing', 'create', 'neighbor', 'wash', 'bat', 'rather',
+'crowd', 'corn', 'compare', 'poem', 'string', 'bell', 'depend',
+'meat', 'rub', 'tube', 'famous', 'dollar', 'stream', 'fear', 'sight',
+'thin', 'triangle', 'planet', 'hurry', 'chief', 'colony', 'clock',
+'mine', 'tie', 'enter', 'major', 'fresh', 'search', 'send', 'yellow',
+'gun', 'allow', 'print', 'dead', 'spot', 'desert', 'suit', 'current',
+'lift', 'rose', 'continue', 'block', 'chart', 'hat', 'sell',
+'success', 'company', 'subtract', 'event', 'particular', 'deal',
+'swim', 'term', 'opposite', 'wife', 'shoe', 'shoulder', 'spread',
+'arrange', 'camp', 'invent', 'cotton', 'born', 'determine', 'quart',
+'nine', 'truck', 'noise', 'level', 'chance', 'gather', 'shop',
+'stretch', 'throw', 'shine', 'property', 'column', 'molecule',
+'select', 'wrong', 'gray', 'repeat', 'require', 'broad', 'prepare',
+'salt', 'nose', 'plural', 'anger', 'claim', 'continent', 'oxygen',
+'sugar', 'death', 'pretty', 'skill', 'women', 'season', 'solution',
+'magnet', 'silver', 'thank', 'branch', 'match', 'suffix',
+'especially', 'fig', 'afraid', 'huge', 'sister', 'steel', 'discuss',
+'forward', 'similar', 'guide', 'experience', 'score', 'apple',
+'bought', 'led', 'pitch', 'coat', 'mass', 'card', 'band', 'rope',
+'slip', 'win', 'dream', 'evening', 'condition', 'feed', 'tool',
+']total', 'basic', 'smell', 'valley', 'nor', 'double', 'seat',
+'arrive', 'master', 'track', 'parent', 'shore', 'division', 'sheet',
+'substance', 'favor', 'connect', 'post', 'spend', 'chord', 'fat',
+'glad', 'original', 'share', 'station', 'dad', 'bread', 'charge',
+'proper', 'bar', 'offer', 'segment', 'slave', 'duck', 'instant',
+'market', 'degree', 'populate', 'chick', 'dear', 'enemy', 'reply',
+'drink', 'occur', 'support', 'speech', 'nature', 'range', 'steam',
+'motion', 'path', 'liquid', 'log', 'meant', 'quotient', 'teeth',
+'shell', 'neck' ];
+
+var stemmer = natural.PorterStemmer;
+var tokenizer = new natural.TreebankWordTokenizer();
+
+var getTextNodesIn = function (node, includeWhitespaceNodes) {
+ var textNodes = [], whitespace = /^\s*$/;
+
+ function getTextNodes(node) {
+ if (node.nodeType == 3) {
+ if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {
+ textNodes.push(node);
+ }
+ } else {
+ for (var i = 0, len = node.childNodes.length; i < len; ++i) {
+ getTextNodes(node.childNodes[i]);
+ }
+ }
+ }
+
+ getTextNodes(node);
+ return textNodes;
+};
+
+var isCommonWord = function(word) {
+ return _.contains(words, word);
+};
+
+var isPunctuation = function(str) {
+ return _.contains(['&', '%', '(', ')', ';', ':', '.', ',', '"', "'", '`', '!', '?' ], str);
+};
+
+
+var markWords = function(obj, report) {
+
+ var mergeFn = function(obj, tok) {
+ if (isCommonWord(tok) || isPunctuation(tok) || _.isNumber(tok)) {
+ obj.append(tok + ' ');
+ } else {
+ // var newObj = "<span style='background-color: red'>"+tok+"</span> ");
+ var newObj = $("<span>"+tok+"</span> ");
+ obj.append(newObj);
+ report.error("The word '"+tok+"' is uncommon", newObj);
+ }
+ return obj;
+ };
+
+ var toks = tokenizer.tokenize(obj.text());
+
+ var uncommonWords = _.filter(toks, isCommonWord);
+ _.map(uncommonWords, function(w) {
+ report.error("The word '"+w+"' is uncommon", newObj);
+ });
+
+// var rawObj = $('<p></p>', {id: 'text'});
+// var newObj = _.reduce(toks, mergeFn , rawObj);
+
+// obj.replaceWith(newObj);
+};
+
+exports.rule = function(report) {
+ report.error("bork");
+ console.log("checking for rare words");
+ fiveui.query('body').each(
+ function(i){
+ var nodes = getTextNodesIn($(this));
+ _.map(nodes, function(n){
+ console.log(n);
+ markWords(n, report);
+ });
+ });
+};
+})()
+},{"natural":2}],2:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+exports.SoundEx = require('./phonetics/soundex');
+exports.Metaphone = require('./phonetics/metaphone');
+exports.DoubleMetaphone = require('./phonetics/double_metaphone');
+exports.SoundExDM = require('./phonetics/dm_soundex');
+exports.PorterStemmer = require('./stemmers/porter_stemmer');
+exports.PorterStemmerFa = require('./stemmers/porter_stemmer_fa');
+exports.PorterStemmerRu = require('./stemmers/porter_stemmer_ru');
+exports.PorterStemmerEs = require('./stemmers/porter_stemmer_es');
+exports.PorterStemmerIt = require('./stemmers/porter_stemmer_it');
+exports.LancasterStemmer = require('./stemmers/lancaster_stemmer');
+exports.StemmerJa = require('./stemmers/stemmer_ja');
+exports.AggressiveTokenizerFa = require('./tokenizers/aggressive_tokenizer_fa');
+exports.AggressiveTokenizerRu = require('./tokenizers/aggressive_tokenizer_ru');
+exports.AggressiveTokenizerEs = require('./tokenizers/aggressive_tokenizer_es');
+exports.AggressiveTokenizerIt = require('./tokenizers/aggressive_tokenizer_it');
+exports.AggressiveTokenizer = require('./tokenizers/aggressive_tokenizer');
+exports.RegexpTokenizer = require('./tokenizers/regexp_tokenizer').RegexpTokenizer;
+exports.WordTokenizer = require('./tokenizers/regexp_tokenizer').WordTokenizer;
+exports.WordPunctTokenizer = require('./tokenizers/regexp_tokenizer').WordPunctTokenizer;
+exports.TreebankWordTokenizer = require('./tokenizers/treebank_word_tokenizer');
+exports.TokenizerJa = require('./tokenizers/tokenizer_ja');
+exports.BayesClassifier = require('./classifiers/bayes_classifier');
+exports.LogisticRegressionClassifier = require('./classifiers/logistic_regression_classifier');
+exports.NounInflector = require('./inflectors/noun_inflector');
+exports.NounInflectorFr = require('./inflectors/fr/noun_inflector');
+exports.NounInflectorJa = require('./inflectors/ja/noun_inflector');
+exports.PresentVerbInflector = require('./inflectors/present_verb_inflector');
+exports.CountInflector = require('./inflectors/count_inflector');
+exports.WordNet = require('./wordnet/wordnet');
+exports.TfIdf = require('./tfidf/tfidf');
+exports.SentenceAnalyzer = require('./analyzers/sentence_analyzer');
+exports.stopwords = require('./util/stopwords').words;
+exports.NGrams = require('./ngrams/ngrams');
+exports.JaroWinklerDistance = require('./distance/jaro-winkler_distance');
+exports.LevenshteinDistance = require('./distance/levenshtein_distance');
+exports.DiceCoefficient = require('./distance/dice_coefficient');
+exports.normalize_ja = require('./normalizers/normalizer_ja').normalize_ja;
+exports.removeDiacritics = require('./normalizers/remove_diacritics');
+exports.transliterate_ja = require('./transliterators/ja');
+
+},{"./phonetics/soundex":3,"./phonetics/metaphone":4,"./phonetics/double_metaphone":5,"./phonetics/dm_soundex":6,"./stemmers/porter_stemmer":7,"./stemmers/porter_stemmer_fa":8,"./stemmers/porter_stemmer_ru":9,"./stemmers/porter_stemmer_it":10,"./stemmers/porter_stemmer_es":11,"./stemmers/lancaster_stemmer":12,"./stemmers/stemmer_ja":13,"./tokenizers/aggressive_tokenizer_ru":14,"./tokenizers/aggressive_tokenizer_fa":15,"./tokenizers/aggressive_tokenizer_es":16,"./tokenizers/aggressive_tokenizer_it":17,"./tokenizers/aggressive_tokenizer":18,"./tokenizers/regexp_tokenizer":19,"./tokenizers/tokenizer_ja":20,"./tokenizers/treebank_word_tokenizer":21,"./classifiers/bayes_classifier":22,"./classifiers/logistic_regression_classifier":23,"./inflectors/noun_inflector":24,"./inflectors/fr/noun_inflector":25,"./inflectors/ja/noun_inflector":26,"./inflectors/present_verb_inflector":27,"./inflectors/count_inflector":28,"./wordnet/wordnet":29,"./tfidf/tfidf":30,"./analyzers/sentence_analyzer":31,"./distance/jaro-winkler_distance":32,"./util/stopwords":33,"./ngrams/ngrams":34,"./distance/levenshtein_distance":35,"./distance/dice_coefficient":36,"./normalizers/normalizer_ja":37,"./normalizers/remove_diacritics":38,"./transliterators/ja":39}],28:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+function nthForm(i) {
+ var teenth = (i % 100);
+
+ if(teenth > 10 && teenth < 14)
+ return 'th';
+ else {
+ switch(i % 10) {
+ case 1:
+ return 'st';
+ break;
+ case 2:
+ return 'nd';
+ break;
+ case 3:
+ return 'rd';
+ break;
+ default:
+ return 'th';
+ }
+ }
+}
+
+function nth(i) {
+ return i.toString() + nthForm(i);
+}
+
+var CountInflector = function() {
+};
+
+CountInflector.nth = nth;
+
+module.exports = CountInflector;
+
+},{}],32:[function(require,module,exports){
+/*
+Copyright (c) 2012, Adam Phillabaum, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Unless otherwise stated by a specific section of code
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// Computes the Jaro distance between two string -- intrepreted from:
+// http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
+// s1 is the first string to compare
+// s2 is the second string to compare
+function distance(s1, s2) {
+ if (typeof(s1) != "string" || typeof(s2) != "string") return 0;
+ if (s1.length == 0 || s2.length == 0)
+ return 0;
+ s1 = s1.toLowerCase(), s2 = s2.toLowerCase();
+ var matchWindow = (Math.floor(Math.max(s1.length, s2.length) / 2.0)) - 1;
+ var matches1 = new Array(s1.length);
+ var matches2 = new Array(s2.length);
+ var m = 0; // number of matches
+ var t = 0; // number of transpositions
+
+ //debug helpers
+ //console.log("s1: " + s1 + "; s2: " + s2);
+ //console.log(" - matchWindow: " + matchWindow);
+
+ // find matches
+ for (var i = 0; i < s1.length; i++) {
+ var matched = false;
+
+ // check for an exact match
+ if (s1[i] == s2[i]) {
+ matches1[i] = matches2[i] = matched = true;
+ m++
+ }
+
+ // check the "match window"
+ else {
+ // this for loop is a little brutal
+ for (k = (i <= matchWindow) ? 0 : i - matchWindow;
+ (k <= i + matchWindow) && k < s2.length && !matched;
+ k++) {
+ if (s1[i] == s2[k]) {
+ if(!matches1[i] && !matches2[k]) {
+ m++;
+ }
+
+ matches1[i] = matches2[k] = matched = true;
+ }
+ }
+ }
+ }
+
+ if(m == 0)
+ return 0.0;
+
+ // count transpositions
+ var k = 0;
+
+ for(var i = 0; i < s1.length; i++) {
+ if(matches1[k]) {
+ while(!matches2[k] && k < matches2.length)
+ k++;
+ if(s1[i] != s2[k] && k < matches2.length) {
+ t++;
+ }
+
+ k++;
+ }
+ }
+
+ //debug helpers:
+ //console.log(" - matches: " + m);
+ //console.log(" - transpositions: " + t);
+ t = t / 2.0;
+ return (m / s1.length + m / s2.length + (m - t) / m) / 3;
+}
+
+// Computes the Winkler distance between two string -- intrepreted from:
+// http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance
+// s1 is the first string to compare
+// s2 is the second string to compare
+// dj is the Jaro Distance (if you've already computed it), leave blank and the method handles it
+function JaroWinklerDistance(s1, s2, dj) {
+ var jaro;
+ (typeof(dj) == 'undefined')? jaro = distance(s1,s2) : jaro = dj;
+ var p = 0.1; //
+ var l = 0 // length of the matching prefix
+ while(s1[l] == s2[l] && l < 4)
+ l++;
+
+ return jaro + l * p * (1 - jaro);
+}
+module.exports = JaroWinklerDistance;
+
+},{}],33:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'about', 'after', 'all', 'also', 'am', 'an', 'and', 'another', 'any', 'are', 'as', 'at', 'be',
+ 'because', 'been', 'before', 'being', 'between', 'both', 'but', 'by', 'came', 'can',
+ 'come', 'could', 'did', 'do', 'each', 'for', 'from', 'get', 'got', 'has', 'had',
+ 'he', 'have', 'her', 'here', 'him', 'himself', 'his', 'how', 'if', 'in', 'into',
+ 'is', 'it', 'like', 'make', 'many', 'me', 'might', 'more', 'most', 'much', 'must',
+ 'my', 'never', 'now', 'of', 'on', 'only', 'or', 'other', 'our', 'out', 'over',
+ 'said', 'same', 'see', 'should', 'since', 'some', 'still', 'such', 'take', 'than',
+ 'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'those',
+ 'through', 'to', 'too', 'under', 'up', 'very', 'was', 'way', 'we', 'well', 'were',
+ 'what', 'where', 'which', 'while', 'who', 'with', 'would', 'you', 'your',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '$', '1',
+ '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],35:[function(require,module,exports){
+/*
+Copyright (c) 2012, Sid Nallu, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/*
+ * contribution by sidred123
+ */
+
+/*
+ * Compute the Levenshtein distance between two strings.
+ * Algorithm based from Speech and Language Processing - Daniel Jurafsky and James H. Martin.
+ */
+
+function LevenshteinDistance (source, target, options) {
+ options = options || {};
+ options.insertion_cost = options.insertion_cost || 1;
+ options.deletion_cost = options.deletion_cost || 1;
+ options.substitution_cost = options.substitution_cost || 1;
+
+ var sourceLength = source.length;
+ var targetLength = target.length;
+ var distanceMatrix = [[0]];
+
+ for (var row = 1; row <= sourceLength; row++) {
+ distanceMatrix[row] = [];
+ distanceMatrix[row][0] = distanceMatrix[row-1][0] + options.deletion_cost;
+ }
+
+ for (var column = 1; column <= targetLength; column++) {
+ distanceMatrix[0][column] = distanceMatrix[0][column-1] + options.insertion_cost;
+ }
+
+ for (var row = 1; row <= sourceLength; row++) {
+ for (var column = 1; column <= targetLength; column++) {
+ var costToInsert = distanceMatrix[row][column-1] + options.insertion_cost;
+ var costToDelete = distanceMatrix[row-1][column] + options.deletion_cost;
+
+ var sourceElement = source[row-1];
+ var targetElement = target[column-1];
+ var costToSubstitute = distanceMatrix[row-1][column-1];
+ if (sourceElement !== targetElement) {
+ costToSubstitute = costToSubstitute + options.substitution_cost;
+ }
+ distanceMatrix[row][column] = Math.min(costToInsert, costToDelete, costToSubstitute);
+ }
+ }
+ return distanceMatrix[sourceLength][targetLength];
+}
+
+module.exports = LevenshteinDistance;
+
+},{}],36:[function(require,module,exports){
+/*
+Copyright (c) 2011, John Crepezzi, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// Get all of the pairs of letters for a string
+var letterPairs = function (str) {
+ var numPairs = str.length - 1;
+ var pairs = new Array(numPairs);
+ for (var i = 0; i < numPairs; i++) {
+ pairs[i] = str.substring(i, i + 2);
+ }
+ return pairs;
+};
+
+// Get all of the pairs in all of the words for a string
+var wordLetterPairs = function (str) {
+ var allPairs = [], pairs;
+ var words = str.split(/\s+/);
+ for (var i = 0; i < words.length; i++) {
+ pairs = letterPairs(words[i]);
+ allPairs.push.apply(allPairs, pairs);
+ }
+ return allPairs;
+};
+
+// Perform some sanitization steps
+var sanitize = function (str) {
+ return str.toLowerCase().replace(/^\s+|\s+$/g, '');
+};
+
+// Compare two strings, and spit out a number from 0-1
+var compare = function (str1, str2) {
+ var pairs1 = wordLetterPairs(sanitize(str1));
+ var pairs2 = wordLetterPairs(sanitize(str2));
+ var intersection = 0, union = pairs1.length + pairs2.length;
+ var i, j, pair1, pair2;
+ for (i = 0; i < pairs1.length; i++) {
+ pair1 = pairs1[i];
+ for (j = 0; j < pairs2.length; j++) {
+ pair2 = pairs2[j];
+ if (pair1 == pair2) {
+ intersection ++;
+ delete pairs2[j];
+ break;
+ }
+ }
+ }
+ return 2 * intersection / union;
+};
+
+module.exports = compare;
+
+},{}],38:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Alexy Maslennikov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * Script to remove diacritics. Original source was taken from
+ * http://lehelk.com/2011/05/06/script-to-remove-diacritics/
+ */
+var diacriticsRemovalMap = [
+ {'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
+ {'base':'AA','letters':/[\uA732]/g},
+ {'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
+ {'base':'AO','letters':/[\uA734]/g},
+ {'base':'AU','letters':/[\uA736]/g},
+ {'base':'AV','letters':/[\uA738\uA73A]/g},
+ {'base':'AY','letters':/[\uA73C]/g},
+ {'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
+ {'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
+ {'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
+ {'base':'DZ','letters':/[\u01F1\u01C4]/g},
+ {'base':'Dz','letters':/[\u01F2\u01C5]/g},
+ {'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
+ {'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
+ {'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
+ {'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
+ {'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
+ {'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
+ {'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
+ {'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
+ {'base':'LJ','letters':/[\u01C7]/g},
+ {'base':'Lj','letters':/[\u01C8]/g},
+ {'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
+ {'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
+ {'base':'NJ','letters':/[\u01CA]/g},
+ {'base':'Nj','letters':/[\u01CB]/g},
+ {'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
+ {'base':'OI','letters':/[\u01A2]/g},
+ {'base':'OO','letters':/[\uA74E]/g},
+ {'base':'OU','letters':/[\u0222]/g},
+ {'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
+ {'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
+ {'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
+ {'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
+ {'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
+ {'base':'TZ','letters':/[\uA728]/g},
+ {'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
+ {'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
+ {'base':'VY','letters':/[\uA760]/g},
+ {'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
+ {'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
+ {'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
+ {'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
+ {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
+ {'base':'aa','letters':/[\uA733]/g},
+ {'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
+ {'base':'ao','letters':/[\uA735]/g},
+ {'base':'au','letters':/[\uA737]/g},
+ {'base':'av','letters':/[\uA739\uA73B]/g},
+ {'base':'ay','letters':/[\uA73D]/g},
+ {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
+ {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
+ {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
+ {'base':'dz','letters':/[\u01F3\u01C6]/g},
+ {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
+ {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
+ {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
+ {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
+ {'base':'hv','letters':/[\u0195]/g},
+ {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
+ {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
+ {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
+ {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
+ {'base':'lj','letters':/[\u01C9]/g},
+ {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
+ {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
+ {'base':'nj','letters':/[\u01CC]/g},
+ {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
+ {'base':'oi','letters':/[\u01A3]/g},
+ {'base':'ou','letters':/[\u0223]/g},
+ {'base':'oo','letters':/[\uA74F]/g},
+ {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
+ {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
+ {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
+ {'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
+ {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
+ {'base':'tz','letters':/[\uA729]/g},
+ {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
+ {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
+ {'base':'vy','letters':/[\uA761]/g},
+ {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
+ {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
+ {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
+ {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
+];
+
+
+module.exports = function(str) {
+ var rules = diacriticsRemovalMap;
+ for (var i = 0; i < rules.length; i++) {
+ str = str.replace(rules[i].letters, rules[i].base);
+ }
+ return str;
+};
+
+},{}],40:[function(require,module,exports){
+var events = require('events');
+
+exports.isArray = isArray;
+exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'};
+exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'};
+
+
+exports.print = function () {};
+exports.puts = function () {};
+exports.debug = function() {};
+
+exports.inspect = function(obj, showHidden, depth, colors) {
+ var seen = [];
+
+ var stylize = function(str, styleType) {
+ // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+ var styles =
+ { 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39] };
+
+ var style =
+ { 'special': 'cyan',
+ 'number': 'blue',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red' }[styleType];
+
+ if (style) {
+ return '\033[' + styles[style][0] + 'm' + str +
+ '\033[' + styles[style][1] + 'm';
+ } else {
+ return str;
+ }
+ };
+ if (! colors) {
+ stylize = function(str, styleType) { return str; };
+ }
+
+ function format(value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value !== exports &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ return value.inspect(recurseTimes);
+ }
+
+ // Primitive types cannot have properties
+ switch (typeof value) {
+ case 'undefined':
+ return stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return stylize(simple, 'string');
+
+ case 'number':
+ return stylize('' + value, 'number');
+
+ case 'boolean':
+ return stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return stylize('null', 'null');
+ }
+
+ // Look up the keys of the object.
+ var visible_keys = Object_keys(value);
+ var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys;
+
+ // Functions without properties can be shortcutted.
+ if (typeof value === 'function' && keys.length === 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ var name = value.name ? ': ' + value.name : '';
+ return stylize('[Function' + name + ']', 'special');
+ }
+ }
+
+ // Dates without properties can be shortcutted
+ if (isDate(value) && keys.length === 0) {
+ return stylize(value.toUTCString(), 'date');
+ }
+
+ var base, type, braces;
+ // Determine the object type
+ if (isArray(value)) {
+ type = 'Array';
+ braces = ['[', ']'];
+ } else {
+ type = 'Object';
+ braces = ['{', '}'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var n = value.name ? ': ' + value.name : '';
+ base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
+ } else {
+ base = '';
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + value.toUTCString();
+ }
+
+ if (keys.length === 0) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ return stylize('[Object]', 'special');
+ }
+ }
+
+ seen.push(value);
+
+ var output = keys.map(function(key) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Getter/Setter]', 'special');
+ } else {
+ str = stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visible_keys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = format(value[key]);
+ } else {
+ str = format(value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (isArray(value)) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (type === 'Array' && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+ });
+
+ seen.pop();
+
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 50) {
+ output = braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+
+ } else {
+ output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+ }
+
+ return output;
+ }
+ return format(obj, (typeof depth === 'undefined' ? 2 : depth));
+};
+
+
+function isArray(ar) {
+ return ar instanceof Array ||
+ Array.isArray(ar) ||
+ (ar && ar !== Object.prototype && isArray(ar.__proto__));
+}
+
+
+function isRegExp(re) {
+ return re instanceof RegExp ||
+ (typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]');
+}
+
+
+function isDate(d) {
+ if (d instanceof Date) return true;
+ if (typeof d !== 'object') return false;
+ var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype);
+ var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__);
+ return JSON.stringify(proto) === JSON.stringify(properties);
+}
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+exports.log = function (msg) {};
+
+exports.pump = null;
+
+var Object_keys = Object.keys || function (obj) {
+ var res = [];
+ for (var key in obj) res.push(key);
+ return res;
+};
+
+var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) {
+ var res = [];
+ for (var key in obj) {
+ if (Object.hasOwnProperty.call(obj, key)) res.push(key);
+ }
+ return res;
+};
+
+var Object_create = Object.create || function (prototype, properties) {
+ // from es5-shim
+ var object;
+ if (prototype === null) {
+ object = { '__proto__' : null };
+ }
+ else {
+ if (typeof prototype !== 'object') {
+ throw new TypeError(
+ 'typeof prototype[' + (typeof prototype) + '] != \'object\''
+ );
+ }
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ object.__proto__ = prototype;
+ }
+ if (typeof properties !== 'undefined' && Object.defineProperties) {
+ Object.defineProperties(object, properties);
+ }
+ return object;
+};
+
+exports.inherits = function(ctor, superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object_create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+};
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (typeof f !== 'string') {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(exports.inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j': return JSON.stringify(args[i++]);
+ default:
+ return x;
+ }
+ });
+ for(var x = args[i]; i < len; x = args[++i]){
+ if (x === null || typeof x !== 'object') {
+ str += ' ' + x;
+ } else {
+ str += ' ' + exports.inspect(x);
+ }
+ }
+ return str;
+};
+
+},{"events":41}],42:[function(require,module,exports){
+// nothing to see here... no file methods for the browser
+
+},{}],43:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+
+process.nextTick = (function () {
+ var canSetImmediate = typeof window !== 'undefined'
+ && window.setImmediate;
+ var canPost = typeof window !== 'undefined'
+ && window.postMessage && window.addEventListener
+ ;
+
+ if (canSetImmediate) {
+ return function (f) { return window.setImmediate(f) };
+ }
+
+ if (canPost) {
+ var queue = [];
+ window.addEventListener('message', function (ev) {
+ if (ev.source === window && ev.data === 'process-tick') {
+ ev.stopPropagation();
+ if (queue.length > 0) {
+ var fn = queue.shift();
+ fn();
+ }
+ }
+ }, true);
+
+ return function nextTick(fn) {
+ queue.push(fn);
+ window.postMessage('process-tick', '*');
+ };
+ }
+
+ return function nextTick(fn) {
+ setTimeout(fn, 0);
+ };
+})();
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+}
+
+// TODO(shtylman)
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+
+},{}],41:[function(require,module,exports){
+(function(process){if (!process.EventEmitter) process.EventEmitter = function () {};
+
+var EventEmitter = exports.EventEmitter = process.EventEmitter;
+var isArray = typeof Array.isArray === 'function'
+ ? Array.isArray
+ : function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]'
+ }
+;
+function indexOf (xs, x) {
+ if (xs.indexOf) return xs.indexOf(x);
+ for (var i = 0; i < xs.length; i++) {
+ if (x === xs[i]) return i;
+ }
+ return -1;
+}
+
+// By default EventEmitters will print a warning if more than
+// 10 listeners are added to it. This is a useful default which
+// helps finding memory leaks.
+//
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+var defaultMaxListeners = 10;
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!this._events) this._events = {};
+ this._events.maxListeners = n;
+};
+
+
+EventEmitter.prototype.emit = function(type) {
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events || !this._events.error ||
+ (isArray(this._events.error) && !this._events.error.length))
+ {
+ if (arguments[1] instanceof Error) {
+ throw arguments[1]; // Unhandled 'error' event
+ } else {
+ throw new Error("Uncaught, unspecified 'error' event.");
+ }
+ return false;
+ }
+ }
+
+ if (!this._events) return false;
+ var handler = this._events[type];
+ if (!handler) return false;
+
+ if (typeof handler == 'function') {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ var args = Array.prototype.slice.call(arguments, 1);
+ handler.apply(this, args);
+ }
+ return true;
+
+ } else if (isArray(handler)) {
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ var listeners = handler.slice();
+ for (var i = 0, l = listeners.length; i < l; i++) {
+ listeners[i].apply(this, args);
+ }
+ return true;
+
+ } else {
+ return false;
+ }
+};
+
+// EventEmitter is defined in src/node_events.cc
+// EventEmitter.prototype.emit() is also defined there.
+EventEmitter.prototype.addListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('addListener only takes instances of Function');
+ }
+
+ if (!this._events) this._events = {};
+
+ // To avoid recursion in the case that type == "newListeners"! Before
+ // adding it to the listeners, first emit "newListeners".
+ this.emit('newListener', type, listener);
+
+ if (!this._events[type]) {
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ } else if (isArray(this._events[type])) {
+
+ // Check for listener leak
+ if (!this._events[type].warned) {
+ var m;
+ if (this._events.maxListeners !== undefined) {
+ m = this._events.maxListeners;
+ } else {
+ m = defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ console.trace();
+ }
+ }
+
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ } else {
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ var self = this;
+ self.on(type, function g() {
+ self.removeListener(type, g);
+ listener.apply(this, arguments);
+ });
+
+ return this;
+};
+
+EventEmitter.prototype.removeListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('removeListener only takes instances of Function');
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (!this._events || !this._events[type]) return this;
+
+ var list = this._events[type];
+
+ if (isArray(list)) {
+ var i = indexOf(list, listener);
+ if (i < 0) return this;
+ list.splice(i, 1);
+ if (list.length == 0)
+ delete this._events[type];
+ } else if (this._events[type] === listener) {
+ delete this._events[type];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ if (arguments.length === 0) {
+ this._events = {};
+ return this;
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (type && this._events && this._events[type]) this._events[type] = null;
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ if (!this._events) this._events = {};
+ if (!this._events[type]) this._events[type] = [];
+ if (!isArray(this._events[type])) {
+ this._events[type] = [this._events[type]];
+ }
+ return this._events[type];
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":43}],3:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+function transformLipps(token) {
+ return token.replace(/[bfpv]/g, '1');
+}
+
+function transformThroats(token) {
+ return token.replace(/[cgjkqsxz]/g, '2');
+}
+
+function transformToungue(token) {
+ return token.replace(/[dt]/g, '3');
+}
+
+function transformL(token) {
+ return token.replace(/l/g, '4');
+}
+
+function transformHum(token) {
+ return token.replace(/[mn]/g, '5');
+}
+
+function transformR(token) {
+ return token.replace(/r/g, '6');
+}
+
+function condense(token) {
+ return token.replace(/(\d)[hw]?\1+/g, '$1').replace(/[hw]/g, '');
+}
+
+function padRight0(token) {
+ if(token.length < 4)
+ return token + Array(4 - token.length).join('0');
+ else
+ return token;
+}
+
+var SoundEx = new Phonetic();
+module.exports = SoundEx;
+
+SoundEx.process = function(token, maxLength) {
+ token = token.toLowerCase();
+
+ return token.charAt(0).toUpperCase() + padRight0(condense(transformLipps(transformThroats(
+ transformToungue(transformL(transformHum(transformR(
+ token.substr(1, token.length - 1).replace(/[aeiouy]/g, '')))))))
+ )).substr(0, (maxLength && maxLength - 1) || 3);
+};
+
+// export for tests;
+SoundEx.transformLipps = transformLipps;
+SoundEx.transformThroats = transformThroats;
+SoundEx.transformToungue = transformToungue;
+SoundEx.transformL = transformL;
+SoundEx.transformHum = transformHum;
+SoundEx.transformR = transformR;
+SoundEx.condense = condense;
+SoundEx.padRight0 = padRight0;
+
+})()
+},{"./phonetic":44}],5:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+var DoubleMetaphone = new Phonetic();
+module.exports = DoubleMetaphone;
+
+function isVowel(c) {
+ return c && c.match(/[aeiouy]/i);
+}
+
+function truncate(string, length) {
+ if(string.length >= length)
+ string = string.substring(0, length);
+
+ return string;
+}
+
+function process(token, maxLength) {
+ token = token.toUpperCase();
+ var primary = '', secondary = '';
+ var pos = 0;
+ maxLength == maxLength || 32;
+
+ function subMatch(startOffset, stopOffset, terms) {
+ return subMatchAbsolute(pos + startOffset, pos + stopOffset, terms);
+ }
+
+ function subMatchAbsolute(startOffset, stopOffset, terms) {
+ return terms.indexOf(token.substring(startOffset, stopOffset)) > -1;
+ }
+
+ function addSecondary(primaryAppendage, secondaryAppendage) {
+ primary += primaryAppendage;
+ secondary += secondaryAppendage;
+ }
+
+ function add(primaryAppendage) {
+ addSecondary(primaryAppendage, primaryAppendage);
+ }
+
+ function addCompressedDouble(c, encoded) {
+ if(token[pos + 1] == c)
+ pos++;
+ add(encoded || c);
+ }
+
+ function handleC() {
+ if(pos > 1 && !isVowel(token[pos - 2])
+ && token[pos - 1] == 'A' && token[pos + 1] == 'H'
+ && (token[pos + 2] != 'I' && token[pos + 2] != 'I')
+ || subMatch(-2, 4, ['BACHER', 'MACHER'])) {
+ add('K');
+ pos++;
+ } else if(pos == 0 && token.substring(1, 6) == 'EASAR') {
+ add('S');
+ pos++;
+ } else if(token.substring(pos + 1, pos + 4) == 'HIA') {
+ add('K');
+ pos++;
+ } else if(token[pos + 1] == 'H') {
+ if(pos > 0 && token.substring(pos + 2, pos + 4) == 'AE') {
+ addSecondary('K', 'X');
+ pos++;
+ } else if(pos == 0
+ && (subMatch(1, 6, ['HARAC', 'HARIS'])
+ || subMatch(1, 3, ['HOR', 'HUM', 'HIA', 'HEM']))
+ && token.substring(pos + 1, pos + 5) != 'HORE') {
+ add('K');
+ pos++;
+ } else {
+ if((subMatchAbsolute(0, 3, ['VAN', 'VON']) || token.substring(0, 3) == 'SCH')
+ || subMatch(-2, 4, ['ORCHES', 'ARCHIT', 'ORCHID'])
+ || subMatch(2, 3, ['T', 'S'])
+ || ((subMatch(-1, 0, ['A', 'O', 'U', 'E']) || pos == 0)
+ && subMatch(2, 3, ['B', 'F', 'H', 'L', 'M', 'N', 'R', 'V', 'W']))) {
+ add('K');
+ } else if(pos > 0) {
+ if(token.substring(0, 2) == 'MC') {
+ add('K');
+ } else {
+ addSecondary('X', 'K');
+ }
+ } else {
+ add('X');
+ }
+
+ pos++;
+ }
+ } else if(token.substring(pos, pos + 2) == 'CZ'
+ && token.substring(pos - 2, pos + 1) != 'WICZ') {
+ addSecondary('S', 'X');
+ pos++;
+ } else if(token.substring(pos, pos + 3) == 'CIA') {
+ add('X');
+ pos += 2;
+ } else if(token[pos + 1] == 'C' && pos != 1 && token[0] != 'M') {
+ if(['I', 'E', 'H'].indexOf(token[pos + 2]) > -1
+ && token.substring(pos + 2, pos + 4) != 'HU') {
+ if(pos == 1 && token[pos - 1] == 'A'
+ || subMatch(-1, 4, ['UCCEE', 'UCCES'])) {
+ add('KS');
+ } else {
+ add('X');
+ }
+
+ pos +=2;
+ } else {
+ add('K');
+ pos++;
+ }
+ } else if(['K', 'G', 'Q'].indexOf(token[pos + 1]) > -1) {
+ add('K');
+ pos++;
+ } else if(['E', 'I', 'Y'].indexOf(token[pos + 1]) > -1) {
+ if(subMatch(1, 3, ['IA', 'IE', 'IO'])) {
+ addSecondary('S', 'X');
+ } else {
+ add('S');
+ }
+ pos++;
+ } else {
+ add('K');
+ if(token[pos + 1] == ' ' && ['C', 'Q', 'G'].indexOf(token[pos + 2])) {
+ pos += 2;
+ } else if(['C', 'K', 'Q'].indexOf(token[pos + 1]) > -1
+ && !subMatch(1, 3, ['CE', 'CI'])) {
+ pos++;
+ }
+ }
+ }
+
+ function handleD() {
+ if(token[pos + 1] == 'G') {
+ if(['I', 'E', 'Y'].indexOf(token[pos + 2]) > -1) {
+ add('J');
+ pos += 2;
+ } else {
+ add('TK');
+ pos++;
+ }
+ } else if(token[pos + 1] == 'T') {
+ add('T');
+ pos++;
+ } else
+ addCompressedDouble('D', 'T');
+ }
+
+ function handleG() {
+ if(token[pos + 1] == 'H') {
+ if(pos > 0 && !isVowel(token[pos - 1])) {
+ add('K');
+ pos++;
+ } else if(pos == 0) {
+ if(token[pos + 2] == 'I') {
+ add('J');
+ } else {
+ add('K');
+ }
+ pos++;
+ } else if(pos > 1
+ && (['B', 'H', 'D'].indexOf(token[pos - 2]) > -1
+ || ['B', 'H', 'D'].indexOf(token[pos - 3]) > -1
+ || ['B', 'H'].indexOf(token[pos - 4]) > -1)) {
+ pos++;
+ } else {
+ if(pos > 2
+ && token[pos - 1] == 'U'
+ && ['C', 'G', 'L', 'R', 'T'].indexOf(token[pos - 3]) > -1) {
+ add('F');
+ } else if(token[pos - 1] != 'I') {
+ add('K');
+ }
+
+ pos++;
+ }
+ } else if(token[pos + 1] == 'N') {
+ if(pos == 1 && startsWithVowel && !slavoGermanic) {
+ addSecondary('KN', 'N');
+ } else {
+ if(token.substring(pos + 2, pos + 4) != 'EY'
+ && (token[pos + 1] != 'Y'
+ && !slavoGermanic)) {
+ addSecondary('N', 'KN');
+ } else
+ add('KN');
+ }
+ pos++;
+ } else if(token.substring(pos + 1, pos + 3) == 'LI' && !slavoGermanic) {
+ addSecondary('KL', 'L');
+ pos++;
+ } else if(pos == 0 && (token[pos + 1] == 'Y'
+ || subMatch(1, 3, ['ES', 'EP', 'EB', 'EL', 'EY', 'IB', 'IL', 'IN', 'IE', 'EI', 'ER']))) {
+ addSecondary('K', 'J')
+ } else {
+ addCompressedDouble('G', 'K');
+ }
+ }
+
+ function handleH() {
+ // keep if starts a word or is surrounded by vowels
+ if((pos == 0 || isVowel(token[pos - 1])) && isVowel(token[pos + 1])) {
+ add('H');
+ pos++;
+ }
+ }
+
+ function handleJ() {
+ var jose = (token.substring(pos + 1, pos + 4) == 'OSE');
+
+ if(san || jose) {
+ if((pos == 0 && token[pos + 4] == ' ')
+ || san) {
+ add('H');
+ } else
+ add('J', 'H');
+ } else {
+ if(pos == 0/* && !jose*/) {
+ addSecondary('J', 'A');
+ } else if(isVowel(token[pos - 1]) && !slavoGermanic
+ && (token[pos + 1] == 'A' || token[pos + 1] == 'O')) {
+ addSecondary('J', 'H');
+ } else if(pos == token.length - 1) {
+ addSecondary('J', ' ');
+ } else
+ addCompressedDouble('J');
+ }
+ }
+
+ function handleL() {
+ if(token[pos + 1] == 'L') {
+ if(pos == token.length - 3 && (
+ subMatch(-1, 3, ['ILLO', 'ILLA', 'ALLE']) || (
+ token.substring(pos - 1, pos + 3) == 'ALLE' &&
+ (subMatch(-2, -1, ['AS', 'OS']) > -1 ||
+ ['A', 'O'].indexOf(token[token.length - 1]) > -1)))) {
+ addSecondary('L', '');
+ pos++;
+ return;
+ }
+ pos++;
+ }
+ add('L');
+ }
+
+ function handleM() {
+ addCompressedDouble('M');
+ if(token[pos - 1] == 'U' && token[pos + 1] == 'B' &&
+ ((pos == token.length - 2 || token.substring(pos + 2, pos + 4) == 'ER')))
+ pos++;
+ }
+
+ function handleP() {
+ if(token[pos + 1] == 'H') {
+ add('F');
+ pos++;
+ } else {
+ addCompressedDouble('P');
+
+ if(token[pos + 1] == 'B')
+ pos++;
+ }
+ }
+
+ function handleR() {
+ if(pos == token.length - 1 && !slavoGermanic
+ && token.substring(pos - 2, pos) == 'IE'
+ && !subMatch(-4, -3, ['ME', 'MA'])) {
+ addSecondary('', 'R');
+ } else
+ addCompressedDouble('R');
+ }
+
+ function handleS() {
+ if(pos == 0 && token.substring(0, 5) == 'SUGAR') {
+ addSecondary('X', 'S');
+ } else if(token[pos + 1] == 'H') {
+ if(subMatch(2, 5, ['EIM', 'OEK', 'OLM', 'OLZ'])) {
+ add('S');
+ } else {
+ add('X');
+ }
+ pos++;
+ } else if(subMatch(1, 3, ['IO', 'IA'])) {
+ if(slavoGermanic) {
+ add('S');
+ } else {
+ addSecondary('S', 'X');
+ }
+ pos++;
+ } else if((pos == 0 && ['M', 'N', 'L', 'W'].indexOf(token[pos + 1]) > -1)
+ || token[pos + 1] == 'Z') {
+ addSecondary('S', 'X');
+ if(token[pos + 1] == 'Z')
+ pos++;
+ } else if(token.substring(pos, pos + 2) == 'SC') {
+ if(token[pos + 2] == 'H') {
+ if(subMatch(3, 5, ['ER', 'EN'])) {
+ addSecondary('X', 'SK');
+ } else if(subMatch(3, 5, ['OO', 'UY', 'ED', 'EM'])) {
+ add('SK');
+ } else if(pos == 0 && !isVowel(token[3]) && token[3] != 'W') {
+ addSecondary('X', 'S');
+ } else {
+ add('X');
+ }
+ } else if(['I', 'E', 'Y'].indexOf(token[pos + 2]) > -1) {
+ add('S');
+ } else {
+ add('SK');
+ }
+
+ pos += 2;
+ } else if(pos == token.length - 1
+ && subMatch(-2, 0, ['AI', 'OI'])) {
+ addSecondary('', 'S');
+ } else if(token[pos + 1] != 'L' && (
+ token[pos - 1] != 'A' && token[pos - 1] != 'I')) {
+ addCompressedDouble('S');
+ if(token[pos + 1] == 'Z')
+ pos++;
+ }
+ }
+
+ function handleT() {
+ if(token.substring(pos + 1, pos + 4) == 'ION') {
+ add('XN');
+ pos += 3;
+ } else if(subMatch(1, 3, ['IA', 'CH'])) {
+ add('X');
+ pos += 2;
+ } else if(token[pos + 1] == 'H'
+ || token.substring(1, 2) == 'TH') {
+ if(subMatch(2, 4, ['OM', 'AM'])
+ || ['VAN ', 'VON '].indexOf(token.substring(0, 4)) > -1
+ || token.substring(0, 3) == 'SCH') {
+ add('T');
+ } else
+ addSecondary('0', 'T');
+ pos++;
+ } else {
+ addCompressedDouble('T');
+
+ if(token[pos + 1] == 'D')
+ pos++;
+ }
+ }
+
+ function handleX() {
+ if(pos == 0) {
+ add('S');
+ } else if(!(pos == token.length - 1
+ && (['IAU', 'EAU', 'IEU'].indexOf(token.substring(pos - 3, pos)) > -1
+ || ['AU', 'OU'].indexOf(token.substring(pos - 2, pos)) > -1))) {
+ add('KS');
+ }
+ }
+
+ function handleW() {
+ if(pos == 0) {
+ if(token[1] == 'H') {
+ add('A');
+ } else if (isVowel(token[1])) {
+ addSecondary('A', 'F');
+ }
+ } else if((pos == token.length - 1 && isVowel(token[pos - 1])
+ || subMatch(-1, 4, ['EWSKI', 'EWSKY', 'OWSKI', 'OWSKY'])
+ || token.substring(0, 3) == 'SCH')) {
+ addSecondary('', 'F');
+ pos++;
+ } else if(['ICZ', 'ITZ'].indexOf(token.substring(pos + 1, pos + 4)) > -1) {
+ addSecondary('TS', 'FX');
+ pos += 3;
+ }
+ }
+
+ function handleZ() {
+ if(token[pos + 1] == 'H') {
+ add('J');
+ pos++;
+ } else if(subMatch(1, 3, ['ZO', 'ZI', 'ZA'])
+ || (slavoGermanic && pos > 0 && token[pos - 1] != 'T')) {
+ addSecondary('S', 'TS');
+ pos++;
+ } else
+ addCompressedDouble('Z', 'S');
+ }
+
+ var san = (token.substring(0, 3) == 'SAN');
+ var startsWithVowel = isVowel(token[0]);
+ var slavoGermanic = token.match(/(W|K|CZ|WITZ)/);
+
+ if(subMatch(0, 2, ['GN', 'KN', 'PN', 'WR', 'PS'])) {
+ pos++;
+ }
+
+ while(pos < token.length) {
+ switch(token[pos]) {
+ case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y':
+ case 'Ê': case 'É': case 'É': case'À':
+ if(pos == 0)
+ add('A');
+ break;
+ case 'B':
+ addCompressedDouble('B', 'P');
+ break;
+ case 'C':
+ handleC();
+ break;
+ case 'Ç':
+ add("S");
+ break;
+ case 'D':
+ handleD();
+ break;
+ case 'F': case 'K': case 'N':
+ addCompressedDouble(token[pos]);
+ break;
+ case 'G':
+ handleG();
+ break;
+ case 'H':
+ handleH();
+ break;
+ case 'J':
+ handleJ();
+ break;
+ case 'L':
+ handleL();
+ break;
+ case 'M':
+ handleM();
+ break;
+ case 'Ñ':
+ add('N');
+ break;
+ case 'P':
+ handleP();
+ break;
+ case 'Q':
+ addCompressedDouble('Q', 'K');
+ break;
+ case 'R':
+ handleR();
+ break;
+ case 'S':
+ handleS();
+ break;
+ case 'T':
+ handleT();
+ break;
+ case 'V':
+ addCompressedDouble('V', 'F');
+ break;
+ case 'W':
+ handleW();
+ break;
+ case 'X':
+ handleX();
+ break;
+ case 'Z':
+ handleZ();
+ break;
+ }
+
+ if(primary.length >= maxLength && secondary.length >= maxLength) {
+ break;
+ }
+
+ pos++;
+ }
+
+ return [truncate(primary, maxLength), truncate(secondary, maxLength)];
+}
+
+function compare(stringA, stringB) {
+ var encodingsA = process(stringA),
+ encodingsB = process(stringB);
+
+ return encodingsA[0] == encodingsB[0] ||
+ encodingsA[1] == encodingsB[1];
+};
+
+DoubleMetaphone.compare = compare
+DoubleMetaphone.process = process;
+DoubleMetaphone.isVowel = isVowel;
+
+})()
+},{"./phonetic":44}],6:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2012, Alexy Maslenninkov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/*
+ * Daitch-Mokotoff Soundex Coding
+ *
+ * The Daitch-Mokotoff Soundex System was created by Randy Daitch and Gary
+ * Mokotoff of the Jewish Genealogical Society because they concluded the system
+ * developed by Robert Russell in 1918, and in use today by the U.S. National
+ * Archives and Records Administration (NARA) does not apply well to many Slavic
+ * and Yiddish surnames. It also includes refinements that are independent of
+ * ethnic considerations.
+ *
+ * The rules for converting surnames into D-M Code numbers are listed below.
+ * They are followed by the coding chart.
+ *
+ * 1. Names are coded to six digits, each digit representing a sound listed in
+ * the coding chart (below).
+ *
+ * 2. When a name lacks enough coded sounds for six digits, use zeros to fill to
+ * six digits. GOLDEN which has only four coded sounds [G-L-D-N] is coded as
+ * 583600.
+ *
+ * 3. The letters A, E, I, O, U, J, and Y are always coded at the beginning of a
+ * name as in Alpert 087930. In any other situation, they are ignored except
+ * when two of them form a pair and the pair comes before a vowel, as in Breuer
+ * 791900 but not Freud.
+ *
+ * 4. The letter H is coded at the beginning of a name, as in Haber 579000, or
+ * preceding a vowel, as in Manheim 665600, otherwise it is not coded.
+ *
+ * 5. When adjacent sounds can combine to form a larger sound, they are given
+ * the code number of the larger sound. Mintz which is not coded MIN-T-Z but
+ * MIN-TZ 664000.
+ *
+ * 6. When adjacent letters have the same code number, they are coded as one
+ * sound, as in TOPF, which is not coded TO-P-F 377000 but TO-PF 370000.
+ * Exceptions to this rule are the letter combinations MN and NM, whose letters
+ * are coded separately, as in Kleinman, which is coded 586660 not 586600.
+ *
+ * 7. When a surname consists or more than one word, it is coded as if one word,
+ * such as Ben Aron which is treated as Benaron.
+ *
+ * 8. Several letter and letter combinations pose the problem that they may
+ * sound in one of two ways. The letter and letter combinations CH, CK, C, J,
+ * and RS are assigned two possible code numbers.
+ *
+ * For more info, see http://www.jewishgen.org/InfoFiles/soundex.html
+ */
+
+/**
+ * D-M transformation table in the form of finite-state machine.
+ * Every element of the table having member with zero index represents
+ * legal FSM state; every non-zero key is the transition rule.
+ *
+ * Every legal state comprises tree values chosen according to the position
+ * of the letter combination in the word:
+ * 0: start of a word;
+ * 1: before a vowel;
+ * 2: any other situation.
+ */
+var codes = {
+ A: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]],
+ U: [[0, 7, -1]]},
+ B: [[7, 7, 7]],
+ C: {
+ 0: [5, 5, 5],
+ Z: {0: [4, 4, 4], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], Z: [[4, 4, 4]]},
+ K: [[5, 5, 5], [45, 45, 45]],
+ H: {0: [5, 5, 5], S: [[5, 54, 54]]}},
+ D: {
+ 0: [3, 3, 3],
+ T: [[3, 3, 3]],
+ Z: {0: [4, 4, 4], H: [[4, 4, 4]], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], H: [[4, 4, 4]], Z: [[4, 4, 4]]},
+ R: {S: [[4, 4, 4]], Z: [[4, 4, 4]]}},
+ E: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]],
+ U: [[1, 1, -1]],
+ W: [[1, 1, -1]]},
+ F: {
+ 0: [7, 7, 7],
+ B: [[7, 7, 7]]},
+ G: [[5, 5, 5]],
+ H: [[5, 5, -1]],
+ I: {
+ 0: [0, -1, -1],
+ A: [[1, -1, -1]],
+ E: [[1, -1, -1]],
+ O: [[1, -1, -1]],
+ U: [[1, -1, -1]]},
+ J: [[4, 4, 4]],
+ K: {
+ 0: [5, 5, 5],
+ H: [[5, 5, 5]],
+ S: [[5, 54, 54]]},
+ L: [[8, 8, 8]],
+ M: {
+ 0: [6, 6, 6],
+ N: [[66, 66, 66]]},
+ N: {
+ 0: [6, 6, 6],
+ M: [[66, 66, 66]]},
+ O: {
+ 0: [0, -1, -1],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]]},
+ P: {
+ 0: [7, 7, 7],
+ F: [[7, 7, 7]],
+ H: [[7, 7, 7]]},
+ Q: [[5, 5, 5]],
+ R: {
+ 0: [9, 9, 9],
+ Z: [[94, 94, 94], [94, 94, 94]],
+ S: [[94, 94, 94], [94, 94, 94]]},
+ S: {
+ 0: [4, 4, 4],
+ Z: {0: [4, 4, 4], T: [[2, 43, 43]], C: {Z: [[2, 4, 4]], S: [[2, 4, 4]]}, D: [[2, 43, 43]]},
+ D: [[2, 43, 43]],
+ T: {0: [2, 43, 43], R: {Z: [[2, 4, 4]], S: [[2, 4, 4]]}, C: {H: [[2, 4, 4]]}, S: {H: [[2, 4, 4]], C: {H: [[2, 4, 4]]}}},
+ C: {0: [2, 4, 4], H: {0: [4, 4, 4], T: {0: [2, 43, 43], S: {C: {H: [[2, 4, 4]]}, H: [[2, 4, 4]]}, C: {H: [[2, 4, 4]]}}, D: [[2, 43, 43]]}},
+ H: {0: [4, 4, 4], T: {0: [2, 43, 43], C: {H: [[2, 4, 4]]}, S: {H: [[2, 4, 4]]}}, C: {H: [[2, 4, 4]]}, D: [[2, 43, 43]]}},
+ T: {
+ 0: [3, 3, 3],
+ C: {0: [4, 4, 4], H: [[4, 4, 4]]},
+ Z: {0: [4, 4, 4], S: [[4, 4, 4]]},
+ S: {0: [4, 4, 4], Z: [[4, 4, 4]], H: [[4, 4, 4]], C: {H: [[4, 4, 4]]}},
+ T: {S: {0: [4, 4, 4], Z: [[4, 4, 4]], C: {H: [[4, 4, 4]]}}, C: {H: [[4, 4, 4]]}, Z: [[4, 4, 4]]},
+ H: [[3, 3, 3]],
+ R: {Z: [[4, 4, 4]], S: [[4, 4, 4]]}},
+ U: {
+ 0: [0, -1, -1],
+ E: [[0, -1, -1]],
+ I: [[0, 1, -1]],
+ J: [[0, 1, -1]],
+ Y: [[0, 1, -1]]},
+ V: [[7, 7, 7]],
+ W: [[7, 7, 7]],
+ X: [[5, 54, 54]],
+ Y: [[1, -1, -1]],
+ Z: {
+ 0: [4, 4, 4],
+ D: {0: [2, 43, 43], Z: {0: [2, 4, 4], H: [[2, 4, 4]]}},
+ H: {0: [4, 4, 4], D: {0: [2, 43, 43], Z: {H: [[2, 4, 4]]}}},
+ S: {0: [4, 4, 4], H: [[4, 4, 4]], C: {H: [[4, 4, 4]]}}}
+};
+
+
+function process(word, codeLength) {
+ codeLength = codeLength || 6;
+ word = word.toUpperCase();
+ var output = '';
+
+ var pos = 0, lastCode = -1;
+ while (pos < word.length) {
+ var substr = word.slice(pos);
+ var rules = findRules(substr);
+
+ var code;
+ if (pos == 0) {
+ // at the beginning of the word
+ code = rules.mapping[0];
+ } else if (substr[rules.length] && findRules(substr[rules.length]).mapping[0] == 0) {
+ // before a vowel
+ code = rules.mapping[1];
+ } else {
+ // any other situation
+ code = rules.mapping[2];
+ }
+
+ if ((code != -1) && (code != lastCode)) output += code;
+ lastCode = code;
+ pos += rules.length;
+
+ }
+
+ return normalizeLength(output, codeLength);
+}
+
+
+function findRules(str) {
+ var state = codes[str[0]];
+ var legalState = state || [[-1,-1,-1]],
+ charsInvolved = 1;
+
+ for (var offs = 1; offs < str.length; offs++) {
+ if (!state || !state[str[offs]]) break;
+
+ state = state[str[offs]];
+ if (state[0]) {
+ legalState = state;
+ charsInvolved = offs + 1;
+ }
+ }
+
+ return {
+ length: charsInvolved,
+ mapping: legalState[0]
+ };
+}
+
+
+/**
+ * Pad right with zeroes or cut excess symbols to fit length
+ */
+function normalizeLength(token, length) {
+ length = length || 6;
+ if (token.length < length) {
+ token += (new Array(length - token.length + 1)).join('0');
+ }
+ return token.slice(0, length);
+}
+
+var Phonetic = require('./phonetic');
+var soundex = new Phonetic();
+soundex.process = process;
+module.exports = soundex;
+
+
+})()
+},{"./phonetic":44}],4:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Phonetic = require('./phonetic');
+
+function dedup(token) {
+ return token.replace(/([^c])\1/g, '$1');
+}
+
+function dropInitialLetters(token) {
+ if(token.match(/^(kn|gn|pn|ae|wr)/))
+ return token.substr(1, token.length - 1);
+
+ return token;
+}
+
+function dropBafterMAtEnd(token) {
+ return token.replace(/mb$/, 'm');
+}
+
+function cTransform(token) {
+ token = token.replace(/([^s]|^)(c)(h)/g, '$1x$3').trim();
+ token = token.replace(/cia/g, 'xia');
+ token = token.replace(/c(i|e|y)/g, 's$1');
+ token = token.replace(/c/g, 'k');
+
+ return token;
+}
+
+function dTransform(token) {
+ token = token.replace(/d(ge|gy|gi)/g, 'j$1');
+ token = token.replace(/d/g, 't');
+
+ return token;
+}
+
+function dropG(token) {
+ token = token.replace(/gh(^$|[^aeiou])/g, 'h$1');
+ token = token.replace(/g(n|ned)$/g, '$1');
+
+ return token;
+}
+
+function transformG(token) {
+ token = token.replace(/([^g]|^)(g)(i|e|y)/g, '$1j$3');
+ token = token.replace(/gg/g, 'g');
+ token = token.replace(/g/g, 'k');
+
+ return token;
+}
+
+function dropH(token) {
+ return token.replace(/([aeiou])h([^aeiou])/g, '$1$2');
+}
+
+function transformCK(token) {
+ return token.replace(/ck/g, 'k');
+}
+function transformPH(token) {
+ return token.replace(/ph/g, 'f');
+}
+
+function transformQ(token) {
+ return token.replace(/q/g, 'k');
+}
+
+function transformS(token) {
+ return token.replace(/s(h|io|ia)/g, 'x$1');
+}
+
+function transformT(token) {
+ token = token.replace(/t(ia|io)/g, 'x$1');
+ token = token.replace(/th/, '0');
+
+ return token;
+}
+
+function dropT(token) {
+ return token.replace(/tch/g, 'ch');
+}
+
+function transformV(token) {
+ return token.replace(/v/g, 'f');
+}
+
+function transformWH(token) {
+ return token.replace(/^wh/, 'w');
+}
+
+function dropW(token) {
+ return token.replace(/w([^aeiou]|$)/g, '$1');
+}
+
+function transformX(token) {
+ token = token.replace(/^x/, 's');
+ token = token.replace(/x/g, 'ks');
+ return token;
+}
+
+function dropY(token) {
+ return token.replace(/y([^aeiou]|$)/g, '$1');
+}
+
+function transformZ(token) {
+ return token.replace(/z/, 's');
+}
+
+function dropVowels(token) {
+ return token.charAt(0) + token.substr(1, token.length).replace(/[aeiou]/g, '');
+}
+
+var Metaphone = new Phonetic();
+module.exports = Metaphone;
+
+Metaphone.process = function(token, maxLength) {
+ maxLength == maxLength || 32;
+ token = token.toLowerCase();
+ token = dedup(token);
+ token = dropInitialLetters(token);
+ token = dropBafterMAtEnd(token);
+ token = transformCK(token);
+ token = cTransform(token);
+ token = dTransform(token);
+ token = dropG(token);
+ token = transformG(token);
+ token = dropH(token);
+ token = transformPH(token);
+ token = transformQ(token);
+ token = transformS(token);
+ token = transformX(token);
+ token = transformT(token);
+ token = dropT(token);
+ token = transformV(token);
+ token = transformWH(token);
+ token = dropW(token);
+ token = dropY(token);
+ token = transformZ(token);
+ token = dropVowels(token);
+
+ token.toUpperCase();
+ if(token.length >= maxLength)
+ token = token.substring(0, maxLength);
+
+ return token.toUpperCase();
+};
+
+// expose functions for testing
+Metaphone.dedup = dedup;
+Metaphone.dropInitialLetters = dropInitialLetters;
+Metaphone.dropBafterMAtEnd = dropBafterMAtEnd;
+Metaphone.cTransform = cTransform;
+Metaphone.dTransform = dTransform;
+Metaphone.dropG = dropG;
+Metaphone.transformG = transformG;
+Metaphone.dropH = dropH;
+Metaphone.transformCK = transformCK;
+Metaphone.transformPH = transformPH;
+Metaphone.transformQ = transformQ;
+Metaphone.transformS = transformS;
+Metaphone.transformT = transformT;
+Metaphone.dropT = dropT;
+Metaphone.transformV = transformV;
+Metaphone.transformWH = transformWH;
+Metaphone.dropW = dropW;
+Metaphone.transformX = transformX;
+Metaphone.dropY = dropY;
+Metaphone.transformZ = transformZ;
+Metaphone.dropVowels = dropVowels;
+
+})()
+},{"./phonetic":44}],7:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer');
+
+// denote groups of consecutive consonants with a C and consecutive vowels
+// with a V.
+function categorizeGroups(token) {
+ return token.replace(/[^aeiou]+/g, 'C').replace(/[aeiouy]+/g, 'V');
+}
+
+// denote single consonants with a C and single vowels with a V
+function categorizeChars(token) {
+ return token.replace(/[^aeiou]/g, 'C').replace(/[aeiouy]/g, 'V');
+}
+
+// calculate the "measure" M of a word. M is the count of VC sequences dropping
+// an initial C if it exists and a trailing V if it exists.
+function measure(token) {
+ if(!token)
+ return -1;
+
+ return categorizeGroups(token).replace(/^C/, '').replace(/V$/, '').length / 2;
+}
+
+// determine if a token end with a double consonant i.e. happ
+function endsWithDoublCons(token) {
+ return token.match(/([^aeiou])\1$/);
+}
+
+// replace a pattern in a word. if a replacement occurs an optional callback
+// can be called to post-process the result. if no match is made NULL is
+// returned.
+function attemptReplace(token, pattern, replacement, callback) {
+ var result = null;
+
+ if((typeof pattern == 'string') && token.substr(0 - pattern.length) == pattern)
+ result = token.replace(new RegExp(pattern + '$'), replacement);
+ else if((pattern instanceof RegExp) && token.match(pattern))
+ result = token.replace(pattern, replacement);
+
+ if(result && callback)
+ return callback(result);
+ else
+ return result;
+}
+
+// attempt to replace a list of patterns/replacements on a token for a minimum
+// measure M.
+function attemptReplacePatterns(token, replacements, measureThreshold) {
+ var replacement = null;
+
+ for(var i = 0; i < replacements.length; i++) {
+ if(measureThreshold == null || measure(attemptReplace(token, replacements[i][0], '')) > measureThreshold)
+ replacement = attemptReplace(token, replacements[i][0], replacements[i][1]);
+
+ if(replacement)
+ break;
+ }
+
+ return replacement;
+}
+
+// replace a list of patterns/replacements on a word. if no match is made return
+// the original token.
+function replacePatterns(token, replacements, measureThreshold) {
+ var result = attemptReplacePatterns(token, replacements, measureThreshold);
+ token = result == null ? token : result;
+
+ return token;
+}
+
+// step 1a as defined for the porter stemmer algorithm.
+function step1a(token) {
+ if(token.match(/(ss|i)es$/))
+ return token.replace(/(ss|i)es$/, '$1');
+
+ if(token.substr(-1) == 's' && token.substr(-2, 1) != 's')
+ return token.replace(/s?$/, '');
+
+ return token;
+}
+
+// step 1b as defined for the porter stemmer algorithm.
+function step1b(token) {
+ if(token.substr(-3) == 'eed') {
+ if(measure(token.substr(0, token.length - 3)) > 0)
+ return token.replace(/eed$/, 'ee');
+ } else {
+ var result = attemptReplace(token, /ed|ing$/, '', function(token) {
+ if(categorizeGroups(token).indexOf('V') > 0) {
+ var result = attemptReplacePatterns(token, [['at', 'ate'], ['bl', 'ble'], ['iz', 'ize']]);
+
+ if(result)
+ return result;
+ else {
+ if(endsWithDoublCons(token) && token.match(/[^lsz]$/))
+ return token.replace(/([^aeiou])\1$/, '$1');
+
+ if(measure(token) == 1 && categorizeChars(token).substr(-3) == 'CVC' && token.match(/[^wxy]$/))
+ return token + 'e';
+ }
+
+ return token;
+ }
+
+ return null;
+ });
+
+ if(result)
+ return result;
+ }
+
+ return token;
+}
+
+// step 1c as defined for the porter stemmer algorithm.
+function step1c(token) {
+ if(categorizeGroups(token).substr(-2, 1) == 'V') {
+ if(token.substr(-1) == 'y')
+ return token.replace(/y$/, 'i');
+ }
+
+ return token;
+}
+
+// step 2 as defined for the porter stemmer algorithm.
+function step2(token) {
+ return replacePatterns(token, [['ational', 'ate'], ['tional', 'tion'], ['enci', 'ence'], ['anci', 'ance'],
+ ['izer', 'ize'], ['abli', 'able'], ['alli', 'al'], ['entli', 'ent'], ['eli', 'e'],
+ ['ousli', 'ous'], ['ization', 'ize'], ['ation', 'ate'], ['ator', 'ate'],['alism', 'al'],
+ ['iveness', 'ive'], ['fulness', 'ful'], ['ousness', 'ous'], ['aliti', 'al'],
+ ['iviti', 'ive'], ['biliti', 'ble']], 0);
+}
+
+// step 3 as defined for the porter stemmer algorithm.
+function step3(token) {
+ return replacePatterns(token, [['icate', 'ic'], ['ative', ''], ['alize', 'al'],
+ ['iciti', 'ic'], ['ical', 'ic'], ['ful', ''], ['ness', '']], 0);
+}
+
+// step 4 as defined for the porter stemmer algorithm.
+function step4(token) {
+ return replacePatterns(token, [['al', ''], ['ance', ''], ['ence', ''], ['er', ''],
+ ['ic', ''], ['able', ''], ['ible', ''], ['ant', ''],
+ ['ement', ''], ['ment', ''], ['ent', ''], [/([st])ion/, '$1'], ['ou', ''], ['ism', ''],
+ ['ate', ''], ['iti', ''], ['ous', ''], ['ive', ''],
+ ['ize', '']], 1);
+}
+
+// step 5a as defined for the porter stemmer algorithm.
+function step5a(token) {
+ var m = measure(token);
+
+ if((m > 1 && token.substr(-1) == 'e') || (m == 1 && !(categorizeChars(token).substr(-4, 3) == 'CVC' && token.match(/[^wxy].$/))))
+ return token.replace(/e$/, '');
+
+ return token;
+}
+
+// step 5b as defined for the porter stemmer algorithm.
+function step5b(token) {
+ if(measure(token) > 1) {
+ if(endsWithDoublCons(token) && token.substr(-2) == 'll')
+ return token.replace(/ll$/, 'l');
+ }
+
+ return token;
+}
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ return step5b(step5a(step4(step3(step2(step1c(step1b(step1a(token.toLowerCase())))))))).toString();
+};
+
+//exports for tests
+PorterStemmer.step1a = step1a;
+PorterStemmer.step1b = step1b;
+PorterStemmer.step1c = step1c;
+PorterStemmer.step2 = step2;
+PorterStemmer.step3 = step3;
+PorterStemmer.step4 = step4;
+PorterStemmer.step5a = step5a;
+PorterStemmer.step5b = step5b;
+
+})()
+},{"./stemmer":45}],9:[function(require,module,exports){
+/*
+Copyright (c) 2012, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_ru');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+function attemptReplacePatterns(token, patterns) {
+ var replacement = null;
+ var i = 0, isReplaced = false;
+ while ((i < patterns.length) && !isReplaced) {
+ if (patterns[i][0].test(token)) {
+ replacement = token.replace(patterns[i][0], patterns[i][1]);
+ isReplaced = true;
+ }
+ i++;
+ }
+ return replacement;
+};
+
+function perfectiveGerund(token) {
+ var result = attemptReplacePatterns(token, [
+ [/[аÑ]в(ши|шиÑÑŒ)$/g, ''],
+ [/(ив|ивши|ившиÑÑŒ|ывши|ывшиÑÑŒ|ыв)$/g, '']
+ ]);
+ return result;
+};
+
+function adjectival(token) {
+ var result = adjective(token);
+ if (result != null) {
+ var pariticipleResult = participle(result);
+ result = pariticipleResult ? pariticipleResult : result;
+ }
+ return result;
+};
+
+function adjective(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|Ñ‹Ñ…|ую|ÑŽÑŽ|аÑ|ÑÑ|ою|ею)$/g, '']
+ ]);
+ return result;
+};
+
+function participle(token) {
+ var result = attemptReplacePatterns(token, [
+ [/([аÑ])(ем|нн|вш|ющ|щ)$/g, '$1'],
+ [/(ивш|ывш|ующ)$/g, '']
+ ]);
+ return result;
+};
+
+function reflexive(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ÑÑ|ÑÑŒ)$/g, '']
+ ]);
+ return result;
+};
+
+function verb(token) {
+ var result = attemptReplacePatterns(token, [
+ [/([аÑ])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ÑŽÑ‚|ны|Ñ‚ÑŒ|ешь|нно)$/g, '$1'],
+ [/(ила|ыла|ена|ейте|уйте|ите|или|ыли|ей|уй|ил|ыл|им|ым|ен|ило|ыло|ено|ÑÑ‚|ует|ит|Ñ‹Ñ‚|ены|ить|Ñ‹Ñ‚ÑŒ|ишь|ую|ÑŽ)$/g, '']
+ ]);
+ return result;
+};
+
+function noun(token) {
+ var result = attemptReplacePatterns(token, [
+ [/(а|ев|ов|ие|ье|е|иÑми|Ñми|ами|еи|ии|и|ией|ей|ой|ий|й|иÑм|Ñм|ием|ем|ам|ом|о|у|ах|иÑÑ…|ÑÑ…|Ñ‹|ÑŒ|ию|ью|ÑŽ|иÑ|ÑŒÑ|Ñ)$/g, '']
+ ]);
+ return result;
+};
+
+function superlative (token) {
+ var result = attemptReplacePatterns(token, [
+ [/(ейш|ейше)$/g, '']
+ ]);
+ return result;
+};
+
+function derivational (token) {
+ var result = attemptReplacePatterns(token, [
+ [/(оÑÑ‚|оÑÑ‚ÑŒ)$/g, '']
+ ]);
+ return result;
+};
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ token = token.toLowerCase().replace(/ё/g, 'е');
+ var volwesRegexp = /^(.*?[аеиоюÑуыиÑ])(.*)$/g;
+ var RV = volwesRegexp.exec(token);
+ if (!RV || RV.length < 3) {
+ return token;
+ }
+ var head = RV[1];
+ RV = RV[2];
+ volwesRegexp.lastIndex = 0;
+ var R2 = volwesRegexp.exec(RV);
+ var result = perfectiveGerund(RV);
+ if (result === null) {
+ var resultReflexive = reflexive(RV) || RV;
+ result = adjectival(resultReflexive);
+ if (result === null) {
+ result = verb(resultReflexive);
+ if (result === null) {
+ result = noun(resultReflexive);
+ if (result === null) {
+ result = resultReflexive;
+ }
+ }
+ }
+ }
+ result = result.replace(/и$/g, '');
+ var derivationalResult = result
+ if (R2 && R2[2]) {
+ derivationalResult = derivational(R2[2]);
+ if (derivationalResult != null) {
+ derivationalResult = derivational(result);
+ } else {
+ derivationalResult = result;
+ }
+ }
+
+ var superlativeResult = superlative(derivationalResult) || derivationalResult;
+
+ superlativeResult = superlativeResult.replace(/(н)н/g, '$1');
+ superlativeResult = superlativeResult.replace(/ь$/g, '');
+ return head + superlativeResult;
+};
+
+},{"./stemmer_ru":46}],8:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Porter Stemmer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_fa');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+// disabled stemming for Farsi
+// Farsi stemming will be supported soon
+PorterStemmer.stem = function(token) {
+ return token;
+};
+},{"./stemmer_fa":47}],10:[function(require,module,exports){
+/*
+Copyright (c) 2012, Leonardo Fenu, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_it');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+
+function isVowel(letter){
+ return (letter == 'a' || letter == 'e' || letter == 'i' || letter == 'o' || letter == 'u' || letter == 'à' ||
+ letter == 'è' || letter == 'ì' || letter == 'ò' || letter == 'ù');
+};
+
+function getNextVowelPos(token,start){
+ start = start + 1;
+ var length = token.length;
+ for (var i = start; i < length; i++) {
+ if (isVowel(token[i])) {
+ return i;
+ }
+ }
+ return length;
+};
+
+function getNextConsonantPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (!isVowel(token[i])) return i;
+ return length;
+};
+
+
+function endsin(token, suffix) {
+ if (token.length < suffix.length) return false;
+ return (token.slice(-suffix.length) == suffix);
+};
+
+function endsinArr(token, suffixes) {
+ for(var i=0;i<suffixes.length;i++){
+ if (endsin(token, suffixes[i])) return suffixes[i];
+ }
+ return '';
+};
+
+function replaceAcute(token) {
+ var str=token.replace(/á/gi,'à');
+ str=str.replace(/é/gi,'è');
+ str=str.replace(/í/gi,'ì');
+ str=str.replace(/ó/gi,'ò');
+ str=str.replace(/ú/gi,'ù');
+ return str;
+};
+
+function vowelMarking(token) {
+ function replacer(match, p1, p2, p3){
+ return p1+p2.toUpperCase()+p3;
+ };
+ str=token.replace(/([aeiou])(i|u)([aeiou])/g, replacer);
+ return str;
+}
+
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+
+ token = token.toLowerCase();
+ token = replaceAcute(token);
+ token = token.replace(/qu/g,'qU');
+ token = vowelMarking(token);
+
+ if (token.length<3){
+ return token;
+ }
+
+ var r1 = r2 = rv = len = token.length;
+ // R1 is the region after the first non-vowel following a vowel,
+ for(var i=0; i < token.length-1 && r1==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1]) ){
+ r1=i+2;
+ }
+ }
+ // Or is the null region at the end of the word if there is no such non-vowel.
+
+ // R2 is the region after the first non-vowel following a vowel in R1
+ for(var i=r1; i< token.length-1 && r2==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1])){
+ r2=i+2;
+ }
+ }
+
+ // Or is the null region at the end of the word if there is no such non-vowel.
+
+ // If the second letter is a consonant, RV is the region after the next following vowel,
+
+ // RV as follow
+
+ if (len > 3) {
+ if(!isVowel(token[1])) {
+ // If the second letter is a consonant, RV is the region after the next following vowel
+ rv = getNextVowelPos(token, 1) +1;
+ } else if (isVowel(token[0]) && isVowel(token[1])) {
+ // or if the first two letters are vowels, RV is the region after the next consonant
+ rv = getNextConsonantPos(token, 2) + 1;
+ } else {
+ //otherwise (consonant-vowel case) RV is the region after the third letter. But RV is the end of the word if these positions cannot be found.
+ rv = 3;
+ }
+ }
+
+ var r1_txt = token.substring(r1);
+ var r2_txt = token.substring(r2);
+ var rv_txt = token.substring(rv);
+
+ var token_orig = token;
+
+ // Step 0: Attached pronoun
+
+ var pronoun_suf = new Array('glieli','glielo','gliene','gliela','gliele','sene','tene','cela','cele','celi','celo','cene','vela','vele','veli','velo','vene','mela','mele','meli','melo','mene','tela','tele','teli','telo','gli','ci', 'la','le','li','lo','mi','ne','si','ti','vi');
+ var pronoun_suf_pre1 = new Array('ando','endo');
+ var pronoun_suf_pre2 = new Array('ar', 'er', 'ir');
+ var suf = endsinArr(token, pronoun_suf);
+
+ if (suf!='') {
+ var pre_suff1 = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre1);
+ var pre_suff2 = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre2);
+
+ if (pre_suff1 != '') {
+ token = token.slice(0,-suf.length);
+ }
+ if (pre_suff2 != '') {
+ token = token.slice(0, -suf.length)+ 'e';
+ }
+ }
+
+ if (token != token_orig) {
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+ }
+
+ var token_after0 = token;
+
+ // Step 1: Standard suffix removal
+
+ if ((suf = endsinArr(r2_txt, new Array('ativamente','abilamente','ivamente','osamente','icamente'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('icazione','icazioni','icatore','icatori','azione','azioni','atore','atori'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('logia','logie'))) != '') {
+ token = token.slice(0, -suf.length)+ 'log'; // replace with log
+ } else if ((suf =endsinArr(r2_txt, new Array('uzione','uzioni','usione','usioni'))) != '') {
+ token = token.slice(0, -suf.length) + 'u'; // replace with u
+ } else if ((suf = endsinArr(r2_txt, new Array('enza','enze'))) != '') {
+ token = token.slice(0, -suf.length)+ 'ente'; // replace with ente
+ } else if ((suf = endsinArr(rv_txt, new Array('amento', 'amenti', 'imento', 'imenti'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r1_txt, new Array('amente'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('atrice','atrici','abile','abili','ibile','ibili','mente','ante','anti','anza','anze','iche','ichi','ismo','ismi','ista','iste','isti','istà','istè','istì','ico','ici','ica','ice','oso','osi','osa','ose'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('abilità', 'icità', 'ività', 'ità'))) != '') {
+ token = token.slice(0, -suf.length); // delete
+ } else if ((suf = endsinArr(r2_txt, new Array('icativa','icativo','icativi','icative','ativa','ativo','ativi','ative','iva','ivo','ivi','ive'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+
+ if (token != token_after0) {
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+ }
+
+
+ var token_after1 = token;
+
+ // Step 2: Verb suffixes
+
+ if (token_after0 == token_after1) {
+ if ((suf = endsinArr(rv_txt, new Array('erebbero','irebbero','assero','assimo','eranno','erebbe','eremmo','ereste','eresti','essero','iranno','irebbe','iremmo','ireste','iresti','iscano','iscono','issero','arono','avamo','avano','avate','eremo','erete','erono','evamo','evano','evate','iremo','irete','irono','ivamo','ivano','ivate','ammo','ando','asse','assi','emmo','enda','ende','endi','endo','erai','Yamo','iamo','immo','irai','irei','isca','isce','isci','isco','erei','uti','uto','ita','ite','iti','ito','iva','ivi','ivo','ono','uta','ute','ano','are','ata','ate','ati','ato','ava','avi','avo','erà','ere','erò','ete','eva','evi','evo','irà','ire','irò','ar','ir'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+ }
+
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ // Always do step 3.
+
+ if ((suf = endsinArr(rv_txt, new Array('ia', 'ie', 'ii', 'io', 'ià', 'iè','iì', 'iò','a','e','i','o','à','è','ì','ò'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ if ((suf =endsinArr(rv_txt, new Array('ch'))) != '') {
+ token = token.slice(0, -suf.length) + 'c'; // replace with c
+ } else if ((suf =endsinArr(rv_txt, new Array('gh'))) != '') {
+ token = token.slice(0, -suf.length) + 'g'; // replace with g
+ }
+
+
+ r1_txt = token.substring(r1);
+ r2_txt = token.substring(r2);
+ rv_txt = token.substring(rv);
+
+ return token.toLowerCase();
+
+};
+},{"./stemmer_it":48}],12:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer');
+var ruleTable = require('./lancaster_rules').rules;
+
+function acceptable(candidate) {
+ if (candidate.match(/^[aeiou]/))
+ return (candidate.length > 1);
+ else
+ return (candidate.length > 2 && candidate.match(/[aeiouy]/));
+}
+
+// take a token, look up the applicatble rule section and attempt some stemming!
+function applyRuleSection(token, intact) {
+ var section = token.substr( - 1);
+ var rules = ruleTable[section];
+
+ if (rules) {
+ for (var i = 0; i < rules.length; i++) {
+ if ((intact || !rules[i].intact)
+ // only apply intact rules to intact tokens
+ && token.substr(0 - rules[i].pattern.length) == rules[i].pattern) {
+ // hack off only as much as the rule indicates
+ var result = token.substr(0, token.length - rules[i].size);
+
+ // if the rules wants us to apply an appendage do so
+ if (rules[i].appendage)
+ result += rules[i].appendage;
+
+ if (acceptable(result)) {
+ token = result;
+
+ // see what the rules wants to do next
+ if (rules[i].continuation) {
+ // this rule thinks there still might be stem left. keep at it.
+ // since we've applied a change we'll pass false in for intact
+ return applyRuleSection(result, false);
+ } else {
+ // the rule thinks we're done stemming. drop out.
+ return result;
+ }
+ }
+ }
+ }
+ }
+
+ return token;
+}
+
+var LancasterStemmer = new Stemmer();
+module.exports = LancasterStemmer;
+
+LancasterStemmer.stem = function(token) {
+ return applyRuleSection(token.toLowerCase(), true);
+}
+},{"./stemmer":45,"./lancaster_rules":49}],11:[function(require,module,exports){
+/*
+Copyright (c) 2012, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Stemmer = require('./stemmer_es');
+
+var PorterStemmer = new Stemmer();
+module.exports = PorterStemmer;
+
+
+function isVowel(letter){
+ return (letter == 'a' || letter == 'e' || letter == 'i' || letter == 'o' || letter == 'u' || letter == 'á' || letter == 'é' ||
+ letter == 'í' || letter == 'ó' || letter == 'ú');
+};
+
+function getNextVowelPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (isVowel(token[i])) return i;
+ return length;
+};
+
+function getNextConsonantPos(token,start){
+ length=token.length
+ for (var i = start; i < length; i++)
+ if (!isVowel(token[i])) return i;
+ return length;
+};
+
+
+function endsin(token, suffix) {
+ if (token.length < suffix.length) return false;
+ return (token.slice(-suffix.length) == suffix);
+};
+
+function endsinArr(token, suffixes) {
+ for(var i=0;i<suffixes.length;i++){
+ if (endsin(token, suffixes[i])) return suffixes[i];
+ }
+ return '';
+};
+
+function removeAccent(token) {
+ var str=token.replace(/á/gi,'a');
+ str=str.replace(/é/gi,'e');
+ str=str.replace(/í/gi,'i');
+ str=str.replace(/ó/gi,'o');
+ str=str.replace(/ú/gi,'u');
+ return str;
+};
+
+
+// perform full stemming algorithm on a single word
+PorterStemmer.stem = function(token) {
+ token = token.toLowerCase();
+
+ if (token.length<3){
+ return token;
+ }
+
+ var r1,r2,rv,len= token.length;
+ //looking for regions after vowels
+
+ for(var i=0; i< token.length-1 && r1==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1]) ){
+ r1=i+2;
+ }
+
+ }
+
+ for(var i=r1; i< token.length-1 && r2==len;i++){
+ if(isVowel(token[i]) && !isVowel(token[i+1])){
+ r2=i+2;
+ }
+ }
+
+ if (len > 3) {
+ if(isVowel(token[1])) {
+ // If the second letter is a consonant, RV is the region after the next following vowel
+ rv = getNextVowelPos(token, 2) +1;
+ } else if (isVowel(token[0]) && isVowel(token[1])) {
+ // or if the first two letters are vowels, RV is the region after the next consonant
+ rv = getNextConsonantPos(token, 2) + 1;
+ } else {
+ //otherwise (consonant-vowel case) RV is the region after the third letter. But RV is the end of the word if these positions cannot be found.
+ rv = 3;
+ }
+ }
+
+ var r1_txt = token.substring(r1-1);
+ var r2_txt = token.substring(r2-1);
+ var rv_txt = token.substring(rv-1);
+
+
+ var token_orig = token;
+
+ // Step 0: Attached pronoun
+ var pronoun_suf = new Array('me', 'se', 'sela', 'selo', 'selas', 'selos', 'la', 'le', 'lo', 'las', 'les', 'los', 'nos');
+ var pronoun_suf_pre1 = new Array('éndo', 'ándo', 'ár', 'ér', 'ír');
+ var pronoun_suf_pre2 = new Array('ando', 'iendo', 'ar', 'er', 'ir');
+ var suf = endsinArr(token, pronoun_suf);
+
+
+ if (suf!='') {
+
+ var pre_suff = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre1);
+
+ if (pre_suff != '') {
+
+ token = removeAccent(token.slice(0,-suf.length));
+ } else {
+ var pre_suff = endsinArr(rv_txt.slice(0,-suf.length),pronoun_suf_pre2);
+
+ if (pre_suff != '' ||
+ (endsin(token, 'yendo' ) &&
+ (token.slice(-suf.length-6,1) == 'u'))) {
+ token = token.slice(0,-suf.length);
+ }
+ }
+ }
+
+ if (token != token_orig) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after0 = token;
+
+ if ((suf = endsinArr(r2_txt, new Array('anza', 'anzas', 'ico', 'ica', 'icos', 'icas', 'ismo', 'ismos', 'able', 'ables', 'ible', 'ibles', 'ista', 'istas', 'oso', 'osa', 'osos', 'osas', 'amiento', 'amientos', 'imiento', 'imientos'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('icadora', 'icador', 'icación', 'icadoras', 'icadores', 'icaciones', 'icante', 'icantes', 'icancia', 'icancias', 'adora', 'ador', 'ación', 'adoras', 'adores', 'aciones', 'ante', 'antes', 'ancia', 'ancias'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('logía', 'logías'))) != '') {
+ token = token.slice(0, -suf.length)+ 'log';
+ } else if ((suf =endsinArr(r2_txt, new Array('ución', 'uciones'))) != '') {
+ token = token.slice(0, -suf.length) + 'u';
+ } else if ((suf = endsinArr(r2_txt, new Array('encia', 'encias'))) != '') {
+ token = token.slice(0, -suf.length)+ 'ente';
+ } else if ((suf = endsinArr(r2_txt, new Array('ativamente', 'ivamente', 'osamente', 'icamente', 'adamente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r1_txt, new Array('amente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('antemente', 'ablemente', 'iblemente', 'mente'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('abilidad', 'abilidades', 'icidad', 'icidades', 'ividad', 'ividades', 'idad', 'idades'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(r2_txt, new Array('ativa', 'ativo', 'ativas', 'ativos', 'iva', 'ivo', 'ivas', 'ivos'))) != '') {
+ token = token.slice(0, -suf.length);
+ }
+
+ if (token != token_after0) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after1 = token;
+
+ if (token_after0 == token_after1) {
+ // Do step 2a if no ending was removed by step 1.
+ if ((suf = endsinArr(rv_txt, new Array('ya', 'ye', 'yan', 'yen', 'yeron', 'yendo', 'yo', 'yó', 'yas', 'yes', 'yais', 'yamos'))) != '' && (token.substring(suf.length-1,1) == 'u')) {
+ token = token.slice(0, -suf.length);
+ }
+
+ if (token != token_after1) {
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+ }
+ var token_after2a = token;
+
+ // Do Step 2b if step 2a was done, but failed to remove a suffix.
+ if (token_after2a == token_after1) {
+
+ if ((suf = endsinArr(rv_txt,new Array('en', 'es', 'éis', 'emos'))) != '') {
+ token = token.slice(0,-suf.length);
+ if (endsin(token, 'gu')) {
+ token = token.slice(0,-1);
+ }
+ } else if ((suf = endsinArr(rv_txt, new Array('arían', 'arías', 'arán', 'arás', 'aríais', 'aría', 'aréis', 'aríamos', 'aremos', 'ará', 'aré', 'erían', 'erías', 'erán', 'erás', 'eríais', 'ería', 'eréis', 'eríamos', 'eremos', 'erá', 'eré', 'irían', 'irías', 'irán', 'irás', 'iríais', 'iría', 'iréis', 'iríamos', 'iremos', 'irá', 'iré', 'aba', 'ada', 'ida', 'ía', 'ara', 'iera', 'ad', 'ed', 'id', 'ase', 'iese', 'aste', 'iste', 'an', 'aban', 'ían', 'aran', 'ieran', 'asen', 'iesen', 'aron', 'ieron', 'ado', 'ido', 'ando', 'iendo', 'ió', 'ar', 'er', 'ir', 'as', 'abas', 'adas', 'idas', 'ías', 'aras', 'ieras', 'ases', 'ieses', 'ís', 'áis', 'abais', 'íais', 'arais', 'ierais', ' aseis', 'ieseis', 'asteis', 'isteis', 'ados', 'idos', 'amos', 'ábamos', 'íamos', 'imos', 'áramos', 'iéramos', 'iésemos', 'ásemos'))) != '') {
+
+ token = token.slice(0, -suf.length);
+
+ }
+ }
+ }
+
+ // Always do step 3.
+ r1_txt = token.substring(r1-1);
+ r2_txt = token.substring(r2-1);
+ rv_txt = token.substring(rv-1);
+
+ if ((suf = endsinArr(rv_txt, new Array('os', 'a', 'o', 'á', 'í', 'ó'))) != '') {
+ token = token.slice(0, -suf.length);
+ } else if ((suf = endsinArr(rv_txt ,new Array('e','é'))) != '') {
+ token = token.slice(0,-1);
+ rv_txt = token.substring(rv-1);
+ if (endsin(rv_txt,'u') && endsin(token,'gu')) {
+ token = token.slice(0,-1);
+ }
+ }
+
+ return removeAccent(token);
+
+};
+
+},{"./stemmer_es":50}],13:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A very basic stemmer that performs the following steps:
+ * * Stem katakana.
+ * Inspired by:
+ * http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/analysis/kuromoji/src/java/org/apache/lucene/analysis/ja/JapaneseKatakanaStemFilter.java
+ *
+ * This script assumes input is normalized using normalizer_ja().
+ *
+ * \@todo Use .bind() in StemmerJa.prototype.attach().
+ */
+
+var Tokenizer = require('../tokenizers/tokenizer_ja');
+var stopwords = require('../util/stopwords_ja');
+
+
+
+/**
+ * @constructor
+ */
+var StemmerJa = function() {
+};
+
+
+/**
+ * Tokenize and stem a text.
+ * Stop words are excluded except if the second argument is true.
+ *
+ * @param {string} text
+ * @param {boolean} keepStops Whether to keep stop words from the output or not.
+ * @return {Array.<string>}
+ */
+StemmerJa.prototype.tokenizeAndStem = function(text, keepStops) {
+ var self = this;
+ var stemmedTokens = [];
+ var tokens = new Tokenizer().tokenize(text);
+
+ // This is probably faster than an if at each iteration.
+ if (keepStops) {
+ tokens.forEach(function(token) {
+ var resultToken = token.toLowerCase();
+ resultToken = self.stem(resultToken);
+ stemmedTokens.push(resultToken);
+ });
+ } else {
+ tokens.forEach(function(token) {
+ if (stopwords.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ resultToken = self.stem(resultToken);
+ stemmedTokens.push(resultToken);
+ }
+ });
+ }
+
+ return stemmedTokens;
+};
+
+
+/**
+ * Stem a term.
+ *
+ * @param {string} token
+ * @return {string}
+ */
+StemmerJa.prototype.stem = function(token) {
+ token = this.stemKatakana(token);
+
+ return token;
+};
+
+
+/**
+ * Remove the final prolonged sound mark on katakana if length is superior to
+ * a threshold.
+ *
+ * @param {string} token A katakana string to stem.
+ * @return {string} A katakana string stemmed.
+ */
+StemmerJa.prototype.stemKatakana = function(token) {
+ var HIRAGANA_KATAKANA_PROLONGED_SOUND_MARK = 'ー';
+ var DEFAULT_MINIMUM_LENGTH = 4;
+
+ if (token.length >= DEFAULT_MINIMUM_LENGTH
+ && token.slice(-1) === HIRAGANA_KATAKANA_PROLONGED_SOUND_MARK
+ && this.isKatakana(token)) {
+ token = token.slice(0, token.length - 1);
+ }
+ return token;
+};
+
+
+/**
+ * Is a string made of fullwidth katakana only?
+ * This implementation is the fastest I know:
+ * http://jsperf.com/string-contain-katakana-only/2
+ *
+ * @param {string} str A string.
+ * @return {boolean} True if the string has katakana only.
+ */
+StemmerJa.prototype.isKatakana = function(str) {
+ return !!str.match(/^[゠-ヿ]+$/);
+};
+
+// Expose an attach function that will patch String with new methods.
+StemmerJa.prototype.attach = function() {
+ var self = this;
+
+ String.prototype.stem = function() {
+ return self.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return self.tokenizeAndStem(this, keepStops);
+ };
+};
+
+module.exports = StemmerJa;
+
+},{"../tokenizers/tokenizer_ja":20,"../util/stopwords_ja":51}],14:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.withoutEmpty = function(array) {
+ return array.filter(function(a) {return a;});
+};
+
+AggressiveTokenizer.prototype.clearText = function(text) {
+ return text.replace(/[^a-zа-ÑÑ‘0-9]/gi, ' ').replace(/[\s\n]+/g, ' ').trim();
+};
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.withoutEmpty(this.clearText(text).split(' '));
+};
+
+},{"util":40,"./tokenizer":52}],15:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Aggressive Tokenizer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.clearEmptyString = function(array) {
+ return array.filter(function(a) {
+ return a != '';
+ });
+};
+
+AggressiveTokenizer.prototype.clearText = function(text) {
+ return text.replace(new RegExp('\.\:\+\-\=\(\)\"\'\!\?\،\,\؛\;', 'g'), ' ');
+};
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ text = this.clearText(text);
+ return this.clearEmptyString(text.split(/\s+/));
+};
+
+},{"util":40,"./tokenizer":52}],16:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel,David Przybilla
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],18:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],17:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel,David Przybilla
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require('util');
+
+var AggressiveTokenizer = function() {
+ Tokenizer.call(this);
+};
+util.inherits(AggressiveTokenizer, Tokenizer);
+
+module.exports = AggressiveTokenizer;
+
+AggressiveTokenizer.prototype.tokenize = function(text) {
+ // break a string up into an array of tokens by anything non-word
+ return this.trim(text.split(/\W+/));
+};
+
+},{"util":40,"./tokenizer":52}],20:[function(require,module,exports){
+// Original copyright:
+/*
+ Copyright (c) 2008, Taku Kudo
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the <ORGANIZATION> nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// This version:
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
+// (c) 2008 Taku Kudo <taku@chasen.org>
+// TinySegmenter is freely distributable under the terms of a new BSD licence.
+// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
+
+var Tokenizer = require('./tokenizer'),
+ normalize = require('../normalizers/normalizer_ja').normalize_ja,
+ util = require('util');
+
+
+
+/**
+ * @constructor
+ */
+var TokenizerJa = function() {
+ this.chartype_ = [
+ [/[〇一二三四五六七八ä¹å百åƒä¸‡å„„å…†]/, 'M'],
+ [/[一-鿌〆]/, 'H'],
+ [/[ã-ã‚Ÿ]/, 'I'],
+ [/[゠-ヿ]/, 'K'],
+ [/[a-zA-Z]/, 'A'],
+ [/[0-9]/, 'N']
+ ];
+
+ this.BIAS__ = -332;
+ this.BC1__ = {'HH': 6, 'II': 2461, 'KH': 406, 'OH': -1378};
+ this.BC2__ = {'AA': -3267, 'AI': 2744, 'AN': -878, 'HH': -4070, 'HM': -1711, 'HN': 4012, 'HO': 3761, 'IA': 1327, 'IH': -1184, 'II': -1332, 'IK': 1721, 'IO': 5492, 'KI': 3831, 'KK': -8741, 'MH': -3132, 'MK': 3334, 'OO': -2920};
+ this.BC3__ = {'HH': 996, 'HI': 626, 'HK': -721, 'HN': -1307, 'HO': -836, 'IH': -301, 'KK': 2762, 'MK': 1079, 'MM': 4034, 'OA': -1652, 'OH': 266};
+ this.BP1__ = {'BB': 295, 'OB': 304, 'OO': -125, 'UB': 352};
+ this.BP2__ = {'BO': 60, 'OO': -1762};
+ this.BQ1__ = {'BHH': 1150, 'BHM': 1521, 'BII': -1158, 'BIM': 886, 'BMH': 1208, 'BNH': 449, 'BOH': -91, 'BOO': -2597, 'OHI': 451, 'OIH': -296, 'OKA': 1851, 'OKH': -1020, 'OKK': 904, 'OOO': 2965};
+ this.BQ2__ = {'BHH': 118, 'BHI': -1159, 'BHM': 466, 'BIH': -919, 'BKK': -1720, 'BKO': 864, 'OHH': -1139, 'OHM': -181, 'OIH': 153, 'UHI': -1146};
+ this.BQ3__ = {'BHH': -792, 'BHI': 2664, 'BII': -299, 'BKI': 419, 'BMH': 937, 'BMM': 8335, 'BNN': 998, 'BOH': 775, 'OHH': 2174, 'OHM': 439, 'OII': 280, 'OKH': 1798, 'OKI': -793, 'OKO': -2242, 'OMH': -2402, 'OOO': 11699};
+ this.BQ4__ = {'BHH': -3895, 'BIH': 3761, 'BII': -4654, 'BIK': 1348, 'BKK': -1806, 'BMI': -3385, 'BOO': -12396, 'OAH': 926, 'OHH': 266, 'OHK': -2036, 'ONN': -973};
+ this.BW1__ = {',ã¨': 660, ',åŒ': 727, 'B1ã‚': 1404, 'B1åŒ': 542, 'ã€ã¨': 660, 'ã€åŒ': 727, 'ï½£ã¨': 1682, 'ã‚ã£': 1505, 'ã„ã†': 1743, 'ã„ã£': -2055, 'ã„ã‚‹': 672, 'ã†ã—': -4817, 'ã†ã‚“': 665, 'ã‹ã‚‰': 3472, 'ãŒã‚‰': 600, 'ã“ã†': -790, 'ã“ã¨': 2083, 'ã“ã‚“': -1262, 'ã•ã‚‰': -4143, 'ã•ã‚“': 4573, 'ã—ãŸ': 2641, 'ã—ã¦': 1104, 'ã™ã§': -3399, 'ãã“': 1977, 'ãã‚Œ': -871, 'ãŸã¡': 1122, 'ãŸã‚': 601, 'ã£ãŸ': 3463, 'ã¤ã„': -802, 'ã¦ã„': 805, 'ã¦ã': 1249, 'ã§ã': 1127, 'ã§ã™': 3445, 'ã§ã¯': 844, 'ã¨ã„': -4915, 'ã¨ã¿': 1922, 'ã©ã“': 3887, 'ãªã„': 5713, 'ãªã£': 3015, 'ãªã©': 7379, 'ãªã‚“': -1113, 'ã«ã—': 2468, 'ã«ã¯': 1498, 'ã«ã‚‚': 1671, 'ã«å¯¾': -912, 'ã®ä¸€': -501, 'ã®ä¸­': 741, 'ã¾ã›': 2448, 'ã¾ã§': 1711, 'ã¾ã¾': 2600, 'ã¾ã‚‹': -2155, 'ã‚„ã‚€': -1947, 'よã£': -2565, 'ã‚ŒãŸ': 2369, 'ã‚Œã§': -913, 'ã‚’ã—': 1860, 'を見': 731, '亡ã': -1886, '京都': 2558, 'å–ã‚Š': -2784, '大ã': -2604, '大阪': 1497, '平方': -2314, '引ã': -1336, '日本': -195, '本当': -2423, '毎日': -2113, '目指': -724};
+ this.BW2__ = {'11': -669, '..': -11822, '――': -5730, '−−': -13175, 'ã„ã†': -1609, 'ã†ã‹': 2490, 'ã‹ã—': -1350, 'ã‹ã‚‚': -602, 'ã‹ã‚‰': -7194, 'ã‹ã‚Œ': 4612, 'ãŒã„': 853, 'ãŒã‚‰': -3198, 'ããŸ': 1941, 'ããª': -1597, 'ã“ã¨': -8392, 'ã“ã®': -4193, 'ã•ã›': 4533, 'ã•ã‚Œ': 13168, 'ã•ã‚“': -3977, 'ã—ã„': -1819, 'ã—ã‹': -545, 'ã—ãŸ': 5078, 'ã—ã¦': 972, 'ã—ãª': 939, 'ãã®': -3744, 'ãŸã„': -1253, 'ãŸãŸ': -662, 'ãŸã ': -3857, 'ãŸã¡': -786, 'ãŸã¨': 1224, 'ãŸã¯': -939, 'ã£ãŸ': 4589, 'ã£ã¦': 1647, 'ã£ã¨': -2094, 'ã¦ã„': 6144, 'ã¦ã': 3640, 'ã¦ã': 2551, 'ã¦ã¯': -3110, 'ã¦ã‚‚': -3065, 'ã§ã„': 2666, 'ã§ã': -1528, 'ã§ã—': -3828, 'ã§ã™': -4761, 'ã§ã‚‚': -4203, 'ã¨ã„': 1890, 'ã¨ã“': -1746, 'ã¨ã¨': -2279, 'ã¨ã®': 720, 'ã¨ã¿': 5168, 'ã¨ã‚‚': -3941, 'ãªã„': -2488, 'ãªãŒ': -1313, 'ãªã©': -6509, 'ãªã®': 2614, 'ãªã‚“': 3099, 'ã«ãŠ': -1615, 'ã«ã—': 2748, 'ã«ãª': 2454, 'ã«ã‚ˆ': -7236, 'ã«å¯¾': -14943, 'ã«å¾“': -4688, 'ã«é–¢': -11388, 'ã®ã‹': 2093, 'ã®ã§': -7059, 'ã®ã«': -6041, 'ã®ã®': -6125, 'ã¯ã„': 1073, 'ã¯ãŒ': -1033, 'ã¯ãš': -2532, 'ã°ã‚Œ': 1813, 'ã¾ã—': -1316, 'ã¾ã§': -6621, 'ã¾ã‚Œ': 5409, 'ã‚ã¦': -3153, 'ã‚‚ã„': 2230, 'ã‚‚ã®': -10713, 'らã‹': -944, 'らã—': -1611, 'らã«': -1897, 'ã‚Šã—': 651, 'ã‚Šã¾': 1620, 'ã‚ŒãŸ': 4270, 'ã‚Œã¦': 849, 'ã‚Œã°': 4114, 'ã‚ã†': 6067, 'ã‚ã‚Œ': 7901, 'を通': -11877, 'ã‚“ã ': 728, 'ã‚“ãª': -4115, '一人': 602, '一方': -1375, '一日': 970, '一部': -1051, '上ãŒ': -4479, '会社': -1116, '出ã¦': 2163, '分ã®': -7758, 'åŒå…š': 970, 'åŒæ—¥': -913, '大阪': -2471, '委員': -1250, 'å°‘ãª': -1050, '年度': -8669, 'å¹´é–“': -1626, '府県': -2363, '手権': -1982, 'æ–°èž': -4066, '日新': -722, '日本': -7068, '日米': 3372, '曜日': -601, 'æœé®®': -2355, '本人': -2697, 'æ±äº¬': -1543, '然ã¨': -1384, '社会': -1276, 'ç«‹ã¦': -990, '第ã«': -1612, '米国': -4268};
+ this.BW3__ = {'ã‚ãŸ': -2194, 'ã‚ã‚Š': 719, 'ã‚ã‚‹': 3846, 'ã„.': -1185, 'ã„。': -1185, 'ã„ã„': 5308, 'ã„ãˆ': 2079, 'ã„ã': 3029, 'ã„ãŸ': 2056, 'ã„ã£': 1883, 'ã„ã‚‹': 5600, 'ã„ã‚': 1527, 'ã†ã¡': 1117, 'ã†ã¨': 4798, 'ãˆã¨': 1454, 'ã‹ï¼Ž': 2857, 'ã‹ã€‚': 2857, 'ã‹ã‘': -743, 'ã‹ã£': -4098, 'ã‹ã«': -669, 'ã‹ã‚‰': 6520, 'ã‹ã‚Š': -2670, 'ãŒï¼Œ': 1816, 'ãŒã€': 1816, 'ãŒã': -4855, 'ãŒã‘': -1127, 'ãŒã£': -913, 'ãŒã‚‰': -4977, 'ãŒã‚Š': -2064, 'ããŸ': 1645, 'ã‘ã©': 1374, 'ã“ã¨': 7397, 'ã“ã®': 1542, 'ã“ã‚': -2757, 'ã•ã„': -714, 'ã•ã‚’': 976, 'ã—,': 1557, 'ã—ã€': 1557, 'ã—ã„': -3714, 'ã—ãŸ': 3562, 'ã—ã¦': 1449, 'ã—ãª': 2608, 'ã—ã¾': 1200, 'ã™ï¼Ž': -1310, 'ã™ã€‚': -1310, 'ã™ã‚‹': 6521, 'ãšï¼Œ': 3426, 'ãšã€': 3426, 'ãšã«': 841, 'ãã†': 428, 'ãŸï¼Ž': 8875, 'ãŸã€‚': 8875, 'ãŸã„': -594, 'ãŸã®': 812, 'ãŸã‚Š': -1183, 'ãŸã‚‹': -853, 'ã ï¼Ž': 4098, 'ã ã€‚': 4098, 'ã ã£': 1004, 'ã£ãŸ': -4748, 'ã£ã¦': 300, 'ã¦ã„': 6240, 'ã¦ãŠ': 855, 'ã¦ã‚‚': 302, 'ã§ã™': 1437, 'ã§ã«': -1482, 'ã§ã¯': 2295, 'ã¨ã†': -1387, 'ã¨ã—': 2266, 'ã¨ã®': 541, 'ã¨ã‚‚': -3543, 'ã©ã†': 4664, 'ãªã„': 1796, 'ãªã': -903, 'ãªã©': 2135, 'ã«ï¼Œ': -1021, 'ã«ã€': -1021, 'ã«ã—': 1771, 'ã«ãª': 1906, 'ã«ã¯': 2644, 'ã®ï¼Œ': -724, 'ã®ã€': -724, 'ã®å­': -1000, 'ã¯ï¼Œ': 1337, 'ã¯ã€': 1337, 'ã¹ã': 2181, 'ã¾ã—': 1113, 'ã¾ã™': 6943, 'ã¾ã£': -1549, 'ã¾ã§': 6154, 'ã¾ã‚Œ': -793, 'らã—': 1479, 'られ': 6820, 'ã‚‹ã‚‹': 3818, 'れ,': 854, 'ã‚Œã€': 854, 'ã‚ŒãŸ': 1850, 'ã‚Œã¦': 1375, 'ã‚Œã°': -3246, 'れる': 1091, 'ã‚ã‚Œ': -605, 'ã‚“ã ': 606, 'ã‚“ã§': 798, 'カ月': 990, '会議': 860, '入り': 1232, '大会': 2217, '始ã‚': 1681, '市': 965, 'æ–°èž': -5055, '日,': 974, 'æ—¥ã€': 974, '社会': 2024};
+ this.TC1__ = {'AAA': 1093, 'HHH': 1029, 'HHM': 580, 'HII': 998, 'HOH': -390, 'HOM': -331, 'IHI': 1169, 'IOH': -142, 'IOI': -1015, 'IOM': 467, 'MMH': 187, 'OOI': -1832};
+ this.TC2__ = {'HHO': 2088, 'HII': -1023, 'HMM': -1154, 'IHI': -1965, 'KKH': 703, 'OII': -2649};
+ this.TC3__ = {'AAA': -294, 'HHH': 346, 'HHI': -341, 'HII': -1088, 'HIK': 731, 'HOH': -1486, 'IHH': 128, 'IHI': -3041, 'IHO': -1935, 'IIH': -825, 'IIM': -1035, 'IOI': -542, 'KHH': -1216, 'KKA': 491, 'KKH': -1217, 'KOK': -1009, 'MHH': -2694, 'MHM': -457, 'MHO': 123, 'MMH': -471, 'NNH': -1689, 'NNO': 662, 'OHO': -3393};
+ this.TC4__ = {'HHH': -203, 'HHI': 1344, 'HHK': 365, 'HHM': -122, 'HHN': 182, 'HHO': 669, 'HIH': 804, 'HII': 679, 'HOH': 446, 'IHH': 695, 'IHO': -2324, 'IIH': 321, 'III': 1497, 'IIO': 656, 'IOO': 54, 'KAK': 4845, 'KKA': 3386, 'KKK': 3065, 'MHH': -405, 'MHI': 201, 'MMH': -241, 'MMM': 661, 'MOM': 841};
+ this.TQ1__ = {'BHHH': -227, 'BHHI': 316, 'BHIH': -132, 'BIHH': 60, 'BIII': 1595, 'BNHH': -744, 'BOHH': 225, 'BOOO': -908, 'OAKK': 482, 'OHHH': 281, 'OHIH': 249, 'OIHI': 200, 'OIIH': -68};
+ this.TQ2__ = {'BIHH': -1401, 'BIII': -1033, 'BKAK': -543, 'BOOO': -5591};
+ this.TQ3__ = {'BHHH': 478, 'BHHM': -1073, 'BHIH': 222, 'BHII': -504, 'BIIH': -116, 'BIII': -105, 'BMHI': -863, 'BMHM': -464, 'BOMH': 620, 'OHHH': 346, 'OHHI': 1729, 'OHII': 997, 'OHMH': 481, 'OIHH': 623, 'OIIH': 1344, 'OKAK': 2792, 'OKHH': 587, 'OKKA': 679, 'OOHH': 110, 'OOII': -685};
+ this.TQ4__ = {'BHHH': -721, 'BHHM': -3604, 'BHII': -966, 'BIIH': -607, 'BIII': -2181, 'OAAA': -2763, 'OAKK': 180, 'OHHH': -294, 'OHHI': 2446, 'OHHO': 480, 'OHIH': -1573, 'OIHH': 1935, 'OIHI': -493, 'OIIH': 626, 'OIII': -4007, 'OKAK': -8156};
+ this.TW1__ = {'ã«ã¤ã„': -4681, 'æ±äº¬éƒ½': 2026};
+ this.TW2__ = {'ã‚る程': -2049, 'ã„ã£ãŸ': -1256, 'ã“ã‚ãŒ': -2434, 'ã—ょã†': 3873, 'ãã®å¾Œ': -4430, 'ã ã£ã¦': -1049, 'ã¦ã„ãŸ': 1833, 'ã¨ã—ã¦': -4657, 'ã¨ã‚‚ã«': -4517, 'ã‚‚ã®ã§': 1882, '一気ã«': -792, 'åˆã‚ã¦': -1512, 'åŒæ™‚ã«': -8097, '大ããª': -1255, '対ã—ã¦': -2721, '社会党': -3216};
+ this.TW3__ = {'ã„ãŸã ': -1734, 'ã—ã¦ã„': 1314, 'ã¨ã—ã¦': -4314, 'ã«ã¤ã„': -5483, 'ã«ã¨ã£': -5989, 'ã«å½“ãŸ': -6247, 'ã®ã§ï¼Œ': -727, 'ã®ã§ã€': -727, 'ã®ã‚‚ã®': -600, 'ã‚Œã‹ã‚‰': -3752, 'å二月': -2287};
+ this.TW4__ = {'ã„ã†ï¼Ž': 8576, 'ã„ã†ã€‚': 8576, 'ã‹ã‚‰ãª': -2348, 'ã—ã¦ã„': 2958, 'ãŸãŒï¼Œ': 1516, 'ãŸãŒã€': 1516, 'ã¦ã„ã‚‹': 1538, 'ã¨ã„ã†': 1349, 'ã¾ã—ãŸ': 5543, 'ã¾ã›ã‚“': 1097, 'よã†ã¨': -4258, 'よるã¨': 5865};
+ this.UC1__ = {'A': 484, 'K': 93, 'M': 645, 'O': -505};
+ this.UC2__ = {'A': 819, 'H': 1059, 'I': 409, 'M': 3987, 'N': 5775, 'O': 646};
+ this.UC3__ = {'A': -1370, 'I': 2311};
+ this.UC4__ = {'A': -2643, 'H': 1809, 'I': -1032, 'K': -3450, 'M': 3565, 'N': 3876, 'O': 6646};
+ this.UC5__ = {'H': 313, 'I': -1238, 'K': -799, 'M': 539, 'O': -831};
+ this.UC6__ = {'H': -506, 'I': -253, 'K': 87, 'M': 247, 'O': -387};
+ this.UP1__ = {'O': -214};
+ this.UP2__ = {'B': 69, 'O': 935};
+ this.UP3__ = {'B': 189};
+ this.UQ1__ = {'BH': 21, 'BI': -12, 'BK': -99, 'BN': 142, 'BO': -56, 'OH': -95, 'OI': 477, 'OK': 410, 'OO': -2422};
+ this.UQ2__ = {'BH': 216, 'BI': 113, 'OK': 1759};
+ this.UQ3__ = {'BA': -479, 'BH': 42, 'BI': 1913, 'BK': -7198, 'BM': 3160, 'BN': 6427, 'BO': 14761, 'OI': -827, 'ON': -3212};
+ this.UW1__ = {',': 156, 'ã€': 156, 'ï½¢': -463, 'ã‚': -941, 'ã†': -127, 'ãŒ': -553, 'ã': 121, 'ã“': 505, 'ã§': -201, 'ã¨': -547, 'ã©': -123, 'ã«': -789, 'ã®': -185, 'ã¯': -847, 'ã‚‚': -466, 'ã‚„': -470, 'よ': 182, 'ら': -292, 'ã‚Š': 208, 'ã‚Œ': 169, 'ã‚’': -446, 'ã‚“': -137, '・': -135, '主': -402, '京': -268, '区': -912, 'åˆ': 871, '国': -460, '大': 561, '委': 729, '市': -411, 'æ—¥': -141, 'ç†': 361, '生': -408, '県': -386, '都': -718};
+ this.UW2__ = {',': -829, 'ã€': -829, '〇': 892, 'ï½¢': -645, 'ï½£': 3145, 'ã‚': -538, 'ã„': 505, 'ã†': 134, 'ãŠ': -502, 'ã‹': 1454, 'ãŒ': -856, 'ã': -412, 'ã“': 1141, 'ã•': 878, 'ã–': 540, 'ã—': 1529, 'ã™': -675, 'ã›': 300, 'ã': -1011, 'ãŸ': 188, 'ã ': 1837, 'ã¤': -949, 'ã¦': -291, 'ã§': -268, 'ã¨': -981, 'ã©': 1273, 'ãª': 1063, 'ã«': -1764, 'ã®': 130, 'ã¯': -409, 'ã²': -1273, 'ã¹': 1261, 'ã¾': 600, 'ã‚‚': -1263, 'ã‚„': -402, 'よ': 1639, 'ã‚Š': -579, 'ã‚‹': -694, 'ã‚Œ': 571, 'ã‚’': -2516, 'ã‚“': 2095, 'ã‚¢': -587, 'ã‚«': 306, 'ã‚­': 568, 'ッ': 831, '三': -758, 'ä¸': -2150, '世': -302, '中': -968, '主': -861, '事': 492, '人': -123, '会': 978, 'ä¿': 362, 'å…¥': 548, 'åˆ': -3025, '副': -1566, '北': -3414, '区': -422, '大': -1769, '天': -865, '太': -483, 'å­': -1519, 'å­¦': 760, '実': 1023, 'å°': -2009, '市': -813, 'å¹´': -1060, 'å¼·': 1067, '手': -1519, 'æº': -1033, '政': 1522, 'æ–‡': -1355, 'æ–°': -1682, 'æ—¥': -1815, '明': -1462, '最': -630, 'æœ': -1843, '本': -1650, 'æ±': -931, 'æžœ': -665, '次': -2378, 'æ°‘': -180, 'æ°—': -1740, 'ç†': 752, '発': 529, 'ç›®': -1584, '相': -242, '県': -1165, 'ç«‹': -763, '第': 810, 'ç±³': 509, '自': -1353, 'è¡Œ': 838, '西': -744, '見': -3874, '調': 1010, 'è­°': 1198, 'è¾¼': 3041, 'é–‹': 1758, 'é–“': -1257};
+ this.UW3__ = {'1': -800, ',': 4889, '−': -1723, 'ã€': 4889, '々': -2311, '〇': 5827, 'ï½£': 2670, '〓': -3573, 'ã‚': -2696, 'ã„': 1006, 'ã†': 2342, 'ãˆ': 1983, 'ãŠ': -4864, 'ã‹': -1163, 'ãŒ': 3271, 'ã': 1004, 'ã‘': 388, 'ã’': 401, 'ã“': -3552, 'ã”': -3116, 'ã•': -1058, 'ã—': -395, 'ã™': 584, 'ã›': 3685, 'ã': -5228, 'ãŸ': 842, 'ã¡': -521, 'ã£': -1444, 'ã¤': -1081, 'ã¦': 6167, 'ã§': 2318, 'ã¨': 1691, 'ã©': -899, 'ãª': -2788, 'ã«': 2745, 'ã®': 4056, 'ã¯': 4555, 'ã²': -2171, 'ãµ': -1798, 'ã¸': 1199, 'ã»': -5516, 'ã¾': -4384, 'ã¿': -120, 'ã‚': 1205, 'ã‚‚': 2323, 'ã‚„': -788, 'よ': -202, 'ら': 727, 'ã‚Š': 649, 'ã‚‹': 5905, 'ã‚Œ': 2773, 'ã‚': -1207, 'ã‚’': 6620, 'ã‚“': -518, 'ã‚¢': 551, 'ã‚°': 1319, 'ス': 874, 'ッ': -1350, 'ト': 521, 'ム': 1109, 'ル': 1591, 'ロ': 2201, 'ン': 278, '・': -3794, '一': -1619, '下': -1759, '世': -2087, '両': 3815, '中': 653, '主': -758, '予': -1193, '二': 974, '人': 2742, '今': 792, 'ä»–': 1889, '以': -1368, '低': 811, '何': 4265, '作': -361, 'ä¿': -2439, 'å…ƒ': 4858, 'å…š': 3593, 'å…¨': 1574, 'å…¬': -3030, 'å…­': 755, 'å…±': -1880, '円': 5807, 'å†': 3095, '分': 457, 'åˆ': 2475, '別': 1129, 'å‰': 2286, '副': 4437, '力': 365, 'å‹•': -949, 'å‹™': -1872, '化': 1327, '北': -1038, '区': 4646, 'åƒ': -2309, 'åˆ': -783, 'å”': -1006, 'å£': 483, 'å³': 1233, 'å„': 3588, 'åˆ': -241, 'åŒ': 3906, 'å’Œ': -837, 'å“¡': 4513, '国': 642, 'åž‹': 1389, 'å ´': 1219, '外': -241, '妻': 2016, 'å­¦': -1356, '安': -423, '実': -1008, '家': 1078, 'å°': -513, 'å°‘': -3102, 'å·ž': 1155, '市': 3197, 'å¹³': -1804, 'å¹´': 2416, '広': -1030, '府': 1605, '度': 1452, '建': -2352, '当': -3885, 'å¾—': 1905, 'æ€': -1291, '性': 1822, '戸': -488, '指': -3973, '政': -2013, 'æ•™': -1479, 'æ•°': 3222, 'æ–‡': -1489, 'æ–°': 1764, 'æ—¥': 2099, 'æ—§': 5792, '昨': -661, '時': -1248, '曜': -951, '最': -937, '月': 4125, '期': 360, 'æŽ': 3094, 'æ‘': 364, 'æ±': -805, 'æ ¸': 5156, '森': 2438, '業': 484, 'æ°': 2613, 'æ°‘': -1694, '決': -1073, '法': 1868, 'æµ·': -495, 'ç„¡': 979, '物': 461, '特': -3850, '生': -273, '用': 914, '町': 1215, 'çš„': 7313, 'ç›´': -1835, 'çœ': 792, '県': 6293, '知': -1528, 'ç§': 4231, '税': 401, 'ç«‹': -960, '第': 1201, 'ç±³': 7767, 'ç³»': 3066, 'ç´„': 3663, 'ç´š': 1384, 'çµ±': -4229, 'ç·': 1163, 'ç·š': 1255, '者': 6457, '能': 725, '自': -2869, '英': 785, '見': 1044, '調': -562, '財': -733, 'è²»': 1777, '車': 1835, 'è»': 1375, 'è¾¼': -1504, '通': -1136, 'é¸': -681, '郎': 1026, '郡': 4404, '部': 1200, '金': 2163, 'é•·': 421, 'é–‹': -1432, 'é–“': 1302, 'é–¢': -1282, '雨': 2009, 'é›»': -1045, 'éž': 2066, '駅': 1620};
+ this.UW4__ = {',': 3930, '.': 3508, '―': -4841, 'ã€': 3930, '。': 3508, '〇': 4999, 'ï½¢': 1895, 'ï½£': 3798, '〓': -5156, 'ã‚': 4752, 'ã„': -3435, 'ã†': -640, 'ãˆ': -2514, 'ãŠ': 2405, 'ã‹': 530, 'ãŒ': 6006, 'ã': -4482, 'ãŽ': -3821, 'ã': -3788, 'ã‘': -4376, 'ã’': -4734, 'ã“': 2255, 'ã”': 1979, 'ã•': 2864, 'ã—': -843, 'ã˜': -2506, 'ã™': -731, 'ãš': 1251, 'ã›': 181, 'ã': 4091, 'ãŸ': 5034, 'ã ': 5408, 'ã¡': -3654, 'ã£': -5882, 'ã¤': -1659, 'ã¦': 3994, 'ã§': 7410, 'ã¨': 4547, 'ãª': 5433, 'ã«': 6499, 'ã¬': 1853, 'ã­': 1413, 'ã®': 7396, 'ã¯': 8578, 'ã°': 1940, 'ã²': 4249, 'ã³': -4134, 'ãµ': 1345, 'ã¸': 6665, 'ã¹': -744, 'ã»': 1464, 'ã¾': 1051, 'ã¿': -2082, 'ã‚€': -882, 'ã‚': -5046, 'ã‚‚': 4169, 'ゃ': -2666, 'ã‚„': 2795, 'ょ': -1544, 'よ': 3351, 'ら': -2922, 'ã‚Š': -9726, 'ã‚‹': -14896, 'ã‚Œ': -2613, 'ã‚': -4570, 'ã‚': -1783, 'ã‚’': 13150, 'ã‚“': -2352, 'ã‚«': 2145, 'コ': 1789, 'ã‚»': 1287, 'ッ': -724, 'ト': -403, 'メ': -1635, 'ラ': -881, 'リ': -541, 'ル': -856, 'ン': -3637, '・': -4371, 'ー': -11870, '一': -2069, '中': 2210, '予': 782, '事': -190, '井': -1768, '人': 1036, '以': 544, '会': 950, '体': -1286, '作': 530, 'å´': 4292, 'å…ˆ': 601, 'å…š': -2006, 'å…±': -1212, '内': 584, '円': 788, 'åˆ': 1347, 'å‰': 1623, '副': 3879, '力': -302, 'å‹•': -740, 'å‹™': -2715, '化': 776, '区': 4517, 'å”': 1013, 'å‚': 1555, 'åˆ': -1834, 'å’Œ': -681, 'å“¡': -910, '器': -851, '回': 1500, '国': -619, '園': -1200, '地': 866, 'å ´': -1410, 'å¡': -2094, '士': -1413, '多': 1067, '大': 571, 'å­': -4802, 'å­¦': -1397, '定': -1057, '寺': -809, 'å°': 1910, '屋': -1328, 'å±±': -1500, '島': -2056, 'å·': -2667, '市': 2771, 'å¹´': 374, 'åº': -4556, '後': 456, '性': 553, 'æ„Ÿ': 916, '所': -1566, '支': 856, '改': 787, '政': 2182, 'æ•™': 704, 'æ–‡': 522, 'æ–¹': -856, 'æ—¥': 1798, '時': 1829, '最': 845, '月': -9066, '木': -485, 'æ¥': -442, 'æ ¡': -360, '業': -1043, 'æ°': 5388, 'æ°‘': -2716, 'æ°—': -910, 'æ²¢': -939, '済': -543, '物': -735, '率': 672, 'çƒ': -1267, '生': -1286, '産': -1101, 'ç”°': -2900, '町': 1826, 'çš„': 2586, 'ç›®': 922, 'çœ': -3485, '県': 2997, '空': -867, 'ç«‹': -2112, '第': 788, 'ç±³': 2937, 'ç³»': 786, 'ç´„': 2171, '経': 1146, 'çµ±': -1169, 'ç·': 940, 'ç·š': -994, 'ç½²': 749, '者': 2145, '能': -730, '般': -852, 'è¡Œ': -792, 'è¦': 792, 'è­¦': -1184, 'è­°': -244, 'è°·': -1000, '賞': 730, '車': -1481, 'è»': 1158, '輪': -1433, 'è¾¼': -3370, 'è¿‘': 929, 'é“': -1291, 'é¸': 2596, '郎': -4866, '都': 1192, '野': -1100, '銀': -2213, 'é•·': 357, 'é–“': -2344, '院': -2297, 'éš›': -2604, 'é›»': -878, 'é ˜': -1659, 'é¡Œ': -792, '館': -1984, '首': 1749, '高': 2120};
+ this.UW5__ = {'1': -514, ',': 465, '.': -299, 'E2': -32768, 'ï¼½': -2762, 'ã€': 465, '。': -299, 'ï½¢': 363, 'ã‚': 1655, 'ã„': 331, 'ã†': -503, 'ãˆ': 1199, 'ãŠ': 527, 'ã‹': 647, 'ãŒ': -421, 'ã': 1624, 'ãŽ': 1971, 'ã': 312, 'ã’': -983, 'ã•': -1537, 'ã—': -1371, 'ã™': -852, 'ã ': -1186, 'ã¡': 1093, 'ã£': 52, 'ã¤': 921, 'ã¦': -18, 'ã§': -850, 'ã¨': -127, 'ã©': 1682, 'ãª': -787, 'ã«': -1224, 'ã®': -635, 'ã¯': -578, 'ã¹': 1001, 'ã¿': 502, 'ã‚': 865, 'ゃ': 3350, 'ょ': 854, 'ã‚Š': -208, 'ã‚‹': 429, 'ã‚Œ': 504, 'ã‚': 419, 'ã‚’': -1264, 'ã‚“': 327, 'イ': 241, 'ル': 451, 'ン': -343, '中': -871, '京': 722, '会': -1153, 'å…š': -654, 'å‹™': 3519, '区': -901, 'å‘Š': 848, 'å“¡': 2104, '大': -1296, 'å­¦': -548, '定': 1785, 'åµ': -1304, '市': -2991, '席': 921, 'å¹´': 1763, 'æ€': 872, '所': -814, '挙': 1618, 'æ–°': -1682, 'æ—¥': 218, '月': -4353, '査': 932, 'æ ¼': 1356, 'æ©Ÿ': -1508, 'æ°': -1347, 'ç”°': 240, '町': -3912, 'çš„': -3149, '相': 1319, 'çœ': -1052, '県': -4003, 'ç ”': -997, '社': -278, '空': -813, 'çµ±': 1955, '者': -2233, '表': 663, '語': -1073, 'è­°': 1219, 'é¸': -1018, '郎': -368, 'é•·': 786, 'é–“': 1191, 'é¡Œ': 2368, '館': -689};
+ this.UW6__ = {'1': -270, ',': 227, '.': 808, 'E1': 306, 'ã€': 227, '。': 808, 'ã‚': -307, 'ã†': 189, 'ã‹': 241, 'ãŒ': -73, 'ã': -121, 'ã“': -200, 'ã˜': 1782, 'ã™': 383, 'ãŸ': -428, 'ã£': 573, 'ã¦': -1014, 'ã§': 101, 'ã¨': -105, 'ãª': -253, 'ã«': -149, 'ã®': -417, 'ã¯': -236, 'ã‚‚': -206, 'ã‚Š': 187, 'ã‚‹': -135, 'ã‚’': 195, 'ル': -673, 'ン': -496, '一': -277, '中': 201, '件': -800, '会': 624, 'å‰': 302, '区': 1792, 'å“¡': -1212, '委': 798, 'å­¦': -960, '市': 887, '広': -695, '後': 535, '業': -697, '相': 753, '社': -507, 'ç¦': 974, '空': -822, '者': 1811, '連': 463, '郎': 1082};
+
+ return this;
+};
+
+util.inherits(TokenizerJa, Tokenizer);
+
+
+/**
+ * @param {string} str
+ * @return {string}
+ * @private
+ */
+TokenizerJa.prototype.ctype_ = function(str) {
+ for (var i = 0, length = this.chartype_.length; i < length; i++) {
+ if (str.match(this.chartype_[i][0])) {
+ return this.chartype_[i][1];
+ }
+ }
+ return 'O';
+};
+
+
+/**
+ * @param {string} v
+ * @return {number}
+ * @private
+ */
+TokenizerJa.prototype.ts_ = function(v) {
+ if (v) { return v; }
+ return 0;
+};
+
+
+/**
+ * Remove punctuations signs from tokens.
+ *
+ * @param {Array.<string>} tokens An array of tokens.
+ * @return {Array.<string>} An array of tokens.
+ * @private
+ */
+TokenizerJa.prototype.removePuncTokens = function(tokens) {
+ return tokens
+ .map(function(token) {
+ return token.replace(/[_ï¼ãƒ»ï¼Œã€ï¼›ï¼šï¼ï¼Ÿï¼Žã€‚()[]{ï½ï½¢ï½£ï¼ ï¼Šï¼¼ï¼ï¼†ï¼ƒï¼…`^+<ï¼ï¼žï½œï½žâ‰ªâ‰«â”€ï¼„"_\-ï½¥,、;:!?.。()[\]{}「ã€@*\/&#%`^+<=>|~«»$"\s]+/g, '');
+ })
+ .filter(function(token) {
+ return token != '';
+ });
+};
+
+
+/**
+ * @param {string} text
+ * @return {Array.<string>}
+ */
+TokenizerJa.prototype.tokenize = function(text) {
+ if (text == null || text == undefined || text == '') {
+ return [];
+ }
+ text = normalize(text);
+ var result = [];
+ var seg = ['B3', 'B2', 'B1'];
+ var ctype = ['O', 'O', 'O'];
+ var o = text.split('');
+ var i;
+ var length;
+ for (i = 0, length = o.length; i < length; ++i) {
+ seg.push(o[i]);
+ ctype.push(this.ctype_(o[i]));
+ }
+ seg.push('E1');
+ seg.push('E2');
+ seg.push('E3');
+ ctype.push('O');
+ ctype.push('O');
+ ctype.push('O');
+ var word = seg[3];
+ var p1 = 'U';
+ var p2 = 'U';
+ var p3 = 'U';
+ for (i = 4, length = seg.length - 3; i < length; ++i) {
+ var score = this.BIAS__;
+ var w1 = seg[i - 3];
+ var w2 = seg[i - 2];
+ var w3 = seg[i - 1];
+ var w4 = seg[i];
+ var w5 = seg[i + 1];
+ var w6 = seg[i + 2];
+ var c1 = ctype[i - 3];
+ var c2 = ctype[i - 2];
+ var c3 = ctype[i - 1];
+ var c4 = ctype[i];
+ var c5 = ctype[i + 1];
+ var c6 = ctype[i + 2];
+ score += this.ts_(this.UP1__[p1]);
+ score += this.ts_(this.UP2__[p2]);
+ score += this.ts_(this.UP3__[p3]);
+ score += this.ts_(this.BP1__[p1 + p2]);
+ score += this.ts_(this.BP2__[p2 + p3]);
+ score += this.ts_(this.UW1__[w1]);
+ score += this.ts_(this.UW2__[w2]);
+ score += this.ts_(this.UW3__[w3]);
+ score += this.ts_(this.UW4__[w4]);
+ score += this.ts_(this.UW5__[w5]);
+ score += this.ts_(this.UW6__[w6]);
+ score += this.ts_(this.BW1__[w2 + w3]);
+ score += this.ts_(this.BW2__[w3 + w4]);
+ score += this.ts_(this.BW3__[w4 + w5]);
+ score += this.ts_(this.TW1__[w1 + w2 + w3]);
+ score += this.ts_(this.TW2__[w2 + w3 + w4]);
+ score += this.ts_(this.TW3__[w3 + w4 + w5]);
+ score += this.ts_(this.TW4__[w4 + w5 + w6]);
+ score += this.ts_(this.UC1__[c1]);
+ score += this.ts_(this.UC2__[c2]);
+ score += this.ts_(this.UC3__[c3]);
+ score += this.ts_(this.UC4__[c4]);
+ score += this.ts_(this.UC5__[c5]);
+ score += this.ts_(this.UC6__[c6]);
+ score += this.ts_(this.BC1__[c2 + c3]);
+ score += this.ts_(this.BC2__[c3 + c4]);
+ score += this.ts_(this.BC3__[c4 + c5]);
+ score += this.ts_(this.TC1__[c1 + c2 + c3]);
+ score += this.ts_(this.TC2__[c2 + c3 + c4]);
+ score += this.ts_(this.TC3__[c3 + c4 + c5]);
+ score += this.ts_(this.TC4__[c4 + c5 + c6]);
+ //score += this.ts_(this.TC5__[c4 + c5 + c6]);
+ score += this.ts_(this.UQ1__[p1 + c1]);
+ score += this.ts_(this.UQ2__[p2 + c2]);
+ score += this.ts_(this.UQ3__[p3 + c3]);
+ score += this.ts_(this.BQ1__[p2 + c2 + c3]);
+ score += this.ts_(this.BQ2__[p2 + c3 + c4]);
+ score += this.ts_(this.BQ3__[p3 + c2 + c3]);
+ score += this.ts_(this.BQ4__[p3 + c3 + c4]);
+ score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
+ score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
+ score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
+ score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
+ var p = 'O';
+ if (score > 0) {
+ result.push(word);
+ word = '';
+ p = 'B';
+ }
+ p1 = p2;
+ p2 = p3;
+ p3 = p;
+ word += seg[i];
+ }
+ result.push(word);
+
+ result = this.removePuncTokens(result);
+
+ return result;
+};
+
+module.exports = TokenizerJa;
+
+},{"util":40,"./tokenizer":52,"../normalizers/normalizer_ja":37}],24:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var SingularPluralInflector = require('./singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('./form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ }
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ }
+}
+
+var NounInflector = function() {
+ this.ambiguous = [
+ 'bison', 'bream', 'carp', 'chassis', 'cod', 'corps', 'debris', 'deer',
+ 'diabetes', 'equipment', 'elk', 'fish', 'flounder', 'gallows', 'graffiti',
+ 'headquarters', 'herpes', 'highjinks', 'homework', 'information',
+ 'mackerel', 'mews', 'money', 'news', 'rice', 'rabies', 'salmon', 'series',
+ 'sheep', 'shrimp', 'species', 'swine', 'trout', 'tuna', 'whiting', 'wildebeest'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular("child", "children");
+ this.addIrregular("man", "men");
+ this.addIrregular("person", "people");
+ this.addIrregular("sex", "sexes");
+ this.addIrregular("mouse", "mice");
+ this.addIrregular("ox", "oxen");
+ this.addIrregular("foot", "feet");
+ this.addIrregular("tooth", "teeth");
+ this.addIrregular("goose", "geese");
+
+ // see if it is possible to unify the creation of both the singular and
+ // plural regexes or maybe even just have one list. with a complete list
+ // of rules it may only be possible for some regular forms, but worth a shot
+ this.pluralForms.regularForms.push([/y$/i, 'ies']);
+ this.pluralForms.regularForms.push([/ife$/i, 'ives']);
+ this.pluralForms.regularForms.push([/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae']);
+ this.pluralForms.regularForms.push([/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i']);
+ this.pluralForms.regularForms.push([/(buffal|tomat)o$/i, '$1oes']);
+ this.pluralForms.regularForms.push([/(sis)$/i, 'ses']);
+ this.pluralForms.regularForms.push([/(matr|vert|ind)(ix|ex)$/i, '$1ices']);
+ this.pluralForms.regularForms.push([/(x|ch|ss|sh|s|z)$/i, '$1es']);
+ this.pluralForms.regularForms.push([/^(?!talis|.*hu)(.*)man$/i, '$1men']);
+ this.pluralForms.regularForms.push([/(.*)/i, '$1s']);
+
+ this.singularForms.regularForms.push([/([^v])ies$/i, '$1y']);
+ this.singularForms.regularForms.push([/ives$/i, 'ife']);
+ this.singularForms.regularForms.push([/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a']);
+ this.singularForms.regularForms.push([/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us']);
+ this.singularForms.regularForms.push([/(buffal|tomat)(oes)$/i, '$1o']);
+ this.singularForms.regularForms.push([/(analy|naly|synop|parenthe|diagno|the)ses$/i, '$1sis']);
+ this.singularForms.regularForms.push([/(vert|ind)(ices)$/i, '$1ex']);
+ // our pluralizer won''t cause this form of appendix (appendicies)
+ // but we should handle it
+ this.singularForms.regularForms.push([/(matr|append)(ices)$/i, '$1ix']);
+ this.singularForms.regularForms.push([/(x|ch|ss|sh|s|z)es$/i, '$1']);
+ this.singularForms.regularForms.push([/men$/i, 'man']);
+ this.singularForms.regularForms.push([/s$/i, '']);
+
+ this.pluralize = function (token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"./singular_plural_inflector":53,"./form_set":54}],27:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+ SingularPluralInflector = require('./singular_plural_inflector'),
+ FormSet = require('./form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizePresentVerb = function() {
+ return inflector.singularize(this);
+ }
+
+ String.prototype.pluralizePresentVerb = function() {
+ return inflector.pluralize(this);
+ }
+}
+
+var VerbInflector = function() {
+ this.ambiguous = [
+ 'will'
+ ];
+
+ this.attach = attach;
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.addIrregular("am", "are");
+ this.addIrregular("is", "are");
+ this.addIrregular("was", "were");
+
+ this.singularForms.regularForms.push([/ed$/i, 'ed']);
+ this.singularForms.regularForms.push([/ss$/i, 'sses']);
+ this.singularForms.regularForms.push([/x$/i, 'xes']);
+ this.singularForms.regularForms.push([/(h|z|o)$/i, '$1es']);
+ this.singularForms.regularForms.push([/$zz/i, 'zzes']);
+ this.singularForms.regularForms.push([/$/i, 's']);
+
+ this.pluralForms.regularForms.push([/sses$/i, 'ss']);
+ this.pluralForms.regularForms.push([/xes$/i, 'x']);
+ this.pluralForms.regularForms.push([/([cs])hes$/i, '$1h']);
+ this.pluralForms.regularForms.push([/zzes$/i, 'zz']);
+ this.pluralForms.regularForms.push([/([^h|z|o])es$/i, '$1e']);
+ this.pluralForms.regularForms.push([/e?s$/i, '']);
+};
+
+util.inherits(VerbInflector, SingularPluralInflector);
+
+module.exports = VerbInflector;
+
+},{"util":40,"./singular_plural_inflector":53,"./form_set":54}],37:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * Normalize Japanese inputs and expose function to perform several conversions.
+ *
+ * Note: The space character is treated like a roman character as it usually
+ * has the same width as them in Japanese texts.
+ *
+ * \@todo Replace characters range from ㈠ to ㉃, ㊀ to ㊰ and ㇰ to ㇿ.
+ * \@todo Lazy initializations of conversionTables and converters.
+ * \@todo Would fixHalfwidthKana be useful?
+ *
+ * Descriptions of functions exposed:
+ * normalizeJapanese 「全角ã€è‹±å­—・数字を「åŠè§’ã€ã€ã€ŒåŠè§’ã€è¨˜ãƒ»ã‚«ã‚¿ã‚«ãƒŠã‚’「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.alphabet 「全角ã€è‹±å­—を「åŠè§’ã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.alphabet 「åŠè§’ã€è‹±å­—を「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.numbers 「全角ã€æ•°å­—を「åŠè§’ã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.numbers 「åŠè§’ã€æ•°å­—を「全角ã€ã«å¤‰æ› 「全角ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’「åŠè§’ã€
+ * converters.fullwidthToHalfwidth.punctuation 「全角ã€è¨˜å·ã‚’「åŠè§’ã€ã«å¤‰æ› 「åŠè§’ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚’「全角ã€
+ * converters.halfwidthToFullwidth.punctuation 「åŠè§’ã€è¨˜å·ã‚’「全角ã€ã«å¤‰æ›
+ * converters.fullwidthToHalfwidth.katakana 「全角カタカナã€ã‚’「åŠè§’カタカナã€ã«å¤‰æ›
+ * converters.halfwidthToFullwidth.katakana 「åŠè§’カタカナã€ã‚’「全角カタカナã€ã«å¤‰æ›
+ * converters.hiraganaToKatakana 「カタカナã€ã‚’「ã²ã‚‰ãŒãªã€ã«å¤‰æ›
+ * converters.katakanaToHiragana 「ã²ã‚‰ãŒãªã€ã‚’「カタカナã€ã«å¤‰æ›
+ */
+
+var flip = require('../util/utils.js').flip;
+var merge = require('../util/utils.js').merge;
+var replacer = require('../util/utils').replacer;
+
+// From http://fernweh.jp/b/mb_convert_kana_js/
+var conversionTables = {
+ fullwidthToHalfwidth: {
+ alphabet: {
+ 'ï½': 'a',
+ 'b': 'b',
+ 'c': 'c',
+ 'd': 'd',
+ 'ï½…': 'e',
+ 'f': 'f',
+ 'g': 'g',
+ 'h': 'h',
+ 'i': 'i',
+ 'j': 'j',
+ 'k': 'k',
+ 'l': 'l',
+ 'ï½': 'm',
+ 'n': 'n',
+ 'ï½': 'o',
+ 'ï½': 'p',
+ 'q': 'q',
+ 'ï½’': 'r',
+ 's': 's',
+ 'ï½”': 't',
+ 'u': 'u',
+ 'ï½–': 'v',
+ 'ï½—': 'w',
+ 'x': 'x',
+ 'ï½™': 'y',
+ 'z': 'z',
+ 'A': 'A',
+ 'ï¼¢': 'B',
+ 'ï¼£': 'C',
+ 'D': 'D',
+ 'ï¼¥': 'E',
+ 'F': 'F',
+ 'G': 'G',
+ 'H': 'H',
+ 'I': 'I',
+ 'J': 'J',
+ 'K': 'K',
+ 'L': 'L',
+ 'ï¼­': 'M',
+ 'ï¼®': 'N',
+ 'O': 'O',
+ 'ï¼°': 'P',
+ 'ï¼±': 'Q',
+ 'ï¼²': 'R',
+ 'ï¼³': 'S',
+ 'ï¼´': 'T',
+ 'ï¼µ': 'U',
+ 'V': 'V',
+ 'ï¼·': 'W',
+ 'X': 'X',
+ 'ï¼¹': 'Y',
+ 'Z': 'Z',
+ ' ': ' ' // Fullwidth space
+ },
+
+ numbers: {
+ 'ï¼': '0',
+ '1': '1',
+ 'ï¼’': '2',
+ '3': '3',
+ 'ï¼”': '4',
+ '5': '5',
+ 'ï¼–': '6',
+ 'ï¼—': '7',
+ '8': '8',
+ 'ï¼™': '9'
+ },
+
+ punctuation: {
+ '_': '_',
+ 'ï¼': '-',
+ '・': '・',
+ ',': ',',
+ 'ã€': '、',
+ 'ï¼›': ';',
+ ':': ':',
+ 'ï¼': '!',
+ '?': '?',
+ '.': '.',
+ '。': '。',
+ '(': '(',
+ ')': ')',
+ 'ï¼»': '[',
+ 'ï¼½': ']',
+ 'ï½›': '{',
+ 'ï½': '}',
+ '「': '「',
+ 'ã€': 'ï½£',
+ 'ï¼ ': '@',
+ '*': '*',
+ 'ï¼¼': '\\',
+ 'ï¼': '/',
+ '&': '&',
+ '#': '#',
+ 'ï¼…': '%',
+ 'ï½€': '`',
+ 'ï¼¾': '^',
+ '+': '+',
+ '<': '<',
+ 'ï¼': '=',
+ '>': '>',
+ '|': '|',
+ '~': '~',
+ '≪': '«',
+ '≫': '»',
+ '─': '-',
+ '$': '$',
+ '"': '"'
+ },
+
+ katakana: {
+ '゛': '゙',
+ '゜': '゚',
+ 'ー': 'ー',
+
+ 'ヴ': 'ヴ',
+ 'ガ': 'ガ',
+ 'ギ': 'ギ',
+ 'グ': 'グ',
+ 'ゲ': 'ゲ',
+ 'ゴ': 'ゴ',
+ 'ザ': 'ザ',
+ 'ジ': 'ジ',
+ 'ズ': 'ズ',
+ 'ゼ': 'ゼ',
+ 'ゾ': 'ゾ',
+ 'ダ': 'ダ',
+ 'ヂ': 'ï¾ï¾ž',
+ 'ヅ': 'ヅ',
+ 'デ': 'デ',
+ 'ド': 'ド',
+ 'ãƒ': 'バ',
+ 'パ': 'パ',
+ 'ビ': 'ビ',
+ 'ピ': 'ピ',
+ 'ブ': 'ブ',
+ 'プ': 'プ',
+ 'ベ': 'ï¾ï¾ž',
+ 'ペ': 'ï¾ï¾Ÿ',
+ 'ボ': 'ボ',
+ 'ãƒ': 'ポ',
+
+ 'ァ': 'ァ',
+ 'ã‚¢': 'ï½±',
+ 'ィ': 'ィ',
+ 'イ': 'イ',
+ 'ゥ': 'ゥ',
+ 'ウ': 'ウ',
+ 'ェ': 'ェ',
+ 'エ': 'エ',
+ 'ォ': 'ォ',
+ 'オ': 'オ',
+ 'カ': 'カ',
+ 'ã‚­': 'ï½·',
+ 'ク': 'ク',
+ 'ケ': 'ケ',
+ 'コ': 'コ',
+ 'サ': 'サ',
+ 'ã‚·': 'ï½¼',
+ 'ス': 'ス',
+ 'ã‚»': 'ï½¾',
+ 'ソ': 'ソ',
+ 'ã‚¿': 'ï¾€',
+ 'ãƒ': 'ï¾',
+ 'ッ': 'ッ',
+ 'ツ': 'ツ',
+ 'テ': 'テ',
+ 'ト': 'ト',
+ 'ナ': 'ナ',
+ 'ニ': 'ニ',
+ 'ヌ': 'ヌ',
+ 'ãƒ': 'ネ',
+ 'ノ': 'ノ',
+ 'ãƒ': 'ハ',
+ 'ヒ': 'ヒ',
+ 'フ': 'フ',
+ 'ヘ': 'ï¾',
+ 'ホ': 'ホ',
+ 'マ': 'ï¾',
+ 'ミ': 'ï¾',
+ 'ム': 'ム',
+ 'メ': 'メ',
+ 'モ': 'モ',
+ 'ャ': 'ャ',
+ 'ヤ': 'ヤ',
+ 'ュ': 'ュ',
+ 'ユ': 'ユ',
+ 'ョ': 'ョ',
+ 'ヨ': 'ヨ',
+ 'ラ': 'ラ',
+ 'リ': 'リ',
+ 'ル': 'ル',
+ 'レ': 'レ',
+ 'ロ': 'ロ',
+ 'ワ': 'ワ',
+ 'ヲ': 'ヲ',
+ 'ン': 'ï¾'
+ }
+ },
+
+ halfwidthToFullwidth: {}
+};
+
+var fixFullwidthKana = {
+ 'ã‚ã‚›': 'ã‚ž',
+ 'ヽ゛': 'ヾ',
+
+ 'ã†ã‚›': 'ã‚”',
+ 'ã‹ã‚›': 'ãŒ',
+ 'ãã‚›': 'ãŽ',
+ 'ãã‚›': 'ã',
+ 'ã‘ã‚›': 'ã’',
+ 'ã“ã‚›': 'ã”',
+ 'ã•ã‚›': 'ã–',
+ 'ã—ã‚›': 'ã˜',
+ 'ã™ã‚›': 'ãš',
+ 'ã›ã‚›': 'ãœ',
+ 'ãã‚›': 'ãž',
+ 'ãŸã‚›': 'ã ',
+ 'ã¡ã‚›': 'ã¢',
+ 'ã¤ã‚›': 'ã¥',
+ 'ã¦ã‚›': 'ã§',
+ 'ã¨ã‚›': 'ã©',
+ 'ã¯ã‚›': 'ã°',
+ 'ã¯ã‚œ': 'ã±',
+ 'ã²ã‚›': 'ã³',
+ 'ã²ã‚œ': 'ã´',
+ 'ãµã‚›': 'ã¶',
+ 'ãµã‚œ': 'ã·',
+ 'ã¸ã‚›': 'ã¹',
+ 'ã¸ã‚œ': 'ãº',
+ 'ã»ã‚›': 'ã¼',
+ 'ã»ã‚œ': 'ã½',
+ 'ã£ãª': 'ã‚“ãª',
+ 'ã£ã«': 'ã‚“ã«',
+ 'ã£ã¬': 'ã‚“ã¬',
+ 'ã£ã­': 'ã‚“ã­',
+ 'ã£ã®': 'ã‚“ã®',
+
+ 'ウ゛': 'ヴ',
+ 'カ゛': 'ガ',
+ 'ã‚­ã‚›': 'ã‚®',
+ 'ク゛': 'グ',
+ 'ケ゛': 'ゲ',
+ 'コ゛': 'ゴ',
+ 'サ゛': 'ザ',
+ 'シ゛': 'ジ',
+ 'ス゛': 'ズ',
+ 'セ゛': 'ゼ',
+ 'ソ゛': 'ゾ',
+ 'タ゛': 'ダ',
+ 'ãƒã‚›': 'ヂ',
+ 'ツ゛': 'ヅ',
+ 'テ゛': 'デ',
+ 'ト゛': 'ド',
+ 'ãƒã‚›': 'ãƒ',
+ 'ãƒã‚œ': 'パ',
+ 'ヒ゛': 'ビ',
+ 'ヒ゜': 'ピ',
+ 'フ゛': 'ブ',
+ 'フ゜': 'プ',
+ 'ヘ゛': 'ベ',
+ 'ヘ゜': 'ペ',
+ 'ホ゛': 'ボ',
+ 'ホ゜': 'ãƒ',
+ 'ッナ': 'ンナ',
+ 'ッニ': 'ンニ',
+ 'ッヌ': 'ンヌ',
+ 'ッãƒ': 'ンãƒ',
+ 'ッノ': 'ンノ'
+};
+
+var fixCompositeSymbolsTable = {
+ '㋀': '1月',
+ 'ã‹': '2月',
+ '㋂': '3月',
+ '㋃': '4月',
+ '㋄': '5月',
+ '㋅': '6月',
+ '㋆': '7月',
+ '㋇': '8月',
+ '㋈': '9月',
+ '㋉': '10月',
+ '㋊': '11月',
+ '㋋': '12月',
+
+ 'ã ': '1æ—¥',
+ 'ã¡': '2æ—¥',
+ 'ã¢': '3æ—¥',
+ 'ã£': '4æ—¥',
+ 'ã¤': '5æ—¥',
+ 'ã¥': '6æ—¥',
+ 'ã¦': '7æ—¥',
+ 'ã§': '8æ—¥',
+ 'ã¨': '9æ—¥',
+ 'ã©': '10æ—¥',
+ 'ãª': '11æ—¥',
+ 'ã«': '12æ—¥',
+ 'ã¬': '13æ—¥',
+ 'ã­': '14æ—¥',
+ 'ã®': '15æ—¥',
+ 'ã¯': '16æ—¥',
+ 'ã°': '17æ—¥',
+ 'ã±': '18æ—¥',
+ 'ã²': '19æ—¥',
+ 'ã³': '20æ—¥',
+ 'ã´': '21æ—¥',
+ 'ãµ': '22æ—¥',
+ 'ã¶': '23æ—¥',
+ 'ã·': '24æ—¥',
+ 'ã¸': '25æ—¥',
+ 'ã¹': '26æ—¥',
+ 'ãº': '27æ—¥',
+ 'ã»': '28æ—¥',
+ 'ã¼': '29æ—¥',
+ 'ã½': '30æ—¥',
+ 'ã¾': '31æ—¥',
+
+ 'ã˜': '0点',
+ 'ã™': '1点',
+ 'ãš': '2点',
+ 'ã›': '3点',
+ 'ãœ': '4点',
+ 'ã': '5点',
+ 'ãž': '6点',
+ 'ãŸ': '7点',
+ 'ã ': '8点',
+ 'ã¡': '9点',
+ 'ã¢': '10点',
+ 'ã£': '11点',
+ 'ã¤': '12点',
+ 'ã¥': '13点',
+ 'ã¦': '14点',
+ 'ã§': '15点',
+ 'ã¨': '16点',
+ 'ã©': '17点',
+ 'ãª': '18点',
+ 'ã«': '19点',
+ 'ã¬': '20点',
+ 'ã­': '21点',
+ 'ã®': '22点',
+ 'ã¯': '23点',
+ 'ã°': '24点',
+
+ 'ã»': 'å¹³æˆ',
+ 'ã¼': '昭和',
+ 'ã½': '大正',
+ 'ã¾': '明治',
+ 'ã¿': 'æ ªå¼ä¼šç¤¾',
+
+ '㌀': 'アパート',
+ 'ãŒ': 'アルファ',
+ '㌂': 'アンペア',
+ '㌃': 'アール',
+ '㌄': 'イニング',
+ '㌅': 'インãƒ',
+ '㌆': 'ウオン',
+ '㌇': 'エスクード',
+ '㌈': 'エーカー',
+ '㌉': 'オンス',
+ '㌊': 'オーム',
+ '㌋': 'カイリ', //海里
+ '㌌': 'カラット',
+ 'ãŒ': 'カロリー',
+ '㌎': 'ガロン',
+ 'ãŒ': 'ガンマ',
+ 'ãŒ': 'ギガ',
+ '㌑': 'ギニー',
+ '㌒': 'キュリー',
+ '㌓': 'ギルダー',
+ '㌔': 'キロ',
+ '㌕': 'キログラム',
+ '㌖': 'キロメートル',
+ '㌗': 'キロワット',
+ '㌘': 'グラム',
+ '㌙': 'グラムトン',
+ '㌚': 'クルゼイロ',
+ '㌛': 'クローãƒ',
+ '㌜': 'ケース',
+ 'ãŒ': 'コルナ',
+ '㌞': 'コーãƒ',
+ '㌟': 'サイクル',
+ '㌠': 'サンãƒãƒ¼ãƒ ',
+ '㌡': 'シリング',
+ '㌢': 'センãƒ',
+ '㌣': 'セント',
+ '㌤': 'ダース',
+ '㌥': 'デシ',
+ '㌦': 'ドル',
+ '㌧': 'トン',
+ '㌨': 'ナノ',
+ '㌩': 'ノット',
+ '㌪': 'ãƒã‚¤ãƒ„',
+ '㌫': 'パーセント',
+ '㌬': 'パーツ',
+ '㌭': 'ãƒãƒ¼ãƒ¬ãƒ«',
+ '㌮': 'ピアストル',
+ '㌯': 'ピクル',
+ '㌰': 'ピコ',
+ '㌱': 'ビル',
+ '㌲': 'ファラッド',
+ '㌳': 'フィート',
+ '㌴': 'ブッシェル',
+ '㌵': 'フラン',
+ '㌶': 'ヘクタール',
+ '㌷': 'ペソ',
+ '㌸': 'ペニヒ',
+ '㌹': 'ヘルツ',
+ '㌺': 'ペンス',
+ '㌻': 'ページ',
+ '㌼': 'ベータ',
+ '㌽': 'ãƒã‚¤ãƒ³ãƒˆ',
+ '㌾': 'ボルト',
+ '㌿': 'ホン',
+ 'ã€': 'ãƒãƒ³ãƒ‰',
+ 'ã': 'ホール',
+ 'ã‚': 'ホーン',
+ 'ãƒ': 'マイクロ',
+ 'ã„': 'マイル',
+ 'ã…': 'マッãƒ',
+ 'ã†': 'マルク',
+ 'ã‡': 'マンション',
+ 'ãˆ': 'ミクロン',
+ 'ã‰': 'ミリ',
+ 'ãŠ': 'ミリãƒãƒ¼ãƒ«',
+ 'ã‹': 'メガ',
+ 'ãŒ': 'メガトン',
+ 'ã': 'メートル',
+ 'ãŽ': 'ヤード',
+ 'ã': 'ヤール',
+ 'ã': 'ユアン',
+ 'ã‘': 'リットル',
+ 'ã’': 'リラ',
+ 'ã“': 'ルピー',
+ 'ã”': 'ルーブル',
+ 'ã•': 'レム',
+ 'ã–': 'レントゲン',
+ 'ã—': 'ワット'
+};
+
+// Fill in the conversion tables with the flipped tables.
+conversionTables.halfwidthToFullwidth.alphabet = flip(conversionTables.fullwidthToHalfwidth.alphabet);
+conversionTables.halfwidthToFullwidth.numbers = flip(conversionTables.fullwidthToHalfwidth.numbers);
+conversionTables.halfwidthToFullwidth.punctuation = flip(conversionTables.fullwidthToHalfwidth.punctuation);
+conversionTables.halfwidthToFullwidth.katakana = flip(conversionTables.fullwidthToHalfwidth.katakana);
+
+// Build the normalization table.
+conversionTables.normalize = merge(
+ conversionTables.fullwidthToHalfwidth.alphabet,
+ conversionTables.fullwidthToHalfwidth.numbers,
+ conversionTables.halfwidthToFullwidth.punctuation,
+ conversionTables.halfwidthToFullwidth.katakana
+ );
+
+var converters = {
+ fullwidthToHalfwidth: {
+ alphabet: replacer(conversionTables.fullwidthToHalfwidth.alphabet),
+ numbers: replacer(conversionTables.fullwidthToHalfwidth.numbers),
+ punctuation: replacer(conversionTables.fullwidthToHalfwidth.punctuation),
+ katakana: replacer(conversionTables.fullwidthToHalfwidth.katakana)
+ },
+
+ halfwidthToFullwidth: {
+ alphabet: replacer(conversionTables.halfwidthToFullwidth.alphabet),
+ numbers: replacer(conversionTables.halfwidthToFullwidth.numbers),
+ punctuation: replacer(conversionTables.halfwidthToFullwidth.punctuation),
+ katakana: replacer(conversionTables.halfwidthToFullwidth.katakana)
+ },
+
+ fixFullwidthKana: replacer(fixFullwidthKana),
+ normalize: replacer(conversionTables.normalize)
+};
+
+var fixCompositeSymbols = replacer(fixCompositeSymbolsTable);
+
+
+/**
+ * Convert hiragana to fullwidth katakana.
+ * According to http://jsperf.com/converting-japanese, these implementations are
+ * faster than using lookup tables.
+ *
+ * @param {string} str A string.
+ * @return {string} A string not containing hiragana.
+ */
+converters.hiraganaToKatakana = function(str) {
+ str = converters.halfwidthToFullwidth.katakana(str);
+ str = converters.fixFullwidthKana(str);
+
+ str = str.replace(/ã‚/g, 'ヽ');
+ str = str.replace(/ゞ/g, 'ヾ');
+ //str = str.replace(/?/g, '𛀀'); // Letter archaic E
+
+ str = str.replace(/[ã-ã‚–]/g, function(str) {
+ return String.fromCharCode(str.charCodeAt(0) + 96);
+ });
+
+ return str;
+};
+
+
+/**
+ * Convert katakana to hiragana.
+ *
+ * @param {string} str A string.
+ * @return {string} A string not containing katakana.
+ */
+converters.katakanaToHiragana = function(str) {
+ str = converters.halfwidthToFullwidth.katakana(str);
+ str = converters.fixFullwidthKana(str);
+
+ str = str.replace(/ヽ/g, 'ã‚');
+ str = str.replace(/ヾ/g, 'ゞ');
+ //str = str.replace(/?/g, 'ð›€'); // Letter archaic E
+
+ str = str.replace(/[ァ-ヶ]/g, function(str) {
+ return String.fromCharCode(str.charCodeAt(0) - 96);
+ });
+
+ return str;
+};
+
+
+/**
+ * Fix kana and apply the following processes;
+ * * Replace repeat characters
+ * * Alphabet to halfwidth
+ * * Numbers to halfwidth
+ * * Punctuation to fullwidth
+ * * Katakana to fullwidth
+ * * Fix fullwidth kana
+ * * Replace composite symbols
+ *
+ * @param {string} str
+ * @return {string}
+ */
+var normalize_ja = function(str) {
+ // Replace repeat characters.
+ str = str
+ .replace(/(..)々々/g, '$1$1')
+ .replace(/(.)々/g, '$1$1');
+
+ str = converters.normalize(str);
+ str = converters.fixFullwidthKana(str);
+
+ // Replace composite symbols.
+ str = fixCompositeSymbols(str);
+
+ return str;
+};
+
+exports.normalize_ja = normalize_ja;
+exports.converters = converters;
+
+},{"../util/utils.js":55,"../util/utils":55}],25:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A noun inflector for French.
+ * Compiled from:
+ * \@see http://fr.wiktionary.org/wiki/Annexe:Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
+ * \@see http://fr.wikipedia.org/wiki/Pluriels_irr%C3%A9guliers_en_fran%C3%A7ais
+ *
+ * \@todo Take compounded noun into account (eaux-fortes, pique-nique...).
+ * \@todo General note: French also requires AdjectiveInflector (femininize...).
+ */
+
+var SingularPluralInflector = require('../singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('../form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ };
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ };
+}
+
+
+
+/**
+ * @constructor
+ */
+var NounInflector = function() {
+ // Ambiguous a.k.a. invariant.
+ // \@todo Expand this list to be as comprehensive as possible.
+ this.ambiguous = [
+ // Nouns ending by -s
+ 'à-peu-près', 'à-propos', 'abattis', 'abcès', 'abois', 'abribus', 'abus',
+ 'accès', 'acquis', 'adénovirus', 'adonis', 'ados', 'agrès', 'aguets',
+ 'ailleurs', 'ais', 'albatros', 'albinos', 'alias', 'aloès', 'amaryllis',
+ 'amas', 'ampélopsis', 'ananas', 'anchois', 'angélus', 'anis', 'anticorps',
+ 'antihéros', 'antirides', 'anus', 'appas', 'appentis', 'appui-bras',
+ 'appuie-bras', 'arcanes', 'argus', 'arrérages', 'arrière-pays', 'as',
+ 'ascaris', 'asparagus', 'atlas', 'atours', 'aurochs', 'autobus',
+ 'autofocus', 'avant-bras', 'avant-corps', 'avant-propos', 'avers', 'avis',
+ 'axis', 'barbouillis', 'bas', 'beaujolais', 'beaux-arts', 'biais',
+ 'bibliobus', 'biceps', 'bicross', 'bien-fonds', 'bloc-notes', 'blockhaus',
+ 'blocus', 'blues', 'bois', 'bonus', 'bout-dehors', 'bouts-rimés',
+ 'branle-bas', 'bras', 'brebis', 'bris', 'brise-lames', 'brise-mottes',
+ 'brûlis', 'buis', 'burnous', 'bus', 'business', 'cabas', 'cacatoès',
+ 'cacatois', 'cactus', 'cadenas', 'cafouillis', 'caillebotis', 'calvados',
+ 'cambouis', 'campus', 'canevas', 'cannabis', 'carquois', 'cas',
+ 'casse-noisettes', 'casse-pieds', 'cassis', 'caucus', 'cens', 'cervelas',
+ 'chablis', 'chamois', 'chaos', 'chas', 'chasselas', 'châssis',
+ 'chatouillis', 'chauffe-assiettes', 'chauve-souris', 'chorus', 'choucas',
+ 'circoncis', 'cirrus', 'clafoutis', 'clapotis', 'cliquetis', 'clos',
+ 'cochylis', 'colis', 'coloris', 'commis', 'compas', 'compromis',
+ 'compte-chèques', 'compte-gouttes', 'compte-tours', 'concours', 'confins',
+ 'congrès', 'consensus', 'contrepoids', 'contresens', 'contretemps',
+ 'corn flakes', 'corps', 'corps-à-corps', 'corpus', 'cosinus', 'cosmos',
+ 'coulis', 'coupe-ongles', 'cours', 'court-jus', 'couscous', 'coutelas',
+ 'crocus', 'croquis', 'cross', 'cubitus', 'cumulus', 'cure-dents',
+ 'cure-ongles', 'cure-pipes', 'cursus', 'cyclo-cross', 'cyprès', 'dais',
+ 'damas', 'débarras', 'débours', 'débris', 'décès', 'dedans', 'dehors',
+ 'delirium tremens', 'demi-gros', 'dépens', 'dessous', 'dessus', 'détritus',
+ 'deux-mâts', 'deux-pièces', 'deux-points', 'deux-roues', 'deux-temps',
+ 'dévers', 'devis', 'diplodocus', 'discours', 'dos', 'ébats', 'éboulis',
+ 'échalas', 'edelweiss', 'élaeis', 'éleis', 'éléphantiasis', 'embarras',
+ 'empois', 'en-cas', 'encens', 'enclos', 'endos', 'engrais', 'entrelacs',
+ 'entremets', 'envers', 'épluche-légumes', 'ers', 'espace-temps',
+ 'essuie-mains', 'eucalyptus', 'ex-libris', 'excès', 'express', 'extrados',
+ 'faciès', 'fait-divers', 'fatras', 'faux-sens', 'favoris', 'ficus',
+ 'fier-à-bras', 'finnois', 'florès', 'focus', 'fœtus', 'fois', 'forceps',
+ 'fouillis', 'fracas', 'frais', 'français', 'franglais', 'frimas',
+ 'friselis', 'frisottis', 'froncis', 'frottis', 'fucus', 'gâchis', 'galetas',
+ 'galimatias', 'garde-à-vous', 'garde-corps', 'gargouillis', 'gars',
+ 'gâte-bois', 'gazouillis', 'génois', 'gibus', 'glacis', 'glas', 'gneiss',
+ 'gobe-mouches', 'grès', 'gribouillis', 'guet-apens', 'habeas corpus',
+ 'hachis', 'haras', 'hardes', 'harnais', 'haut-le-corps', 'hautbois',
+ 'herbe-aux-chats', 'héros', 'herpès', 'hiatus', 'hibiscus', 'hors-concours',
+ 'hors-pistes', 'hourdis', 'huis-clos', 'humérus', 'humus', 'ibis', 'iléus',
+ 'indique-fuites', 'infarctus', 'inlandsis', 'insuccès', 'intercours',
+ 'intrados', 'intrus', 'iris', 'isatis', 'jais', 'jars', 'jeans',
+ 'jeuconcours', 'judas', 'juliénas', 'jus', 'justaucorps', 'kakatoès',
+ 'kermès', 'kriss', 'lacis', 'laïus', 'lambris', 'lapis', 'laps', 'lapsus',
+ 'laquais', 'las', 'lattis', 'lave-mains', 'lavis', 'lèche-bottes',
+ 'lèche-vitrines', 'legs', 'lias', 'liégeois', 'lilas', 'lis', 'lœss',
+ 'logis', 'loris', 'lotus', 'louis', 'lupus', 'lys', 'mâchicoulis', 'madras',
+ 'maïs', 'malappris', 'malus', 'mânes', 'maquis', 'marais', 'maroilles',
+ 'marquis', 'mas', 'mass-médias', 'matelas', 'matois', 'médius', 'mépris',
+ 'mérinos', 'mess', 'mets', 'mi-bas', 'micro-ondes', 'mille-pattes',
+ 'millepertuis', 'minibus', 'minois', 'minus', 'mirabilis', 'mois',
+ 'monocorps', 'monte-plats', 'mors', 'motocross', 'mots-croisés', 'motus',
+ 'mouchetis', 'mucus', 'myosotis', 'nævus', 'négus', 'niais',
+ 'nimbo-stratus', 'nimbus', 'norois', 'nounours', 'nu-pieds', 'oasis',
+ 'obus', 'olibrius', 'omnibus', 'opus', 'os', 'ours', 'ouvre-boîtes',
+ 'ouvre-bouteilles', 'palais', 'palis', 'palmarès', 'palus', 'panais',
+ 'panaris', 'pancréas', 'papyrus', 'par-dehors', 'paradis', 'parcours',
+ 'pardessus', 'pare-balles', 'pare-chocs', 'parvis', 'pas', 'passe-temps',
+ 'pataquès', 'pathos', 'patois', 'pavois', 'pays', 'permis',
+ 'petit-bourgeois', 'petit-gris', 'petit-pois', 'phallus', 'phimosis',
+ 'pickles', 'pilotis', 'pique-fleurs', 'pis', 'pithiviers', 'pityriasis',
+ 'plateau-repas', 'plâtras', 'plein-temps', 'plexiglas', 'plexus', 'plus',
+ 'poids', 'pois', 'pont-levis', 'porte-avions', 'porte-bagages',
+ 'porte-billets', 'porte-bouteilles', 'porte-clés', 'porte-hélicoptères',
+ 'porte-jarretelles', 'porte-revues', 'pouls', 'préavis', 'presse-fruits',
+ 'presse-papiers', 'princeps', 'printemps', 'procès', 'processus', 'progrès',
+ 'propos', 'prospectus', 'protège-dents', 'psoriasis', 'pubis', 'puits',
+ 'pus', 'putois', 'quatre-épices', 'quatre-feuilles', 'quatre-heures',
+ 'quatre-mâts', 'quatre-quarts', 'quatre-temps', 'quitus', 'rabais',
+ 'rachis', 'radis', 'radius', 'raïs', 'ramassis', 'rébus', 'reclus',
+ 'recours', 'refus', 'relais', 'remords', 'remous', 'remue-méninges',
+ 'rendez-vous', 'repas', 'répons', 'repos', 'repris', 'reps', 'rétrovirus',
+ 'revers', 'rhinocéros', 'rictus', 'rince-doigts', 'ris', 'rollmops',
+ 'rosé-des-prés', 'roulis', 'rubis', 'salmigondis', 'salsifis', 'sans-logis',
+ 'sas', 'sassafras', 'sauternes', 'schnaps', 'schuss', 'secours', 'semis',
+ 'sens', 'serre-fils', 'serre-livres', 'sévices', 'sinus', 'skunks',
+ 'souris', 'sournois', 'sous-bois', 'stradivarius', 'stras', 'strass',
+ 'strato-cumulus', 'stratus', 'stress', 'succès', 'surdos', 'surplus',
+ 'surpoids', 'sursis', 'suspens', 'synopsis', 'syphilis', 'taffetas',
+ 'taillis', 'talus', 'tamaris', 'tamis', 'tapis', 'tas', 'taudis', 'temps',
+ 'tennis', 'terminus', 'terre-neuvas', 'tétanos', 'tétras', 'thalamus',
+ 'thermos', 'thesaurus', 'thésaurus', 'thymus', 'tire-fesses', 'tonus',
+ 'torchis', 'torticolis', 'tournedos', 'tournevis', 'tournis', 'tracas',
+ 'traîne-savates', 'travers', 'tréfonds', 'treillis', 'trépas', 'trias',
+ 'triceps', 'trichomonas', 'trois-étoiles', 'trois-mâts', 'trois-quarts',
+ 'trolleybus', 'tumulus', 'typhus', 'univers', 'us', 'utérus', 'vasistas',
+ 'vélocross', 'velours', 'verglas', 'verjus', 'vernis', 'vers',
+ 'vert-de-gris', 'vide-ordures', 'vide-poches', 'villageois', 'virus',
+ 'vis-à-vis', 'volubilis', 'vulgum pecus', 'waters', 'williams', 'xérès',
+
+ // Nouns ending by -x
+ 'abat-voix', 'afflux', 'alpax', 'anthrax', 'apex', 'aptéryx',
+ 'archéoptéryx', 'arrière-faix', 'bombyx', 'borax', 'bordeaux', 'bouseux',
+ 'box', 'carex', 'casse-noix', 'cedex', 'céphalothorax', 'cérambyx', 'chaux',
+ 'choix', 'coccyx', 'codex', 'contumax', 'coqueleux', 'cortex', 'courroux',
+ 'croix', 'crucifix', 'culex', 'demodex', 'duplex', 'entre-deux', 'époux',
+ 'équivaux', 'eux', 'ex', 'faix', 'faucheux', 'faux', 'fax', 'ferreux',
+ 'flux', 'fox', 'freux', 'furax', 'hapax', 'harengueux', 'hélix',
+ 'horse-pox', 'houx', 'index', 'influx', 'inox', 'juke-box', 'kleenex',
+ 'lagothrix', 'larynx', 'lastex', 'latex', 'lux', 'lynx', 'macareux', 'max',
+ 'mésothorax', 'mi-voix', 'mirepoix', 'motteux', 'multiplex', 'murex',
+ 'narthex', 'noix', 'onyx', 'opopanax', 'oropharynx', 'paix', 'panax',
+ 'perdrix', 'pharynx', 'phénix', 'phlox', 'phoenix', 'pneumothorax', 'poix',
+ 'portefaix', 'pousse-cailloux', 'preux', 'prix', 'prothorax', 'pucheux',
+ 'pyrex', 'pyroligneux', 'quadruplex', 'queux', 'redoux', 'reflex', 'reflux',
+ 'relax', 'rhinopharynx', 'rose-croix', 'rouvieux', 'roux', 'rumex',
+ 'saindoux', 'sardonyx', 'scolex', 'sèche-cheveux', 'silex', 'simplex',
+ 'sioux', 'sirex', 'smilax', 'solex', 'songe-creux', 'spalax', 'sphex',
+ 'sphinx', 'storax', 'strix', 'styrax', 'surfaix', 'surtaux', 'syrinx',
+ 'tamarix', 'taux', 'télex', 'thorax', 'tord-boyaux', 'toux', 'trionyx',
+ 'tripoux', 'tubifex', 'vertex', 'vidéotex', 'vielleux', 'vieux',
+ 'violoneux', 'voix', 'volvox', 'vortex',
+
+ // Nouns ending by -z
+ 'allume-gaz', 'assez', 'biogaz', 'cache-nez', 'camping-gaz', 'chez',
+ 'chintz', 'ersatz', 'fez', 'free-jazz', 'fritz', 'gaz', 'gin-fizz', 'hertz',
+ 'jazz', 'jerez', 'kibboutz', 'kilohertz', 'kolkhoz', 'kronprinz', 'lapiaz',
+ 'lez', 'mégahertz', 'merguez', 'nez', 'pince-nez', 'quartz', 'quiz', 'ranz',
+ 'raz', 'recez', 'rémiz', 'rez', 'riz', 'ruolz', 'seltz', 'serre-nez'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular('ail', 'aulx');
+ this.addIrregular('bétail', 'bestiaux');
+ this.addIrregular('bonhomme', 'bonshommes');
+ this.addIrregular('ciel', 'cieux');
+ this.addIrregular('monsieur', 'messieurs');
+ this.addIrregular('mafioso', 'mafiosi');
+ this.addIrregular('Å“il', 'yeux');
+ this.addIrregular('putto', 'putti');
+ this.addIrregular('targui', 'touareg'); // touareg -> touaregs is also OK.
+
+ // Pluralize
+ this.pluralForms.regularForms.push([/^(av|b|c|carnav|cérémoni|chac|corr|emment|emmenth|festiv|fut|gavi|gra|narv|p|récit|rég|rit|rorqu|st)al$/i, '$1als']);
+ this.pluralForms.regularForms.push([/^(aspir|b|cor|ém|ferm|gemm|soupir|trav|vant|vent|vitr)ail$/i, '$1aux']);
+ this.pluralForms.regularForms.push([/^(bij|caill|ch|gen|hib|jouj|p|rip|chouch)ou$/i, '$1oux']);
+ this.pluralForms.regularForms.push([/^(gr|berimb|don|karb|land|pil|rest|sarr|un)au$/i, '$1aus']);
+ this.pluralForms.regularForms.push([/^(bl|ém|enf|pn)eu$/i, '$1eus']);
+ this.pluralForms.regularForms.push([/(au|eau|eu|Å“u)$/i, '$1x']);
+ this.pluralForms.regularForms.push([/al$/i, 'aux']);
+ this.pluralForms.regularForms.push([/(s|x)$/i, '$1']);
+ this.pluralForms.regularForms.push([/(.*)$/i, '$1s']);
+
+ // Singularize
+ this.singularForms.regularForms.push([/^(aspir|b|cor|ém|ferm|gemm|soupir|trav|vant|vent|vitr)aux$/i, '$1ail']);
+ this.singularForms.regularForms.push([/^(aloy|b|bouc|boy|burg|conoy|coy|cr|esquim|ét|fabli|flé|flûti|glu|gr|gru|hoy|joy|kérab|matéri|nobli|noy|pré|sen|sén|t|touch|tuss|tuy|v|ypré)aux$/i, '$1au']);
+ this.singularForms.regularForms.push([/^(bij|caill|ch|gen|hib|jouj|p|rip|chouch)oux$/i, '$1ou']);
+ this.singularForms.regularForms.push([/^(bis)?aïeux$/i, '$1aïeul']);
+ this.singularForms.regularForms.push([/^apparaux$/i, 'appareil']); // One way transform, don't put on irregular list.
+ this.singularForms.regularForms.push([/^ciels$/i, 'ciel']);
+ this.singularForms.regularForms.push([/^Å“ils$/i, 'Å“il']);
+ this.singularForms.regularForms.push([/(eau|eu|Å“u)x$/i, '$1']);
+ this.singularForms.regularForms.push([/aux$/i, 'al']);
+ this.singularForms.regularForms.push([/(.*)s$/i, '$1']);
+
+ this.pluralize = function(token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"../singular_plural_inflector":53,"../form_set":54}],26:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A noun inflector for Japanese.
+ * Compiled from several sources including:
+ * \@see http://answers.yahoo.com/question/index?qid=20080528201740AASBWy6
+ * \@see http://www.excite.co.jp/dictionary/english_japanese/
+ *
+ * This script assumes input is normalized using normalizer_ja().
+ * Pluralizing Japanese has a very limited interest.
+ * Japanese don't usually distinct plural from singular, so even a word looking
+ * like a singular might actually be a plural.
+ *
+ * Singularization of nouns ending by -tachi or -ra is achieved using a
+ * comprehensive black list, while nouns ending by -domo or -gata use a white
+ * list because there are too many exceptions.
+ *
+ * \@todo Singularize nouns ending by -ら, but there are too many exceptions.
+ * \@todo Expand the list of common plurals ending by -domo and -gata.
+ */
+
+var SingularPluralInflector = require('../singular_plural_inflector'),
+ util = require('util'),
+ FormSet = require('../form_set');
+
+function attach() {
+ var inflector = this;
+
+ String.prototype.singularizeNoun = function() {
+ return inflector.singularize(this);
+ };
+
+ String.prototype.pluralizeNoun = function() {
+ return inflector.pluralize(this);
+ };
+}
+
+
+
+/**
+ * @constructor
+ */
+var NounInflector = function() {
+ // Ambiguous a.k.a. invariant.
+ this.ambiguous = [
+ 'ã¨ã‚‚ã ã¡', 'å‹ã ã¡', 'å‹é”', 'éŠã³å‹é”', '飲ã¿å‹é”', '酒飲ã¿å‹é”', '茶飲ã¿å‹é”',
+ '学校å‹é”', '女å‹é”', 'ç”·å‹é”', 'å¹¼å‹é”'
+ ];
+
+ this.customPluralForms = [];
+ this.customSingularForms = [];
+ this.singularForms = new FormSet();
+ this.pluralForms = new FormSet();
+
+ this.attach = attach;
+
+ this.addIrregular('神', '神神');
+ this.addIrregular('人', '人人');
+ this.addIrregular('å¹´', 'å¹´å¹´');
+ this.addIrregular('月', '月月');
+ this.addIrregular('日', '日日');
+ this.addIrregular('星', '星星');
+ this.addIrregular('島', '島島');
+ this.addIrregular('我', '我我');
+
+ /**
+ * Notes:
+ * -ãŸã¡ exceptions: ã„ãŸã¡, ãŠã„ãŸã¡, ã¤ã„ãŸã¡, ã‹ãŸã¡, ã‹ãŠã‹ãŸã¡, ãªã‚Šã‹ãŸã¡, ã„ã§ãŸã¡, ã¯ãŸã¡, ã‹ã‚‰ãŸã¡, ãªã‚ŠãŸã¡
+ * -é” exceptions: 伊é”, 男伊é”, æ „é”, 上æ„下é”, 熟é”, 上é”, 下æ„上é”, å…ˆé”, é€é”, 速é”, å³æ—¥é€Ÿé”, 書留速é”, 調é”, 通é”, ä¼é”, 到é”, é…é”, 牛乳é…é”, æ–°èžé…é”, ç„¡æ–™é…é”, 四通八é”, 発é”, 未発é”, 御用é”, 宮内åºå¾¡ç”¨é”, ç·´é”, é—Šé”
+ * -ç­‰ exceptions: 一等, 下等, 何等, å‡ç­‰, 勲等, 高等, 三等, åˆç­‰, 上等, 親等, 二親等, æ•°ç­‰, 対等, 中等, åŒç­‰, 特等, 二等, å“ç­‰, ä¸ç­‰, 平等, 悪平等, 男女平等, ä¸å¹³ç­‰, 優等, 劣等
+ */
+
+ // Pluralize
+ this.pluralForms.regularForms.push([/^(.+)$/i, '$1ãŸã¡']);
+
+ // Singularize
+ this.singularForms.regularForms.push([/^(.+)ãŸã¡$/i, function(a, mask) {
+ if (['ã„', 'ãŠã„', 'ã¤ã„', 'ã‹', 'ã‹ãŠã‹', 'ãªã‚Šã‹', 'ã„ã§', 'ã¯', 'ã‹ã‚‰',
+ 'ãªã‚Š'].indexOf(mask) >= 0)
+ return mask + 'ãŸã¡';
+ return mask;
+ }]);
+ this.singularForms.regularForms.push([/^(.+)é”$/i, function(a, mask) {
+ if (['伊', '伊', 'æ „', '上æ„下', '熟', '上', '下æ„上', 'å…ˆ', 'é€', '速',
+ 'å³æ—¥é€Ÿ', '書留速', '調', '通', 'ä¼', '到', 'é…', '牛乳é…', 'æ–°èžé…', 'ç„¡æ–™é…',
+ '四通八', '発', '未発', '御用', '宮内åºå¾¡ç”¨', 'ç·´', 'é—Š'].indexOf(mask) >= 0)
+ return mask + 'é”';
+ return mask;
+ }]); // Singularize nouns ending by -ç­‰, but not exceptions.
+ this.singularForms.regularForms.push([/^(.+)ç­‰$/i, function(a, mask) {
+ if (['一', '下', '何', 'å‡', '勲', '高', '三', 'åˆ', '親', '二親', 'æ•°', '対',
+ '中', 'åŒ', '特', '二', 'å“', 'ä¸', 'å¹³', '悪平', '男女平', 'ä¸å¹³', '優',
+ '劣'].indexOf(mask) >= 0)
+ return mask + 'ç­‰';
+ return mask;
+ }]);
+ this.singularForms.regularForms.push([/^(人間|ã‚ãŸãã—|ç§|ã¦ã¾ãˆ|手å‰|野郎|ã‚„ã‚ã†|勇者|ãŒã|ガキ|餓鬼)(å…±|ã©ã‚‚)$/i, '$1']);
+ this.singularForms.regularForms.push([/^(神様|先生|ã‚ãªãŸ)(æ–¹|ãŒãŸ)$/i, '$1']);
+
+ this.pluralize = function(token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+ };
+
+ this.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+ };
+};
+
+util.inherits(NounInflector, SingularPluralInflector);
+
+module.exports = NounInflector;
+
+},{"util":40,"../singular_plural_inflector":53,"../form_set":54}],55:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+
+/**
+ * Generate a replacing function given a table of patterns. Inspired by:
+ * http://code.google.com/p/jslibs/wiki/JavascriptTips#String_converter
+ * The order of elements is significant. Longer elements should be listed first.
+ * @see Speed test http://jsperf.com/build-a-regexp-table
+ *
+ * @param {Object.<string, string>} translationTable The translation table of key value.
+ * @return {function(string): string} A translating function.
+ */
+function replacer(translationTable) {
+ /**
+ * An array of translationTable keys.
+ * @type {Array.<string>}
+ */
+ var pattern = [];
+
+ /**
+ * The regular expression doing the replacement job.
+ * @type {RegExp}
+ */
+ var regExp;
+
+ /**
+ * Used to iterate over translationTable.
+ * @type {string}
+ */
+ var key;
+
+ for (key in translationTable) {
+ // Escaping regexp special chars.
+ // @see Speed test for type casting to string http://jsperf.com/string-type-casting/2
+ // @see http://closure-library.googlecode.com/svn/docs/closure_goog_string_string.js.source.html#line956
+ key = ('' + key).replace(/([-()\[\]{}+?*.$\^|,:#<!\\\/])/g, '\\$1').
+ replace(/\x08/g, '\\x08');
+
+ pattern.push(key);
+ }
+
+ regExp = new RegExp(pattern.join('|'), 'g');
+
+ /**
+ * @param {string} str Input string.
+ * @return {string} The string replaced.
+ */
+ return function(str) {
+ return str.replace(regExp, function(str) {
+ return translationTable[str];
+ });
+ };
+}
+
+
+/**
+ * Exchanges all keys with their associated values in an object.
+ *
+ * @param {Object.<string, string>} obj An object of strings.
+ * @return {Object.<string, string>} An object of strings.
+ */
+function flip(obj) {
+ var newObj = Object.create(null),
+ key;
+
+ for (key in obj) {
+ newObj[obj[key]] = key;
+ }
+
+ return newObj;
+}
+
+
+/**
+ * Merge several objects. Properties from earlier objects are overwritten by
+ * laters's in case of conflict.
+ *
+ * @param {...Object.<string, string>} var_args One or more objects of strings.
+ * @return {!Object.<string, string>} An object of strings.
+ */
+function merge(var_args) {
+ var args = [].slice.call(arguments),
+ newObj = Object.create(null),
+ id = 0, key;
+
+ while (args[id]) {
+ for (key in args[id]) {
+ newObj[key] = args[id][key];
+ }
+
+ id++;
+ }
+
+ return newObj;
+}
+
+exports.replacer = replacer;
+exports.flip = flip;
+exports.merge = merge;
+
+},{}],49:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+exports.rules = {
+ "a": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "ia",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "a",
+ "size": "1"
+ }
+ ],
+ "b": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "bb",
+ "size": "1"
+ }
+ ],
+ "c": [
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ytic",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ic",
+ "size": "2"
+ },
+ {
+ "appendage": "t",
+ "continuation": true,
+ "intact": false,
+ "pattern": "nc",
+ "size": "1"
+ }
+ ],
+ "d": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "dd",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ied",
+ "size": "3"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ceed",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "eed",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ed",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "hood",
+ "size": "4"
+ }
+ ],
+ "e": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "e",
+ "size": "1"
+ }
+ ],
+ "f": [
+ {
+ "appendage": "v",
+ "continuation": false,
+ "intact": false,
+ "pattern": "lief",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "if",
+ "size": "2"
+ }
+ ],
+ "g": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ing",
+ "size": "3"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iag",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ag",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "gg",
+ "size": "1"
+ }
+ ],
+ "h": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "th",
+ "size": "2"
+ },
+ {
+ "appendage": "c",
+ "continuation": false,
+ "intact": false,
+ "pattern": "guish",
+ "size": "5"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ish",
+ "size": "3"
+ }
+ ],
+ "i": [
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "i",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "i",
+ "size": "1"
+ }
+ ],
+ "j": [
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ij",
+ "size": "1"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "fuj",
+ "size": "1"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "uj",
+ "size": "1"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "oj",
+ "size": "1"
+ },
+ {
+ "appendage": "r",
+ "continuation": false,
+ "intact": false,
+ "pattern": "hej",
+ "size": "1"
+ },
+ {
+ "appendage": "t",
+ "continuation": false,
+ "intact": false,
+ "pattern": "verj",
+ "size": "1"
+ },
+ {
+ "appendage": "t",
+ "continuation": false,
+ "intact": false,
+ "pattern": "misj",
+ "size": "2"
+ },
+ {
+ "appendage": "d",
+ "continuation": false,
+ "intact": false,
+ "pattern": "nj",
+ "size": "1"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "j",
+ "size": "1"
+ }
+ ],
+ "l": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ifiabl",
+ "size": "6"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iabl",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "abl",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ibl",
+ "size": "3"
+ },
+ {
+ "appendage": "l",
+ "continuation": true,
+ "intact": false,
+ "pattern": "bil",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "cl",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "iful",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ful",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ul",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ial",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ual",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "al",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ll",
+ "size": "1"
+ }
+ ],
+ "m": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ium",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "um",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ism",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "mm",
+ "size": "1"
+ }
+ ],
+ "n": [
+ {
+ "appendage": "j",
+ "continuation": true,
+ "intact": false,
+ "pattern": "sion",
+ "size": "4"
+ },
+ {
+ "appendage": "c",
+ "continuation": false,
+ "intact": false,
+ "pattern": "xion",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ion",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ian",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "an",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "een",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "en",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "nn",
+ "size": "1"
+ }
+ ],
+ "p": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ship",
+ "size": "4"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "pp",
+ "size": "1"
+ }
+ ],
+ "r": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "er",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ear",
+ "size": "0"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ar",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "or",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ur",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "rr",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "tr",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ier",
+ "size": "3"
+ }
+ ],
+ "s": [
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ies",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sis",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "is",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ness",
+ "size": "4"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ss",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ous",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": true,
+ "pattern": "us",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": true,
+ "pattern": "s",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "s",
+ "size": "0"
+ }
+ ],
+ "t": [
+ {
+ "appendage": "y",
+ "continuation": false,
+ "intact": false,
+ "pattern": "plicat",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "at",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ment",
+ "size": "4"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ent",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ant",
+ "size": "3"
+ },
+ {
+ "appendage": "b",
+ "continuation": false,
+ "intact": false,
+ "pattern": "ript",
+ "size": "2"
+ },
+ {
+ "appendage": "b",
+ "continuation": false,
+ "intact": false,
+ "pattern": "orpt",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "duct",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sumpt",
+ "size": "2"
+ },
+ {
+ "appendage": "i",
+ "continuation": false,
+ "intact": false,
+ "pattern": "cept",
+ "size": "2"
+ },
+ {
+ "appendage": "v",
+ "continuation": false,
+ "intact": false,
+ "pattern": "olut",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "sist",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ist",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "tt",
+ "size": "1"
+ }
+ ],
+ "u": [
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "iqu",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ogu",
+ "size": "1"
+ }
+ ],
+ "v": [
+ {
+ "appendage": "j",
+ "continuation": true,
+ "intact": false,
+ "pattern": "siv",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "eiv",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "iv",
+ "size": "2"
+ }
+ ],
+ "y": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "bly",
+ "size": "1"
+ },
+ {
+ "appendage": "y",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ily",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ply",
+ "size": "0"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ly",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ogy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "phy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "omy",
+ "size": "1"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "opy",
+ "size": "1"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ity",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ety",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "lty",
+ "size": "2"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "istry",
+ "size": "5"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ary",
+ "size": "3"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "ory",
+ "size": "3"
+ },
+ {
+ "continuation": false,
+ "intact": false,
+ "pattern": "ify",
+ "size": "3"
+ },
+ {
+ "appendage": "t",
+ "continuation": true,
+ "intact": false,
+ "pattern": "ncy",
+ "size": "2"
+ },
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "acy",
+ "size": "3"
+ }
+ ],
+ "z": [
+ {
+ "continuation": true,
+ "intact": false,
+ "pattern": "iz",
+ "size": "2"
+ },
+ {
+ "appendage": "s",
+ "continuation": false,
+ "intact": false,
+ "pattern": "yz",
+ "size": "1"
+ }
+ ]
+};
+
+
+},{}],51:[function(require,module,exports){
+// Original copyright:
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+// This version:
+/*
+Copyright (c) 2012, Guillaume Marty
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+// Original location:
+// http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/analysis/kuromoji/src/resources/org/apache/lucene/analysis/ja/stopwords.txt
+var words = ['ã®', 'ã«', 'ã¯', 'ã‚’', 'ãŸ', 'ãŒ', 'ã§', 'ã¦', 'ã¨', 'ã—', 'ã‚Œ', 'ã•',
+ 'ã‚ã‚‹', 'ã„ã‚‹', 'ã‚‚', 'ã™ã‚‹', 'ã‹ã‚‰', 'ãª', 'ã“ã¨', 'ã¨ã—ã¦', 'ã„', 'ã‚„', 'れる',
+ 'ãªã©', 'ãªã£', 'ãªã„', 'ã“ã®', 'ãŸã‚', 'ãã®', 'ã‚ã£', 'よã†', 'ã¾ãŸ', 'ã‚‚ã®',
+ 'ã¨ã„ã†', 'ã‚ã‚Š', 'ã¾ã§', 'られ', 'ãªã‚‹', 'ã¸', 'ã‹', 'ã ', 'ã“ã‚Œ', 'ã«ã‚ˆã£ã¦',
+ 'ã«ã‚ˆã‚Š', 'ãŠã‚Š', 'より', 'ã«ã‚ˆã‚‹', 'ãš', 'ãªã‚Š', 'られる', 'ã«ãŠã„ã¦', 'ã°', 'ãªã‹ã£',
+ 'ãªã', 'ã—ã‹ã—', 'ã«ã¤ã„ã¦', 'ã›', 'ã ã£', 'ãã®å¾Œ', 'ã§ãã‚‹', 'ãã‚Œ', 'ã†', 'ã®ã§',
+ 'ãªãŠ', 'ã®ã¿', 'ã§ã', 'ã', 'ã¤', 'ã«ãŠã‘ã‚‹', 'ãŠã‚ˆã³', 'ã„ã†', 'ã•ã‚‰ã«', 'ã§ã‚‚',
+ 'ら', 'ãŸã‚Š', 'ãã®ä»–', 'ã«é–¢ã™ã‚‹', 'ãŸã¡', 'ã¾ã™', 'ã‚“', 'ãªã‚‰', 'ã«å¯¾ã—ã¦', '特ã«',
+ 'ã›ã‚‹', 'åŠã³', 'ã“れら', 'ã¨ã', 'ã§ã¯', 'ã«ã¦', 'ã»ã‹', 'ãªãŒã‚‰', 'ã†ã¡', 'ãã—ã¦',
+ 'ã¨ã¨ã‚‚ã«', 'ãŸã ã—', 'ã‹ã¤ã¦', 'ãã‚Œãžã‚Œ', 'ã¾ãŸã¯', 'ãŠ', 'ã»ã©', 'ã‚‚ã®ã®', 'ã«å¯¾ã™ã‚‹',
+ 'ã»ã¨ã‚“ã©', 'ã¨å…±ã«', 'ã¨ã„ã£ãŸ', 'ã§ã™', 'ã¨ã‚‚', 'ã¨ã“ã‚', 'ã“ã“'];
+
+// tell the world about the noise words.
+module.exports = words;
+
+},{}],52:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/**
+ * \@todo Use .bind() in Tokenizer.prototype.attach().
+ */
+
+var Tokenizer = function() {
+};
+
+Tokenizer.prototype.trim = function(array) {
+ if (array[array.length - 1] == '')
+ array.pop();
+
+ if (array[0] == '')
+ array.shift();
+
+ return array;
+};
+
+// Expose an attach function that will patch String with new methods.
+Tokenizer.prototype.attach = function() {
+ var self = this;
+
+ String.prototype.tokenize = function() {
+ return self.tokenize(this);
+ }
+};
+
+Tokenizer.prototype.tokenize = function() {};
+
+module.exports = Tokenizer;
+
+},{}],53:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var TenseInflector = function () {
+};
+
+TenseInflector.prototype.addSingular = function(pattern, replacement) {
+ this.customSingularForms.push([pattern, replacement]);
+};
+
+TenseInflector.prototype.addPlural = function(pattern, replacement) {
+ this.customPluralForms.push([pattern, replacement]);
+};
+
+TenseInflector.prototype.ize = function (token, formSet, customForms) {
+ var restoreCase = this.restoreCase(token);
+ return restoreCase(this.izeRegExps(token, customForms) || this.izeAbiguous(token) ||
+ this.izeRegulars(token, formSet) || this.izeRegExps(token, formSet.regularForms) ||
+ token);
+}
+
+TenseInflector.prototype.izeAbiguous = function (token) {
+ if(this.ambiguous.indexOf(token.toLowerCase()) > -1)
+ return token.toLowerCase();
+
+ return false;
+}
+
+TenseInflector.prototype.pluralize = function (token) {
+ return this.ize(token, this.pluralForms, this.customPluralForms);
+};
+
+TenseInflector.prototype.singularize = function(token) {
+ return this.ize(token, this.singularForms, this.customSingularForms);
+};
+
+var uppercaseify = function(token) {
+ return token.toUpperCase();
+}
+var capitalize = function(token) {
+ return token[0].toUpperCase() + token.slice(1);
+}
+var lowercaseify = function(token) {
+ return token.toLowerCase();
+}
+
+TenseInflector.prototype.restoreCase = function(token) {
+ if (token[0] === token[0].toUpperCase()) {
+ if (token[1] && token[1] === token[1].toLowerCase()) {
+ return capitalize;
+ } else {
+ return uppercaseify;
+ }
+ } else {
+ return lowercaseify;
+ }
+}
+
+TenseInflector.prototype.izeRegulars = function(token, formSet) {
+ token = token.toLowerCase();
+
+ if(formSet.irregularForms[token])
+ return formSet.irregularForms[token];
+
+ return false;
+}
+
+TenseInflector.prototype.addForm = function(singularTable, pluralTable, singular, plural) {
+ singular = singular.toLowerCase();
+ plural = plural.toLowerCase();
+ pluralTable[singular] = plural;
+ singularTable[plural] = singular;
+};
+
+TenseInflector.prototype.addIrregular = function(singular, plural) {
+ this.addForm(this.singularForms.irregularForms, this.pluralForms.irregularForms, singular, plural);
+};
+
+TenseInflector.prototype.izeRegExps = function(token, forms) {
+ var i, form;
+ for(i = 0; i < forms.length; i++) {
+ form = forms[i];
+
+ if(token.match(form[0]))
+ return token.replace(form[0], form[1]);
+ }
+
+ return false;
+ }
+
+module.exports = TenseInflector;
+
+},{}],54:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var FormSet = function() {
+ this.regularForms = [];
+ this.irregularForms = {};
+}
+
+module.exports = FormSet;
+
+},{}],39:[function(require,module,exports){
+/*
+ Copyright (c) 2012, Guillaume Marty
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/**
+ * A transliteration of Katakana & Hiragana to roman characters using the
+ * modified Hepburn system.
+ * Rules based on CLDR transform rule set `Katakana-Latin-BGN.xml` but with
+ * several bugs fixed:
+ * * Missing Å«
+ * * Missing tsu + voiced kana
+ * * typos on my~ transliterations
+ * * support for long vowel sign
+ * * support for final small tsu
+ * * support for u + small vowels
+ * * support for su/shi/ji + small vowels
+ * * support for tchi/tsu/te/to + small vowels
+ * * support for fu + small vowels
+ * * support for katakana middle dot
+ *
+ * \@todo Take iteration marks into account.
+ */
+
+var replacer = require('../../util/utils').replacer;
+
+var transliterationTable1 = {
+ 'ウァ': 'wa', // KATAKANA LETTER U + SMALL A
+ 'ウィ': 'wi', // KATAKANA LETTER U + SMALL I
+ 'ウェ': 'we', // KATAKANA LETTER U + SMALL E
+ 'ウォ': 'wo', // KATAKANA LETTER U + SMALL O
+ 'ウー': 'ū', // KATAKANA LETTER VU + PROLONGED SOUND MARK
+
+ 'ヴァ': 'va', // KATAKANA LETTER VU + SMALL A
+ 'ヴィ': 'vi', // KATAKANA LETTER VU + SMALL I
+ 'ヴェ': 've', // KATAKANA LETTER VU + SMALL E
+ 'ヴォ': 'vo', // KATAKANA LETTER VU + SMALL O
+ 'ヴュ': 'vyu', // KATAKANA LETTER VU + SMALL YU
+
+ 'ã†ã': 'wa', // HIRAGANA LETTER U + SMALL A
+ 'ã†ãƒ': 'wi', // HIRAGANA LETTER U + SMALL I
+ 'ã†ã‡': 'we', // HIRAGANA LETTER U + SMALL E
+ 'ã†ã‰': 'wo', // HIRAGANA LETTER U + SMALL O
+ 'ã†ãƒ¼': 'Å«', // HIRAGANA LETTER VU + PROLONGED SOUND MARK
+
+ 'ã‚”ã': 'va', // HIRAGANA LETTER VU + SMALL A
+ 'ã‚”ãƒ': 'vi', // HIRAGANA LETTER VU + SMALL I
+ 'ã‚”ã‡': 've', // HIRAGANA LETTER VU + SMALL E
+ 'ã‚”ã‰': 'vo', // HIRAGANA LETTER VU + SMALL O
+ 'ゔゅ': 'vyu' // HIRAGANA LETTER VU + SMALL YU
+};
+
+var transliterationTable2 = {
+ 'イェ': 'ye', // KATAKANA LETTER I + SMALL E
+
+ 'ã‚¢': 'a', // KATAKANA LETTER A
+ 'イ': 'i', // KATAKANA LETTER I
+ 'ウウ': 'ū', // KATAKANA LETTER U + U
+ 'ウ': 'u', // KATAKANA LETTER U
+ 'エ': 'e', // KATAKANA LETTER E
+ 'オウ': 'Å', // KATAKANA LETTER O + U
+ 'オ': 'o', // KATAKANA LETTER O
+
+ 'クァ': 'kwa', // KATAKANA LETTER KU + SMALL A
+ 'クィ': 'kwi', // KATAKANA LETTER KU + SMALL I
+ 'クェ': 'kwe', // KATAKANA LETTER KU + SMALL E
+ 'クォ': 'kwo', // KATAKANA LETTER KU + SMALL O
+
+ 'ã‚«': 'ka', // KATAKANA LETTER KA
+ 'キョウ': 'kyÅ', // KATAKANA LETTER KI + SMALL YO + U
+ 'キュウ': 'kyū', // KATAKANA LETTER KI + SMALL YU + U
+ 'キャ': 'kya', // KATAKANA LETTER KI + SMALL YA
+ 'キョ': 'kyo', // KATAKANA LETTER KI + SMALL YO
+ 'キュ': 'kyu', // KATAKANA LETTER KI + SMALL YU
+ 'ã‚­': 'ki', // KATAKANA LETTER KI
+ 'ク': 'ku', // KATAKANA LETTER KU
+ 'ケ': 'ke', // KATAKANA LETTER KE
+ 'コウ': 'kÅ', // KATAKANA LETTER KO + U
+ 'コ': 'ko', // KATAKANA LETTER KO
+
+ 'シェ': 'she', // KATAKANA LETTER SI + SMALL E
+ 'スィ': 'si', // KATAKANA LETTER SU + SMALL I
+
+ 'サ': 'sa', // KATAKANA LETTER SA
+ 'ショウ': 'shÅ', // KATAKANA LETTER SI + SMALL YO + U
+ 'シュウ': 'shū', // KATAKANA LETTER SI + SMALL YU + U
+ 'シャ': 'sha', // KATAKANA LETTER SI + SMALL YA
+ 'ショ': 'sho', // KATAKANA LETTER SI + SMALL YO
+ 'シュ': 'shu', // KATAKANA LETTER SI + SMALL YU
+ 'ã‚·': 'shi', // KATAKANA LETTER SI
+ 'スウ': 'sū', // KATAKANA LETTER SU + U
+ 'ス': 'su', // KATAKANA LETTER SU
+ 'ã‚»': 'se', // KATAKANA LETTER SE
+ 'ソウ': 'sÅ', // KATAKANA LETTER SO + U
+ 'ソ': 'so', // KATAKANA LETTER SO
+
+ 'ãƒã‚§': 'che', // KATAKANA LETTER TI + SMALL E
+ 'ツァ': 'tsa', // KATAKANA LETTER TU + SMALL A
+ 'ツィ': 'tsi', // KATAKANA LETTER TU + SMALL I
+ 'ツェ': 'tse', // KATAKANA LETTER TU + SMALL E
+ 'ツォ': 'tso', // KATAKANA LETTER TU + SMALL O
+ 'ティ': 'ti', // KATAKANA LETTER TE + SMALL I
+ 'ディ': 'di', // KATAKANA LETTER DE + SMALL I
+ 'テュ': 'tyu', // KATAKANA LETTER TE + SMALL YU
+ 'デュ': 'dyu', // KATAKANA LETTER DE + SMALL YU
+ 'トィ': 'twi', // KATAKANA LETTER TO + SMALL I
+ 'トゥ': 'tu', // KATAKANA LETTER TO + SMALL U
+ 'ドィ': 'dwi', // KATAKANA LETTER DO + SMALL I
+ 'ドゥ': 'du', // KATAKANA LETTER DO + SMALL U
+
+ 'ã‚¿': 'ta', // KATAKANA LETTER TA
+ 'ãƒãƒ§ã‚¦': 'chÅ', // KATAKANA LETTER TI + SMALL YO + U
+ 'ãƒãƒ¥ã‚¦': 'chÅ«', // KATAKANA LETTER TI + SMALL YU + U
+ 'ãƒãƒ£': 'cha', // KATAKANA LETTER TI + SMALL YA
+ 'ãƒãƒ§': 'cho', // KATAKANA LETTER TI + SMALL YO
+ 'ãƒãƒ¥': 'chu', // KATAKANA LETTER TI + SMALL YU
+ 'ãƒ': 'chi', // KATAKANA LETTER TI
+ 'ツウ': 'tsū', // KATAKANA LETTER TU + U
+ 'ツ': 'tsu', // KATAKANA LETTER TU
+ 'テ': 'te', // KATAKANA LETTER TE
+ 'トウ': 'tÅ', // KATAKANA LETTER TO + U
+ 'ト': 'to', // KATAKANA LETTER TO
+
+ 'ナ': 'na', // KATAKANA LETTER NA
+ 'ニョウ': 'nyÅ', // KATAKANA LETTER NI + SMALL YO + U
+ 'ニュウ': 'nyū', // KATAKANA LETTER NI + SMALL YU + U
+ 'ニャ': 'nya', // KATAKANA LETTER NI + SMALL YA
+ 'ニョ': 'nyo', // KATAKANA LETTER NI + SMALL YO
+ 'ニュ': 'nyu', // KATAKANA LETTER NI + SMALL YU
+ 'ニ': 'ni', // KATAKANA LETTER NI
+ 'ヌウ': 'nū', // KATAKANA LETTER NU + U
+ 'ヌ': 'nu', // KATAKANA LETTER NU
+ 'ãƒ': 'ne', // KATAKANA LETTER NE
+ 'ノウ': 'nÅ', // KATAKANA LETTER NO + U
+ 'ノ': 'no', // KATAKANA LETTER NO
+
+ 'ファ': 'fa', // KATAKANA LETTER HU + SMALL A
+ 'フィ': 'fi', // KATAKANA LETTER HU + SMALL I
+ //'フゥ': 'fu', // KATAKANA LETTER HU + SMALL U
+ 'フェ': 'fe', // KATAKANA LETTER HU + SMALL E
+ 'フォ': 'fo', // KATAKANA LETTER HU + SMALL O
+ 'フュ': 'fyu', // KATAKANA LETTER HU + SMALL YU
+ 'ホェ': 'hwe', // KATAKANA LETTER HO + SMALL E
+
+ 'ãƒ': 'ha', // KATAKANA LETTER HA
+ 'ヒョウ': 'hyÅ', // KATAKANA LETTER HI + SMALL YO + U
+ 'ヒュウ': 'hyū', // KATAKANA LETTER HI + SMALL YU + U
+ 'ヒャ': 'hya', // KATAKANA LETTER HI + SMALL YA
+ 'ヒョ': 'hyo', // KATAKANA LETTER HI + SMALL YO
+ 'ヒュ': 'hyu', // KATAKANA LETTER HI + SMALL YU
+ 'ヒ': 'hi', // KATAKANA LETTER HI
+ 'フウ': 'fū', // KATAKANA LETTER HU + U
+ 'フ': 'fu', // KATAKANA LETTER HU
+ 'ヘ': 'he', // KATAKANA LETTER HE
+ 'ホウ': 'hÅ', // KATAKANA LETTER HO + U
+ 'ホ': 'ho', // KATAKANA LETTER HO
+
+ 'マ': 'ma', // KATAKANA LETTER MA
+ 'ミョウ': 'myÅ', // KATAKANA LETTER MI + SMALL YO + U
+ 'ミュウ': 'myū', // KATAKANA LETTER MI + SMALL YU + U
+ 'ミャ': 'mya', // KATAKANA LETTER MI + SMALL YA
+ 'ミョ': 'myo', // KATAKANA LETTER MI + SMALL YO
+ 'ミュ': 'myu', // KATAKANA LETTER MI + SMALL YU
+ 'ミ': 'mi', // KATAKANA LETTER MI
+ 'ムウ': 'mū', // KATAKANA LETTER MU + U
+ 'ム': 'mu', // KATAKANA LETTER MU
+ 'メ': 'me', // KATAKANA LETTER ME
+ 'モウ': 'mÅ', // KATAKANA LETTER MO + U
+ 'モ': 'mo', // KATAKANA LETTER MO
+
+ 'ヤ': 'ya', // KATAKANA LETTER YA
+ 'ユウ': 'yū', // KATAKANA LETTER YU + U
+ 'ユ': 'yu', // KATAKANA LETTER YU
+ 'ヨウ': 'yÅ', // KATAKANA LETTER YO + U
+ 'ヨ': 'yo', // KATAKANA LETTER YO
+
+ 'リェ': 'rye', // KATAKANA LETTER RI + SMALL E
+
+ 'ラ': 'ra', // KATAKANA LETTER RA
+ 'リョウ': 'ryÅ', // KATAKANA LETTER RI + SMALL YO + U
+ 'リュウ': 'ryū', // KATAKANA LETTER RI + SMALL YU + U
+ 'リャ': 'rya', // KATAKANA LETTER RI + SMALL YA
+ 'リョ': 'ryo', // KATAKANA LETTER RI + SMALL YO
+ 'リュ': 'ryu', // KATAKANA LETTER RI + SMALL YU
+ 'リ': 'ri', // KATAKANA LETTER RI
+ 'ルウ': 'rū', // KATAKANA LETTER RU + U
+ 'ル': 'ru', // KATAKANA LETTER RU
+ 'レ': 're', // KATAKANA LETTER RE
+ 'ロウ': 'rÅ', // KATAKANA LETTER RO + U
+ 'ロ': 'ro', // KATAKANA LETTER RO
+
+ 'ワ': 'wa', // KATAKANA LETTER WA
+ 'ヰ': 'i', // KATAKANA LETTER WI
+ 'ヱ': 'e', // KATAKANA LETTER WE
+ 'ヲ': 'o', // KATAKANA LETTER WO
+
+ 'ン': 'n', // KATAKANA LETTER N
+
+ 'ã‚°ã‚¡': 'gwa', // KATAKANA LETTER GU + SMALL A
+ 'ã‚°ã‚£': 'gwi', // KATAKANA LETTER GU + SMALL I
+ 'グェ': 'gwe', // KATAKANA LETTER GU + SMALL E
+ 'ã‚°ã‚©': 'gwo', // KATAKANA LETTER GU + SMALL O
+
+ 'ガ': 'ga', // KATAKANA LETTER GA
+ 'ギョウ': 'gyÅ', // KATAKANA LETTER GI + SMALL YO + U
+ 'ギュウ': 'gyū', // KATAKANA LETTER GI + SMALL YU + U
+ 'ギャ': 'gya', // KATAKANA LETTER GI + SMALL YA
+ 'ギョ': 'gyo', // KATAKANA LETTER GI + SMALL YO
+ 'ギュ': 'gyu', // KATAKANA LETTER GI + SMALL YU
+ 'ã‚®': 'gi', // KATAKANA LETTER GI
+ 'グウ': 'gū', // KATAKANA LETTER GU + U
+ 'ã‚°': 'gu', // KATAKANA LETTER GU
+ 'ゲ': 'ge', // KATAKANA LETTER GE
+ 'ゴウ': 'gÅ', // KATAKANA LETTER GO + U
+ 'ã‚´': 'go', // KATAKANA LETTER GO
+
+ 'ジェ': 'je', // KATAKANA LETTER ZI + SMALL E
+ 'ズィ': 'zi', // KATAKANA LETTER ZU + SMALL I
+
+ 'ザ': 'za', // KATAKANA LETTER ZA
+ 'ジョウ': 'jÅ', // KATAKANA LETTER ZI + SMALL YO + U
+ 'ジュウ': 'jū', // KATAKANA LETTER ZI + SMALL YU + U
+ 'ジャ': 'ja', // KATAKANA LETTER ZI + SMALL YA
+ 'ジョ': 'jo', // KATAKANA LETTER ZI + SMALL YO
+ 'ジュ': 'ju', // KATAKANA LETTER ZI + SMALL YU
+ 'ジ': 'ji', // KATAKANA LETTER ZI
+ 'ズウ': 'zū', // KATAKANA LETTER ZU + U
+ 'ズ': 'zu', // KATAKANA LETTER ZU
+ 'ゼ': 'ze', // KATAKANA LETTER ZE
+ 'ゾウ': 'zÅ', // KATAKANA LETTER ZO + U
+ 'ゾ': 'zo', // KATAKANA LETTER ZO
+
+ 'ダ': 'da', // KATAKANA LETTER DA
+ 'ヂ': 'ji', // KATAKANA LETTER DI
+ 'ヅウ': 'zū', // KATAKANA LETTER DU + U
+ 'ヅ': 'zu', // KATAKANA LETTER DU
+ 'デ': 'de', // KATAKANA LETTER DE
+ 'ドウ': 'dÅ', // KATAKANA LETTER DO + U
+ 'ド': 'do', // KATAKANA LETTER DO
+
+ 'ブュ': 'byu', // KATAKANA LETTER BU + SMALL YU
+
+ 'ãƒ': 'ba', // KATAKANA LETTER BA
+ 'ビョウ': 'byÅ', // KATAKANA LETTER BI + SMALL YO + U
+ 'ビュウ': 'byū', // KATAKANA LETTER BI + SMALL YU + U
+ 'ビャ': 'bya', // KATAKANA LETTER BI + SMALL YA
+ 'ビョ': 'byo', // KATAKANA LETTER BI + SMALL YO
+ 'ビュ': 'byu', // KATAKANA LETTER BI + SMALL YU
+ 'ビ': 'bi', // KATAKANA LETTER BI
+ 'ブウ': 'bū', // KATAKANA LETTER BU + U
+ 'ブ': 'bu', // KATAKANA LETTER BU
+ 'ベ': 'be', // KATAKANA LETTER BE
+ 'ボウ': 'bÅ', // KATAKANA LETTER BO + U
+ 'ボ': 'bo', // KATAKANA LETTER BO
+
+ 'パ': 'pa', // KATAKANA LETTER PA
+ 'ピョウ': 'pyÅ', // KATAKANA LETTER PI + SMALL YO + U
+ 'ピュウ': 'pyū', // KATAKANA LETTER PI + SMALL YU + U
+ 'ピャ': 'pya', // KATAKANA LETTER PI + SMALL YA
+ 'ピョ': 'pyo', // KATAKANA LETTER PI + SMALL YO
+ 'ピュ': 'pyu', // KATAKANA LETTER PI + SMALL YU
+ 'ピ': 'pi', // KATAKANA LETTER PI
+ 'プウ': 'pū', // KATAKANA LETTER PU + U
+ 'プ': 'pu', // KATAKANA LETTER PU
+ 'ペ': 'pe', // KATAKANA LETTER PE
+ 'ãƒã‚¦': 'pÅ', // KATAKANA LETTER PO + U
+ 'ãƒ': 'po', // KATAKANA LETTER PO
+
+ 'ヴ': 'v', // KATAKANA LETTER VU
+
+ '・': ' ', // KATAKANA MIDDLE DOT
+
+ 'ã„ã‡': 'ye', // HIRAGANA LETTER I + SMALL E
+
+ 'ã‚': 'a', // HIRAGANA LETTER A
+ 'ã„': 'i', // HIRAGANA LETTER I
+ 'ã†ã†': 'Å«', // HIRAGANA LETTER U + U
+ 'ã†': 'u', // HIRAGANA LETTER U
+ 'ãˆ': 'e', // HIRAGANA LETTER E
+ 'ãŠã†': 'Å', // HIRAGANA LETTER O + U
+ 'ãŠ': 'o', // HIRAGANA LETTER O
+
+ 'ãã': 'kwa', // HIRAGANA LETTER KU + SMALL A
+ 'ããƒ': 'kwi', // HIRAGANA LETTER KU + SMALL I
+ 'ãã‡': 'kwe', // HIRAGANA LETTER KU + SMALL E
+ 'ãã‰': 'kwo', // HIRAGANA LETTER KU + SMALL O
+
+ 'ã‹': 'ka', // HIRAGANA LETTER KA
+ 'ãょã†': 'kyÅ', // HIRAGANA LETTER KI + SMALL YO + U
+ 'ãã‚…ã†': 'kyÅ«', // HIRAGANA LETTER KI + SMALL YU + U
+ 'ãゃ': 'kya', // HIRAGANA LETTER KI + SMALL YA
+ 'ãょ': 'kyo', // HIRAGANA LETTER KI + SMALL YO
+ 'ãã‚…': 'kyu', // HIRAGANA LETTER KI + SMALL YU
+ 'ã': 'ki', // HIRAGANA LETTER KI
+ 'ãã†': 'kÅ«', // HIRAGANA LETTER KU + U
+ 'ã': 'ku', // HIRAGANA LETTER KU
+ 'ã‘': 'ke', // HIRAGANA LETTER KE
+ 'ã“ã†': 'kÅ', // HIRAGANA LETTER KO + U
+ 'ã“': 'ko', // HIRAGANA LETTER KO
+
+ 'ã—ã‡': 'she', // HIRAGANA LETTER SI + SMALL E
+ 'ã™ãƒ': 'si', // HIRAGANA LETTER SU + SMALL I
+
+ 'ã•': 'sa', // HIRAGANA LETTER SA
+ 'ã—ょã†': 'shÅ', // HIRAGANA LETTER SI + SMALL YO + U
+ 'ã—ã‚…ã†': 'shÅ«', // HIRAGANA LETTER SI + SMALL YU + U
+ 'ã—ゃ': 'sha', // HIRAGANA LETTER SI + SMALL YA
+ 'ã—ょ': 'sho', // HIRAGANA LETTER SI + SMALL YO
+ 'ã—ã‚…': 'shu', // HIRAGANA LETTER SI + SMALL YU
+ 'ã—': 'shi', // HIRAGANA LETTER SI
+ 'ã™ã†': 'sÅ«', // HIRAGANA LETTER SU + U
+ 'ã™': 'su', // HIRAGANA LETTER SU
+ 'ã›': 'se', // HIRAGANA LETTER SE
+ 'ãã†': 'sÅ', // HIRAGANA LETTER SO + U
+ 'ã': 'so', // HIRAGANA LETTER SO
+
+ 'ã¡ã‡': 'che', // HIRAGANA LETTER TI + SMALL E
+ 'ã¤ã': 'tsa', // HIRAGANA LETTER TU + SMALL A
+ 'ã¤ãƒ': 'tsi', // HIRAGANA LETTER TU + SMALL I
+ 'ã¤ã‡': 'tse', // HIRAGANA LETTER TU + SMALL E
+ 'ã¤ã‰': 'tso', // HIRAGANA LETTER TU + SMALL O
+ 'ã¦ãƒ': 'ti', // HIRAGANA LETTER TE + SMALL I
+ 'ã§ãƒ': 'di', // HIRAGANA LETTER DE + SMALL I
+ 'ã¦ã‚…': 'tyu', // HIRAGANA LETTER TE + SMALL YU
+ 'ã§ã‚…': 'dyu', // HIRAGANA LETTER DE + SMALL YU
+ 'ã¨ãƒ': 'twi', // HIRAGANA LETTER TO + SMALL I
+ 'ã¨ã…': 'tu', // HIRAGANA LETTER TO + SMALL U
+ 'ã©ãƒ': 'dwi', // HIRAGANA LETTER DO + SMALL I
+ 'ã©ã…': 'du', // HIRAGANA LETTER DO + SMALL U
+
+ 'ãŸ': 'ta', // HIRAGANA LETTER TA
+ 'ã¡ã‚‡ã†': 'chÅ', // HIRAGANA LETTER TI + SMALL YO + U
+ 'ã¡ã‚…ã†': 'chÅ«', // HIRAGANA LETTER TI + SMALL YU + U
+ 'ã¡ã‚ƒ': 'cha', // HIRAGANA LETTER TI + SMALL YA
+ 'ã¡ã‚‡': 'cho', // HIRAGANA LETTER TI + SMALL YO
+ 'ã¡ã‚…': 'chu', // HIRAGANA LETTER TI + SMALL YU
+ 'ã¡': 'chi', // HIRAGANA LETTER TI
+ 'ã¤ã†': 'tsÅ«', // HIRAGANA LETTER TU + U
+ 'ã¤': 'tsu', // HIRAGANA LETTER TU
+ 'ã¦': 'te', // HIRAGANA LETTER TE
+ 'ã¨ã†': 'tÅ', // HIRAGANA LETTER TO + U
+ 'ã¨': 'to', // HIRAGANA LETTER TO
+
+ 'ãª': 'na', // HIRAGANA LETTER NA
+ 'ã«ã‚‡ã†': 'nyÅ', // HIRAGANA LETTER NI + SMALL YO + U
+ 'ã«ã‚…ã†': 'nyÅ«', // HIRAGANA LETTER NI + SMALL YU + U
+ 'ã«ã‚ƒ': 'nya', // HIRAGANA LETTER NI + SMALL YA
+ 'ã«ã‚‡': 'nyo', // HIRAGANA LETTER NI + SMALL YO
+ 'ã«ã‚…': 'nyu', // HIRAGANA LETTER NI + SMALL YU
+ 'ã«': 'ni', // HIRAGANA LETTER NI
+ 'ã¬ã†': 'nÅ«', // HIRAGANA LETTER NU + U
+ 'ã¬': 'nu', // HIRAGANA LETTER NU
+ 'ã­': 'ne', // HIRAGANA LETTER NE
+ 'ã®ã†': 'nÅ', // HIRAGANA LETTER NO + U
+ 'ã®': 'no', // HIRAGANA LETTER NO
+
+ 'ãµã': 'fa', // HIRAGANA LETTER HU + SMALL A
+ 'ãµãƒ': 'fi', // HIRAGANA LETTER HU + SMALL I
+ //'ãµã…': 'fu', // HIRAGANA LETTER HU + SMALL U
+ 'ãµã‡': 'fe', // HIRAGANA LETTER HU + SMALL E
+ 'ãµã‰': 'fo', // HIRAGANA LETTER HU + SMALL O
+ 'ãµã‚…': 'fyu', // HIRAGANA LETTER HU + SMALL YU
+ 'ã»ã‡': 'hwe', // HIRAGANA LETTER HO + SMALL E
+
+ 'ã¯': 'ha', // HIRAGANA LETTER HA
+ 'ã²ã‚‡ã†': 'hyÅ', // HIRAGANA LETTER HI + SMALL YO + U
+ 'ã²ã‚…ã†': 'hyÅ«', // HIRAGANA LETTER HI + SMALL YU + U
+ 'ã²ã‚ƒ': 'hya', // HIRAGANA LETTER HI + SMALL YA
+ 'ã²ã‚‡': 'hyo', // HIRAGANA LETTER HI + SMALL YO
+ 'ã²ã‚…': 'hyu', // HIRAGANA LETTER HI + SMALL YU
+ 'ã²': 'hi', // HIRAGANA LETTER HI
+ 'ãµã†': 'fÅ«', // HIRAGANA LETTER HU + U
+ 'ãµ': 'fu', // HIRAGANA LETTER HU
+ 'ã¸': 'he', // HIRAGANA LETTER HE
+ 'ã»ã†': 'hÅ', // HIRAGANA LETTER HO + U
+ 'ã»': 'ho', // HIRAGANA LETTER HO
+
+ 'ã¾': 'ma', // HIRAGANA LETTER MA
+ 'ã¿ã‚‡ã†': 'myÅ', // HIRAGANA LETTER MI + SMALL YO + U
+ 'ã¿ã‚…ã†': 'myÅ«', // HIRAGANA LETTER MI + SMALL YU + U
+ 'ã¿ã‚ƒ': 'mya', // HIRAGANA LETTER MI + SMALL YA
+ 'ã¿ã‚‡': 'myo', // HIRAGANA LETTER MI + SMALL YO
+ 'ã¿ã‚…': 'myu', // HIRAGANA LETTER MI + SMALL YU
+ 'ã¿': 'mi', // HIRAGANA LETTER MI
+ 'ã‚€ã†': 'mÅ«', // HIRAGANA LETTER MU + U
+ 'ã‚€': 'mu', // HIRAGANA LETTER MU
+ 'ã‚': 'me', // HIRAGANA LETTER ME
+ 'ã‚‚ã†': 'mÅ', // HIRAGANA LETTER MO + U
+ 'ã‚‚': 'mo', // HIRAGANA LETTER MO
+
+ 'ã‚„': 'ya', // HIRAGANA LETTER YA
+ 'ゆã†': 'yÅ«', // HIRAGANA LETTER YU + U
+ 'ゆ': 'yu', // HIRAGANA LETTER YU
+ 'よã†': 'yÅ', // HIRAGANA LETTER YO + U
+ 'よ': 'yo', // HIRAGANA LETTER YO
+
+ 'ã‚Šã‡': 'rye', // HIRAGANA LETTER RI + SMALL E
+
+ 'ら': 'ra', // HIRAGANA LETTER RA
+ 'りょã†': 'ryÅ', // HIRAGANA LETTER RI + SMALL YO + U
+ 'ã‚Šã‚…ã†': 'ryÅ«', // HIRAGANA LETTER RI + SMALL YU + U
+ 'りゃ': 'rya', // HIRAGANA LETTER RI + SMALL YA
+ 'りょ': 'ryo', // HIRAGANA LETTER RI + SMALL YO
+ 'ã‚Šã‚…': 'ryu', // HIRAGANA LETTER RI + SMALL YU
+ 'ã‚Š': 'ri', // HIRAGANA LETTER RI
+ 'ã‚‹ã†': 'rÅ«', // HIRAGANA LETTER RU + U
+ 'ã‚‹': 'ru', // HIRAGANA LETTER RU
+ 'れ': 're', // HIRAGANA LETTER RE
+ 'ã‚ã†': 'rÅ', // HIRAGANA LETTER RO + U
+ 'ã‚': 'ro', // HIRAGANA LETTER RO
+
+ 'ã‚': 'wa', // HIRAGANA LETTER WA
+ 'ã‚': 'i', // HIRAGANA LETTER WI
+ 'ã‚‘': 'e', // HIRAGANA LETTER WE
+ 'ã‚’': 'o', // HIRAGANA LETTER WO
+
+ 'ã‚“': 'n', // HIRAGANA LETTER N
+
+ 'ãã': 'gwa', // HIRAGANA LETTER GU + SMALL A
+ 'ããƒ': 'gwi', // HIRAGANA LETTER GU + SMALL I
+ 'ãã‡': 'gwe', // HIRAGANA LETTER GU + SMALL E
+ 'ãã‰': 'gwo', // HIRAGANA LETTER GU + SMALL O
+
+ 'ãŒ': 'ga', // HIRAGANA LETTER GA
+ 'ãŽã‚‡ã†': 'gyÅ', // HIRAGANA LETTER GI + SMALL YO + U
+ 'ãŽã‚…ã†': 'gyÅ«', // HIRAGANA LETTER GI + SMALL YU + U
+ 'ãŽã‚ƒ': 'gya', // HIRAGANA LETTER GI + SMALL YA
+ 'ãŽã‚‡': 'gyo', // HIRAGANA LETTER GI + SMALL YO
+ 'ãŽã‚…': 'gyu', // HIRAGANA LETTER GI + SMALL YU
+ 'ãŽ': 'gi', // HIRAGANA LETTER GI
+ 'ãã†': 'gÅ«', // HIRAGANA LETTER GU + U
+ 'ã': 'gu', // HIRAGANA LETTER GU
+ 'ã’': 'ge', // HIRAGANA LETTER GE
+ 'ã”ã†': 'gÅ', // HIRAGANA LETTER GO + U
+ 'ã”': 'go', // HIRAGANA LETTER GO
+
+ 'ã˜ã‡': 'je', // HIRAGANA LETTER ZI + SMALL E
+ 'ãšãƒ': 'zi', // HIRAGANA LETTER ZU + SMALL I
+
+ 'ã–': 'za', // HIRAGANA LETTER ZA
+ 'ã˜ã‚‡ã†': 'jÅ', // HIRAGANA LETTER ZI + SMALL YO + U
+ 'ã˜ã‚…ã†': 'jÅ«', // HIRAGANA LETTER ZI + SMALL YU + U
+ 'ã˜ã‚ƒ': 'ja', // HIRAGANA LETTER ZI + SMALL YA
+ 'ã˜ã‚‡': 'jo', // HIRAGANA LETTER ZI + SMALL YO
+ 'ã˜ã‚…': 'ju', // HIRAGANA LETTER ZI + SMALL YU
+ 'ã˜': 'ji', // HIRAGANA LETTER ZI
+ 'ãšã†': 'zÅ«', // HIRAGANA LETTER ZU + U
+ 'ãš': 'zu', // HIRAGANA LETTER ZU
+ 'ãœ': 'ze', // HIRAGANA LETTER ZE
+ 'ãžã†': 'zÅ', // HIRAGANA LETTER ZO + U
+ 'ãž': 'zo', // HIRAGANA LETTER ZO
+
+ 'ã ': 'da', // HIRAGANA LETTER DA
+ 'ã¢': 'ji', // HIRAGANA LETTER DI
+ 'ã¥ã†': 'zÅ«', // HIRAGANA LETTER DU + U
+ 'ã¥': 'zu', // HIRAGANA LETTER DU
+ 'ã§': 'de', // HIRAGANA LETTER DE
+ 'ã©ã†': 'dÅ', // HIRAGANA LETTER DO + U
+ 'ã©': 'do', // HIRAGANA LETTER DO
+
+ 'ã¶ã‚…': 'byu', // HIRAGANA LETTER BU + SMALL YU
+
+ 'ã°': 'ba', // HIRAGANA LETTER BA
+ 'ã³ã‚‡ã†': 'byÅ', // HIRAGANA LETTER BI + SMALL YO + U
+ 'ã³ã‚…ã†': 'byÅ«', // HIRAGANA LETTER BI + SMALL YU + U
+ 'ã³ã‚ƒ': 'bya', // HIRAGANA LETTER BI + SMALL YA
+ 'ã³ã‚‡': 'byo', // HIRAGANA LETTER BI + SMALL YO
+ 'ã³ã‚…': 'byu', // HIRAGANA LETTER BI + SMALL YU
+ 'ã³': 'bi', // HIRAGANA LETTER BI
+ 'ã¶ã†': 'bÅ«', // HIRAGANA LETTER BU + U
+ 'ã¶': 'bu', // HIRAGANA LETTER BU
+ 'ã¹': 'be', // HIRAGANA LETTER BE
+ 'ã¼ã†': 'bÅ', // HIRAGANA LETTER BO + U
+ 'ã¼': 'bo', // HIRAGANA LETTER BO
+
+ 'ã±': 'pa', // HIRAGANA LETTER PA
+ 'ã´ã‚‡ã†': 'pyÅ', // HIRAGANA LETTER PI + SMALL YO + U
+ 'ã´ã‚…ã†': 'pyÅ«', // HIRAGANA LETTER PI + SMALL YU + U
+ 'ã´ã‚ƒ': 'pya', // HIRAGANA LETTER PI + SMALL YA
+ 'ã´ã‚‡': 'pyo', // HIRAGANA LETTER PI + SMALL YO
+ 'ã´ã‚…': 'pyu', // HIRAGANA LETTER PI + SMALL YU
+ 'ã´': 'pi', // HIRAGANA LETTER PI
+ 'ã·ã†': 'pÅ«', // HIRAGANA LETTER PU + U
+ 'ã·': 'pu', // HIRAGANA LETTER PU
+ 'ãº': 'pe', // HIRAGANA LETTER PE
+ 'ã½ã†': 'pÅ', // HIRAGANA LETTER PO + U
+ 'ã½': 'po', // HIRAGANA LETTER PO
+
+ 'ã‚”': 'v' // HIRAGANA LETTER VU
+};
+
+var transliterationTable3 = {
+ 'aã‚¡': 'Ä',
+ 'aã': 'Ä',
+ 'iィー': 'ī',
+ 'iã‚£': 'Ä«',
+ 'iãƒãƒ¼': 'Ä«',
+ 'iãƒ': 'Ä«',
+ 'aー': 'Ä',
+ 'iー': 'ī',
+ 'uー': 'ū',
+ 'eー': 'ē',
+ 'oー': 'Å',
+
+ // Fallback for small vowels
+ 'ã‚¡': 'a',
+ 'ã‚£': 'i',
+ 'ã‚¥': 'u',
+ 'ェ': 'e',
+ 'ã‚©': 'o',
+ 'ã': 'a',
+ 'ãƒ': 'i',
+ 'ã…': 'u',
+ 'ã‡': 'e',
+ 'ã‰': 'o'
+};
+
+var replace1 = replacer(transliterationTable1);
+var replace2 = replacer(transliterationTable2);
+var replace3 = replacer(transliterationTable3);
+
+module.exports = function(str) {
+ str = replace1(str);
+
+ str = str
+ .replace(/ッ(?=[ン])/g, 'n')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã‚“])/g, 'n')// HIRAGANA LETTER SMALL TU
+ .replace(/ン(?=[ãƒãƒ“ブベボパピプペãƒãƒžãƒŸãƒ ãƒ¡ãƒ¢])/g, 'm')// KATAKANA LETTER N
+ .replace(/ã‚“(?=[ã°ã³ã¶ã¹ã¼ã±ã´ã·ãºã½ã¾ã¿ã‚€ã‚ã‚‚])/g, 'm')// HIRAGANA LETTER N
+ .replace(/ン(?=[ヤユヨアイウエオ])/g, "n'")// KATAKANA LETTER N
+ .replace(/ã‚“(?=[やゆよã‚ã„ã†ãˆãŠ])/g, "n'");// HIRAGANA LETTER N
+ str = str
+ .replace(/ッ(?=[カキクケコ])/g, 'k')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã‹ããã‘ã“])/g, 'k')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ガギグゲゴ])/g, 'g')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãŒãŽãã’ã”])/g, 'g')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[サシスセソ])/g, 's')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã•ã—ã™ã›ã])/g, 's')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ザズゼゾ])/g, 'z')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã–ãšãœãž])/g, 'z')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ジ])/g, 'j')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã˜])/g, 'j')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ã‚¿ãƒãƒ„テト])/g, 't')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãŸã¡ã¤ã¦ã¨])/g, 't')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ダヂヅデド])/g, 't')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã ã¢ã¥ã§ã©])/g, 't')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ãƒãƒ’ヘホ])/g, 'h')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã¯ã²ã¸ã»])/g, 'h')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[フ])/g, 'f')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ãµ])/g, 'f')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ãƒãƒ“ブベボ])/g, 'b')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã°ã³ã¶ã¹ã¼])/g, 'b')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[パピプペãƒ])/g, 'p')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[ã±ã´ã·ãºã½])/g, 'p')// HIRAGANA LETTER SMALL TU
+ .replace(/ッ(?=[ラリルレロ])/g, 'r')// KATAKANA LETTER SMALL TU
+ .replace(/ã£(?=[らりるれã‚])/g, 'r');// HIRAGANA LETTER SMALL TU
+
+ str = replace2(str);
+ str = replace3(str);
+
+ str = str
+ .replace(/(ッ|ã£)\B/g, 't');// FINAL KATAKANA LETTER SMALL TU
+
+ return str;
+};
+
+},{"../../util/utils":55}],44:[function(require,module,exports){
+(function(){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer'),
+ tokenizer = new Tokenizer();
+
+module.exports = function() {
+ this.compare = function(stringA, stringB) {
+ return this.process(stringA) == this.process(stringB);
+ };
+
+ this.attach = function() {
+ var phonetic = this;
+
+ String.prototype.soundsLike = function(compareTo) {
+ return phonetic.compare(this, compareTo);
+ }
+
+ String.prototype.phonetics = function() {
+ return phonetic.process(this);
+ }
+
+ String.prototype.tokenizeAndPhoneticize = function(keepStops) {
+ var phoneticizedTokens = [];
+
+ tokenizer.tokenize(this).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) < 0)
+ phoneticizedTokens.push(token.phonetics());
+ });
+
+ return phoneticizedTokens;
+ }
+ };
+};
+
+})()
+},{"../util/stopwords":33,"../tokenizers/aggressive_tokenizer":18}],45:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.addStopWord = function(stopWord) {
+ stopwords.words.push(stopWord);
+ };
+
+ stemmer.addStopWords = function(moreStopWords) {
+ stopwords.words = stopwords.words.concat(moreStopWords);
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) == -1)
+ stemmedTokens.push(stemmer.stem(token));
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords":33,"../tokenizers/aggressive_tokenizer":18}],46:[function(require,module,exports){
+/*
+Copyright (c) 2012, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_ru');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_ru');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(new RegExp('[а-ÑÑ‘0-9]+', 'gi'))) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_ru":56,"../tokenizers/aggressive_tokenizer_ru":14}],47:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Stemmer by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_fa');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_fa');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if(keepStops || stopwords.words.indexOf(token) == -1)
+ stemmedTokens.push(stemmer.stem(token));
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_fa":57,"../tokenizers/aggressive_tokenizer_fa":15}],48:[function(require,module,exports){
+var stopwords = require('../util/stopwords_it');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_it');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(/[a-zàèìòù0-9]/gi)) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+},{"../util/stopwords_it":58,"../tokenizers/aggressive_tokenizer_it":17}],50:[function(require,module,exports){
+/*
+Copyright (c) 2012, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var stopwords = require('../util/stopwords_es');
+var Tokenizer = require('../tokenizers/aggressive_tokenizer_es');
+
+module.exports = function() {
+ var stemmer = this;
+
+ stemmer.stem = function(token) {
+ return token;
+ };
+
+ stemmer.tokenizeAndStem = function(text, keepStops) {
+ var stemmedTokens = [];
+
+ new Tokenizer().tokenize(text).forEach(function(token) {
+ if (keepStops || stopwords.words.indexOf(token) == -1) {
+ var resultToken = token.toLowerCase();
+ if (resultToken.match(new RegExp('[а-záéíóúüñ0-9]+', 'gi'))) {
+ resultToken = stemmer.stem(resultToken);
+ }
+ stemmedTokens.push(resultToken);
+ }
+ });
+
+ return stemmedTokens;
+ };
+
+ stemmer.attach = function() {
+ String.prototype.stem = function() {
+ return stemmer.stem(this);
+ };
+
+ String.prototype.tokenizeAndStem = function(keepStops) {
+ return stemmer.tokenizeAndStem(this, keepStops);
+ };
+ };
+}
+
+},{"../util/stopwords_es":59,"../tokenizers/aggressive_tokenizer_es":16}],60:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util');
+
+var Classifier = function(classifier, stemmer) {
+ this.classifier = classifier;
+ this.docs = [];
+ this.features = {};
+ this.stemmer = stemmer || PorterStemmer;
+ this.lastAdded = 0;
+};
+
+function addDocument(text, classification) {
+ if(typeof text === 'string')
+ text = this.stemmer.tokenizeAndStem(text);
+
+ if(text.length === 0) {
+ // ignore empty documents
+ return;
+ }
+
+ this.docs.push({
+ label: classification,
+ text: text
+ });
+
+ for(var i = 0; i < text.length; i++) {
+ this.features[text[i]] = 1;
+ }
+}
+
+function textToFeatures(observation) {
+ var features = [];
+
+ if(typeof observation === 'string')
+ observation = this.stemmer.tokenizeAndStem(observation);
+
+ for(var feature in this.features) {
+ if(observation.indexOf(feature) > -1)
+ features.push(1);
+ else
+ features.push(0);
+ }
+
+ return features;
+}
+
+function train() {
+ for(var i = this.lastAdded; i < this.docs.length; i++) {
+ var features = this.textToFeatures(this.docs[i].text);
+ this.classifier.addExample(features, this.docs[i].label);
+ this.lastAdded++;
+ }
+
+ this.classifier.train();
+}
+
+function getClassifications(observation) {
+ return this.classifier.getClassifications(this.textToFeatures(observation));
+}
+
+function classify(observation) {
+ return this.classifier.classify(this.textToFeatures(observation));
+}
+
+function restore(classifier, stemmer) {
+ classifier.stemmer = stemmer || PorterStemmer;
+ return classifier;
+}
+
+function save(filename, callback) {
+ var data = JSON.stringify(this);
+ var fs = require('fs');
+ var classifier = this;
+ fs.writeFile(filename, data, 'utf8', function(err) {
+ if(callback) {
+ callback(err, err ? null : classifier);
+ }
+ });
+}
+
+function load(filename, callback) {
+ var fs = require('fs');
+
+ fs.readFile(filename, 'utf8', function(err, data) {
+ var classifier;
+
+ if(!err) {
+ classifier = JSON.parse(data);
+ }
+
+ if(callback)
+ callback(err, classifier);
+ });
+}
+
+Classifier.prototype.addDocument = addDocument;
+Classifier.prototype.train = train;
+Classifier.prototype.classify = classify;
+Classifier.prototype.textToFeatures = textToFeatures;
+Classifier.prototype.save = save;
+Classifier.prototype.getClassifications = getClassifications;
+Classifier.restore = restore;
+Classifier.load = load;
+
+module.exports = Classifier;
+
+},{"util":40,"fs":42,"../stemmers/porter_stemmer":7}],61:[function(require,module,exports){
+require=(function(e,t,n,r){function i(r){if(!n[r]){if(!t[r]){if(e)return e(r);throw new Error("Cannot find module '"+r+"'")}var s=n[r]={exports:{}};t[r][0](function(e){var n=t[r][1][e];return i(n?n:e)},s,s.exports)}return n[r].exports}for(var s=0;s<r.length;s++)i(r[s]);return i})(typeof require!=="undefined"&&require,{1:[function(require,module,exports){
+exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) {
+ var e, m,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ nBits = -7,
+ i = isBE ? 0 : (nBytes - 1),
+ d = isBE ? 1 : -1,
+ s = buffer[offset + i];
+
+ i += d;
+
+ e = s & ((1 << (-nBits)) - 1);
+ s >>= (-nBits);
+ nBits += eLen;
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ m = e & ((1 << (-nBits)) - 1);
+ e >>= (-nBits);
+ nBits += mLen;
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ if (e === 0) {
+ e = 1 - eBias;
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity);
+ } else {
+ m = m + Math.pow(2, mLen);
+ e = e - eBias;
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+};
+
+exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) {
+ var e, m, c,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
+ i = isBE ? (nBytes - 1) : 0,
+ d = isBE ? -1 : 1,
+ s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+
+ value = Math.abs(value);
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0;
+ e = eMax;
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2);
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--;
+ c *= 2;
+ }
+ if (e + eBias >= 1) {
+ value += rt / c;
+ } else {
+ value += rt * Math.pow(2, 1 - eBias);
+ }
+ if (value * c >= 2) {
+ e++;
+ c /= 2;
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0;
+ e = eMax;
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen);
+ e = e + eBias;
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+ e = 0;
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
+
+ e = (e << mLen) | m;
+ eLen += mLen;
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
+
+ buffer[offset + i - d] |= s * 128;
+};
+
+},{}],2:[function(require,module,exports){
+(function(){// UTILITY
+var util = require('util');
+var Buffer = require("buffer").Buffer;
+var pSlice = Array.prototype.slice;
+
+function objectKeys(object) {
+ if (Object.keys) return Object.keys(object);
+ var result = [];
+ for (var name in object) {
+ if (Object.prototype.hasOwnProperty.call(object, name)) {
+ result.push(name);
+ }
+ }
+ return result;
+}
+
+// 1. The assert module provides functions that throw
+// AssertionError's when particular conditions are not met. The
+// assert module must conform to the following interface.
+
+var assert = module.exports = ok;
+
+// 2. The AssertionError is defined in assert.
+// new assert.AssertionError({ message: message,
+// actual: actual,
+// expected: expected })
+
+assert.AssertionError = function AssertionError(options) {
+ this.name = 'AssertionError';
+ this.message = options.message;
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+ var stackStartFunction = options.stackStartFunction || fail;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, stackStartFunction);
+ }
+};
+util.inherits(assert.AssertionError, Error);
+
+function replacer(key, value) {
+ if (value === undefined) {
+ return '' + value;
+ }
+ if (typeof value === 'number' && (isNaN(value) || !isFinite(value))) {
+ return value.toString();
+ }
+ if (typeof value === 'function' || value instanceof RegExp) {
+ return value.toString();
+ }
+ return value;
+}
+
+function truncate(s, n) {
+ if (typeof s == 'string') {
+ return s.length < n ? s : s.slice(0, n);
+ } else {
+ return s;
+ }
+}
+
+assert.AssertionError.prototype.toString = function() {
+ if (this.message) {
+ return [this.name + ':', this.message].join(' ');
+ } else {
+ return [
+ this.name + ':',
+ truncate(JSON.stringify(this.actual, replacer), 128),
+ this.operator,
+ truncate(JSON.stringify(this.expected, replacer), 128)
+ ].join(' ');
+ }
+};
+
+// assert.AssertionError instanceof Error
+
+assert.AssertionError.__proto__ = Error.prototype;
+
+// At present only the three keys mentioned above are used and
+// understood by the spec. Implementations or sub modules can pass
+// other keys to the AssertionError's constructor - they will be
+// ignored.
+
+// 3. All of the following functions must throw an AssertionError
+// when a corresponding condition is not met, with a message that
+// may be undefined if not provided. All assertion methods provide
+// both the actual and expected values to the assertion error for
+// display purposes.
+
+function fail(actual, expected, message, operator, stackStartFunction) {
+ throw new assert.AssertionError({
+ message: message,
+ actual: actual,
+ expected: expected,
+ operator: operator,
+ stackStartFunction: stackStartFunction
+ });
+}
+
+// EXTENSION! allows for well behaved errors defined elsewhere.
+assert.fail = fail;
+
+// 4. Pure assertion tests whether a value is truthy, as determined
+// by !!guard.
+// assert.ok(guard, message_opt);
+// This statement is equivalent to assert.equal(true, guard,
+// message_opt);. To test strictly for the value true, use
+// assert.strictEqual(true, guard, message_opt);.
+
+function ok(value, message) {
+ if (!!!value) fail(value, true, message, '==', assert.ok);
+}
+assert.ok = ok;
+
+// 5. The equality assertion tests shallow, coercive equality with
+// ==.
+// assert.equal(actual, expected, message_opt);
+
+assert.equal = function equal(actual, expected, message) {
+ if (actual != expected) fail(actual, expected, message, '==', assert.equal);
+};
+
+// 6. The non-equality assertion tests for whether two objects are not equal
+// with != assert.notEqual(actual, expected, message_opt);
+
+assert.notEqual = function notEqual(actual, expected, message) {
+ if (actual == expected) {
+ fail(actual, expected, message, '!=', assert.notEqual);
+ }
+};
+
+// 7. The equivalence assertion tests a deep equality relation.
+// assert.deepEqual(actual, expected, message_opt);
+
+assert.deepEqual = function deepEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'deepEqual', assert.deepEqual);
+ }
+};
+
+function _deepEqual(actual, expected) {
+ // 7.1. All identical values are equivalent, as determined by ===.
+ if (actual === expected) {
+ return true;
+
+ } else if (Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
+ if (actual.length != expected.length) return false;
+
+ for (var i = 0; i < actual.length; i++) {
+ if (actual[i] !== expected[i]) return false;
+ }
+
+ return true;
+
+ // 7.2. If the expected value is a Date object, the actual value is
+ // equivalent if it is also a Date object that refers to the same time.
+ } else if (actual instanceof Date && expected instanceof Date) {
+ return actual.getTime() === expected.getTime();
+
+ // 7.3. Other pairs that do not both pass typeof value == 'object',
+ // equivalence is determined by ==.
+ } else if (typeof actual != 'object' && typeof expected != 'object') {
+ return actual == expected;
+
+ // 7.4. For all other Object pairs, including Array objects, equivalence is
+ // determined by having the same number of owned properties (as verified
+ // with Object.prototype.hasOwnProperty.call), the same set of keys
+ // (although not necessarily the same order), equivalent values for every
+ // corresponding key, and an identical 'prototype' property. Note: this
+ // accounts for both named and indexed properties on Arrays.
+ } else {
+ return objEquiv(actual, expected);
+ }
+}
+
+function isUndefinedOrNull(value) {
+ return value === null || value === undefined;
+}
+
+function isArguments(object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+}
+
+function objEquiv(a, b) {
+ if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+ return false;
+ // an identical 'prototype' property.
+ if (a.prototype !== b.prototype) return false;
+ //~~~I've managed to break Object.keys through screwy arguments passing.
+ // Converting to array solves the problem.
+ if (isArguments(a)) {
+ if (!isArguments(b)) {
+ return false;
+ }
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b);
+ }
+ try {
+ var ka = objectKeys(a),
+ kb = objectKeys(b),
+ key, i;
+ } catch (e) {//happens when one is a string literal and the other isn't
+ return false;
+ }
+ // having the same number of owned properties (keys incorporates
+ // hasOwnProperty)
+ if (ka.length != kb.length)
+ return false;
+ //the same set of keys (although not necessarily the same order),
+ ka.sort();
+ kb.sort();
+ //~~~cheap key test
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] != kb[i])
+ return false;
+ }
+ //equivalent values for every corresponding key, and
+ //~~~possibly expensive deep test
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key])) return false;
+ }
+ return true;
+}
+
+// 8. The non-equivalence assertion tests for any deep inequality.
+// assert.notDeepEqual(actual, expected, message_opt);
+
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected)) {
+ fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
+ }
+};
+
+// 9. The strict equality assertion tests strict equality, as determined by ===.
+// assert.strictEqual(actual, expected, message_opt);
+
+assert.strictEqual = function strictEqual(actual, expected, message) {
+ if (actual !== expected) {
+ fail(actual, expected, message, '===', assert.strictEqual);
+ }
+};
+
+// 10. The strict non-equality assertion tests for strict inequality, as
+// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
+
+assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+ if (actual === expected) {
+ fail(actual, expected, message, '!==', assert.notStrictEqual);
+ }
+};
+
+function expectedException(actual, expected) {
+ if (!actual || !expected) {
+ return false;
+ }
+
+ if (expected instanceof RegExp) {
+ return expected.test(actual);
+ } else if (actual instanceof expected) {
+ return true;
+ } else if (expected.call({}, actual) === true) {
+ return true;
+ }
+
+ return false;
+}
+
+function _throws(shouldThrow, block, expected, message) {
+ var actual;
+
+ if (typeof expected === 'string') {
+ message = expected;
+ expected = null;
+ }
+
+ try {
+ block();
+ } catch (e) {
+ actual = e;
+ }
+
+ message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
+ (message ? ' ' + message : '.');
+
+ if (shouldThrow && !actual) {
+ fail('Missing expected exception' + message);
+ }
+
+ if (!shouldThrow && expectedException(actual, expected)) {
+ fail('Got unwanted exception' + message);
+ }
+
+ if ((shouldThrow && actual && expected &&
+ !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+ throw actual;
+ }
+}
+
+// 11. Expected to throw an error:
+// assert.throws(block, Error_opt, message_opt);
+
+assert.throws = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [true].concat(pSlice.call(arguments)));
+};
+
+// EXTENSION! This is annoying to write outside this module.
+assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [false].concat(pSlice.call(arguments)));
+};
+
+assert.ifError = function(err) { if (err) {throw err;}};
+
+})()
+},{"util":3,"buffer":4}],"buffer-browserify":[function(require,module,exports){
+module.exports=require('q9TxCC');
+},{}],"q9TxCC":[function(require,module,exports){
+(function(){function SlowBuffer (size) {
+ this.length = size;
+};
+
+var assert = require('assert');
+
+exports.INSPECT_MAX_BYTES = 50;
+
+
+function toHex(n) {
+ if (n < 16) return '0' + n.toString(16);
+ return n.toString(16);
+}
+
+function utf8ToBytes(str) {
+ var byteArray = [];
+ for (var i = 0; i < str.length; i++)
+ if (str.charCodeAt(i) <= 0x7F)
+ byteArray.push(str.charCodeAt(i));
+ else {
+ var h = encodeURIComponent(str.charAt(i)).substr(1).split('%');
+ for (var j = 0; j < h.length; j++)
+ byteArray.push(parseInt(h[j], 16));
+ }
+
+ return byteArray;
+}
+
+function asciiToBytes(str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; i++ )
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push( str.charCodeAt(i) & 0xFF );
+
+ return byteArray;
+}
+
+function base64ToBytes(str) {
+ return require("base64-js").toByteArray(str);
+}
+
+SlowBuffer.byteLength = function (str, encoding) {
+ switch (encoding || "utf8") {
+ case 'hex':
+ return str.length / 2;
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8ToBytes(str).length;
+
+ case 'ascii':
+ case 'binary':
+ return str.length;
+
+ case 'base64':
+ return base64ToBytes(str).length;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+function blitBuffer(src, dst, offset, length) {
+ var pos, i = 0;
+ while (i < length) {
+ if ((i+offset >= dst.length) || (i >= src.length))
+ break;
+
+ dst[i + offset] = src[i];
+ i++;
+ }
+ return i;
+}
+
+SlowBuffer.prototype.utf8Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.asciiWrite = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.binaryWrite = SlowBuffer.prototype.asciiWrite;
+
+SlowBuffer.prototype.base64Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Slice = function (start, end) {
+ var bytes = Array.prototype.slice.apply(this, arguments)
+ return require("base64-js").fromByteArray(bytes);
+}
+
+function decodeUtf8Char(str) {
+ try {
+ return decodeURIComponent(str);
+ } catch (err) {
+ return String.fromCharCode(0xFFFD); // UTF 8 invalid char
+ }
+}
+
+SlowBuffer.prototype.utf8Slice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var res = "";
+ var tmp = "";
+ var i = 0;
+ while (i < bytes.length) {
+ if (bytes[i] <= 0x7F) {
+ res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]);
+ tmp = "";
+ } else
+ tmp += "%" + bytes[i].toString(16);
+
+ i++;
+ }
+
+ return res + decodeUtf8Char(tmp);
+}
+
+SlowBuffer.prototype.asciiSlice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var ret = "";
+ for (var i = 0; i < bytes.length; i++)
+ ret += String.fromCharCode(bytes[i]);
+ return ret;
+}
+
+SlowBuffer.prototype.binarySlice = SlowBuffer.prototype.asciiSlice;
+
+SlowBuffer.prototype.inspect = function() {
+ var out = [],
+ len = this.length;
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this[i]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+ return '<SlowBuffer ' + out.join(' ') + '>';
+};
+
+
+SlowBuffer.prototype.hexSlice = function(start, end) {
+ var len = this.length;
+
+ if (!start || start < 0) start = 0;
+ if (!end || end < 0 || end > len) end = len;
+
+ var out = '';
+ for (var i = start; i < end; i++) {
+ out += toHex(this[i]);
+ }
+ return out;
+};
+
+
+SlowBuffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+ start = +start || 0;
+ if (typeof end == 'undefined') end = this.length;
+
+ // Fastpath empty strings
+ if (+end == start) {
+ return '';
+ }
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.asciiSlice(start, end);
+
+ case 'binary':
+ return this.binarySlice(start, end);
+
+ case 'base64':
+ return this.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+SlowBuffer.prototype.hexWrite = function(string, offset, length) {
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length;
+ if (strLen % 2) {
+ throw new Error('Invalid hex string');
+ }
+ if (length > strLen / 2) {
+ length = strLen / 2;
+ }
+ for (var i = 0; i < length; i++) {
+ var byte = parseInt(string.substr(i * 2, 2), 16);
+ if (isNaN(byte)) throw new Error('Invalid hex string');
+ this[offset + i] = byte;
+ }
+ SlowBuffer._charsWritten = i * 2;
+ return i;
+};
+
+
+SlowBuffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexWrite(string, offset, length);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Write(string, offset, length);
+
+ case 'ascii':
+ return this.asciiWrite(string, offset, length);
+
+ case 'binary':
+ return this.binaryWrite(string, offset, length);
+
+ case 'base64':
+ return this.base64Write(string, offset, length);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Write(string, offset, length);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// slice(start, end)
+SlowBuffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ return new Buffer(this, end - start, +start);
+};
+
+SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) {
+ var temp = [];
+ for (var i=sourcestart; i<sourceend; i++) {
+ assert.ok(typeof this[i] !== 'undefined', "copying undefined buffer bytes!");
+ temp.push(this[i]);
+ }
+
+ for (var i=targetstart; i<targetstart+temp.length; i++) {
+ target[i] = temp[i-targetstart];
+ }
+};
+
+SlowBuffer.prototype.fill = function(value, start, end) {
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ for (var i = start; i < end; i++) {
+ this[i] = value;
+ }
+}
+
+function coerce(length) {
+ // Coerce length to a number (possibly NaN), round up
+ // in case it's fractional (e.g. 123.456) then do a
+ // double negate to coerce a NaN to 0. Easy, right?
+ length = ~~Math.ceil(+length);
+ return length < 0 ? 0 : length;
+}
+
+
+// Buffer
+
+function Buffer(subject, encoding, offset) {
+ if (!(this instanceof Buffer)) {
+ return new Buffer(subject, encoding, offset);
+ }
+
+ var type;
+
+ // Are we slicing?
+ if (typeof offset === 'number') {
+ this.length = coerce(encoding);
+ this.parent = subject;
+ this.offset = offset;
+ } else {
+ // Find the length
+ switch (type = typeof subject) {
+ case 'number':
+ this.length = coerce(subject);
+ break;
+
+ case 'string':
+ this.length = Buffer.byteLength(subject, encoding);
+ break;
+
+ case 'object': // Assume object is an array
+ this.length = coerce(subject.length);
+ break;
+
+ default:
+ throw new Error('First argument needs to be a number, ' +
+ 'array or string.');
+ }
+
+ if (this.length > Buffer.poolSize) {
+ // Big buffer, just alloc one.
+ this.parent = new SlowBuffer(this.length);
+ this.offset = 0;
+
+ } else {
+ // Small buffer.
+ if (!pool || pool.length - pool.used < this.length) allocPool();
+ this.parent = pool;
+ this.offset = pool.used;
+ pool.used += this.length;
+ }
+
+ // Treat array-ish objects as a byte array.
+ if (isArrayIsh(subject)) {
+ for (var i = 0; i < this.length; i++) {
+ if (subject instanceof Buffer) {
+ this.parent[i + this.offset] = subject.readUInt8(i);
+ }
+ else {
+ this.parent[i + this.offset] = subject[i];
+ }
+ }
+ } else if (type == 'string') {
+ // We are a string
+ this.length = this.write(subject, 0, encoding);
+ }
+ }
+
+}
+
+function isArrayIsh(subject) {
+ return Array.isArray(subject) || Buffer.isBuffer(subject) ||
+ subject && typeof subject === 'object' &&
+ typeof subject.length === 'number';
+}
+
+exports.SlowBuffer = SlowBuffer;
+exports.Buffer = Buffer;
+
+Buffer.poolSize = 8 * 1024;
+var pool;
+
+function allocPool() {
+ pool = new SlowBuffer(Buffer.poolSize);
+ pool.used = 0;
+}
+
+
+// Static methods
+Buffer.isBuffer = function isBuffer(b) {
+ return b instanceof Buffer || b instanceof SlowBuffer;
+};
+
+Buffer.concat = function (list, totalLength) {
+ if (!Array.isArray(list)) {
+ throw new Error("Usage: Buffer.concat(list, [totalLength])\n \
+ list should be an Array.");
+ }
+
+ if (list.length === 0) {
+ return new Buffer(0);
+ } else if (list.length === 1) {
+ return list[0];
+ }
+
+ if (typeof totalLength !== 'number') {
+ totalLength = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ totalLength += buf.length;
+ }
+ }
+
+ var buffer = new Buffer(totalLength);
+ var pos = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ buf.copy(buffer, pos);
+ pos += buf.length;
+ }
+ return buffer;
+};
+
+// Inspect
+Buffer.prototype.inspect = function inspect() {
+ var out = [],
+ len = this.length;
+
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this.parent[i + this.offset]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+
+ return '<Buffer ' + out.join(' ') + '>';
+};
+
+
+Buffer.prototype.get = function get(i) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i];
+};
+
+
+Buffer.prototype.set = function set(i, v) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i] = v;
+};
+
+
+// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8')
+Buffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ var ret;
+ switch (encoding) {
+ case 'hex':
+ ret = this.parent.hexWrite(string, this.offset + offset, length);
+ break;
+
+ case 'utf8':
+ case 'utf-8':
+ ret = this.parent.utf8Write(string, this.offset + offset, length);
+ break;
+
+ case 'ascii':
+ ret = this.parent.asciiWrite(string, this.offset + offset, length);
+ break;
+
+ case 'binary':
+ ret = this.parent.binaryWrite(string, this.offset + offset, length);
+ break;
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ ret = this.parent.base64Write(string, this.offset + offset, length);
+ break;
+
+ case 'ucs2':
+ case 'ucs-2':
+ ret = this.parent.ucs2Write(string, this.offset + offset, length);
+ break;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+
+ Buffer._charsWritten = SlowBuffer._charsWritten;
+
+ return ret;
+};
+
+
+// toString(encoding, start=0, end=buffer.length)
+Buffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ if (typeof start == 'undefined' || start < 0) {
+ start = 0;
+ } else if (start > this.length) {
+ start = this.length;
+ }
+
+ if (typeof end == 'undefined' || end > this.length) {
+ end = this.length;
+ } else if (end < 0) {
+ end = 0;
+ }
+
+ start = start + this.offset;
+ end = end + this.offset;
+
+ switch (encoding) {
+ case 'hex':
+ return this.parent.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.parent.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.parent.asciiSlice(start, end);
+
+ case 'binary':
+ return this.parent.binarySlice(start, end);
+
+ case 'base64':
+ return this.parent.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.parent.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// byteLength
+Buffer.byteLength = SlowBuffer.byteLength;
+
+
+// fill(value, start=0, end=buffer.length)
+Buffer.prototype.fill = function fill(value, start, end) {
+ value || (value = 0);
+ start || (start = 0);
+ end || (end = this.length);
+
+ if (typeof value === 'string') {
+ value = value.charCodeAt(0);
+ }
+ if (!(typeof value === 'number') || isNaN(value)) {
+ throw new Error('value is not a number');
+ }
+
+ if (end < start) throw new Error('end < start');
+
+ // Fill 0 bytes; we're done
+ if (end === start) return 0;
+ if (this.length == 0) return 0;
+
+ if (start < 0 || start >= this.length) {
+ throw new Error('start out of bounds');
+ }
+
+ if (end < 0 || end > this.length) {
+ throw new Error('end out of bounds');
+ }
+
+ return this.parent.fill(value,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function(target, target_start, start, end) {
+ var source = this;
+ start || (start = 0);
+ end || (end = this.length);
+ target_start || (target_start = 0);
+
+ if (end < start) throw new Error('sourceEnd < sourceStart');
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0;
+ if (target.length == 0 || source.length == 0) return 0;
+
+ if (target_start < 0 || target_start >= target.length) {
+ throw new Error('targetStart out of bounds');
+ }
+
+ if (start < 0 || start >= source.length) {
+ throw new Error('sourceStart out of bounds');
+ }
+
+ if (end < 0 || end > source.length) {
+ throw new Error('sourceEnd out of bounds');
+ }
+
+ // Are we oob?
+ if (end > this.length) {
+ end = this.length;
+ }
+
+ if (target.length - target_start < end - start) {
+ end = target.length - target_start + start;
+ }
+
+ return this.parent.copy(target.parent,
+ target_start + target.offset,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// slice(start, end)
+Buffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+ if (end > this.length) throw new Error('oob');
+ if (start > end) throw new Error('oob');
+
+ return new Buffer(this.parent, end - start, +start + this.offset);
+};
+
+
+// Legacy methods for backwards compatibility.
+
+Buffer.prototype.utf8Slice = function(start, end) {
+ return this.toString('utf8', start, end);
+};
+
+Buffer.prototype.binarySlice = function(start, end) {
+ return this.toString('binary', start, end);
+};
+
+Buffer.prototype.asciiSlice = function(start, end) {
+ return this.toString('ascii', start, end);
+};
+
+Buffer.prototype.utf8Write = function(string, offset) {
+ return this.write(string, offset, 'utf8');
+};
+
+Buffer.prototype.binaryWrite = function(string, offset) {
+ return this.write(string, offset, 'binary');
+};
+
+Buffer.prototype.asciiWrite = function(string, offset) {
+ return this.write(string, offset, 'ascii');
+};
+
+Buffer.prototype.readUInt8 = function(offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return;
+
+ return buffer.parent[buffer.offset + offset];
+};
+
+function readUInt16(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return 0;
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset] << 8;
+ if (offset + 1 < buffer.length) {
+ val |= buffer.parent[buffer.offset + offset + 1];
+ }
+ } else {
+ val = buffer.parent[buffer.offset + offset];
+ if (offset + 1 < buffer.length) {
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ }
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt16LE = function(offset, noAssert) {
+ return readUInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt16BE = function(offset, noAssert) {
+ return readUInt16(this, offset, true, noAssert);
+};
+
+function readUInt32(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return 0;
+
+ if (isBigEndian) {
+ if (offset + 1 < buffer.length)
+ val = buffer.parent[buffer.offset + offset + 1] << 16;
+ if (offset + 2 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 2] << 8;
+ if (offset + 3 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 3];
+ val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0);
+ } else {
+ if (offset + 2 < buffer.length)
+ val = buffer.parent[buffer.offset + offset + 2] << 16;
+ if (offset + 1 < buffer.length)
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ val |= buffer.parent[buffer.offset + offset];
+ if (offset + 3 < buffer.length)
+ val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0);
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt32LE = function(offset, noAssert) {
+ return readUInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt32BE = function(offset, noAssert) {
+ return readUInt32(this, offset, true, noAssert);
+};
+
+
+/*
+ * Signed integer types, yay team! A reminder on how two's complement actually
+ * works. The first bit is the signed bit, i.e. tells us whether or not the
+ * number should be positive or negative. If the two's complement value is
+ * positive, then we're done, as it's equivalent to the unsigned representation.
+ *
+ * Now if the number is positive, you're pretty much done, you can just leverage
+ * the unsigned translations and return those. Unfortunately, negative numbers
+ * aren't quite that straightforward.
+ *
+ * At first glance, one might be inclined to use the traditional formula to
+ * translate binary numbers between the positive and negative values in two's
+ * complement. (Though it doesn't quite work for the most negative value)
+ * Mainly:
+ * - invert all the bits
+ * - add one to the result
+ *
+ * Of course, this doesn't quite work in Javascript. Take for example the value
+ * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of
+ * course, Javascript will do the following:
+ *
+ * > ~0xff80
+ * -65409
+ *
+ * Whoh there, Javascript, that's not quite right. But wait, according to
+ * Javascript that's perfectly correct. When Javascript ends up seeing the
+ * constant 0xff80, it has no notion that it is actually a signed number. It
+ * assumes that we've input the unsigned value 0xff80. Thus, when it does the
+ * binary negation, it casts it into a signed value, (positive 0xff80). Then
+ * when you perform binary negation on that, it turns it into a negative number.
+ *
+ * Instead, we're going to have to use the following general formula, that works
+ * in a rather Javascript friendly way. I'm glad we don't support this kind of
+ * weird numbering scheme in the kernel.
+ *
+ * (BIT-MAX - (unsigned)val + 1) * -1
+ *
+ * The astute observer, may think that this doesn't make sense for 8-bit numbers
+ * (really it isn't necessary for them). However, when you get 16-bit numbers,
+ * you do. Let's go back to our prior example and see how this will look:
+ *
+ * (0xffff - 0xff80 + 1) * -1
+ * (0x007f + 1) * -1
+ * (0x0080) * -1
+ */
+Buffer.prototype.readInt8 = function(offset, noAssert) {
+ var buffer = this;
+ var neg;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (offset >= buffer.length) return;
+
+ neg = buffer.parent[buffer.offset + offset] & 0x80;
+ if (!neg) {
+ return (buffer.parent[buffer.offset + offset]);
+ }
+
+ return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1);
+};
+
+function readInt16(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt16(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x8000;
+ if (!neg) {
+ return val;
+ }
+
+ return (0xffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt16LE = function(offset, noAssert) {
+ return readInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt16BE = function(offset, noAssert) {
+ return readInt16(this, offset, true, noAssert);
+};
+
+function readInt32(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt32(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x80000000;
+ if (!neg) {
+ return (val);
+ }
+
+ return (0xffffffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt32LE = function(offset, noAssert) {
+ return readInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt32BE = function(offset, noAssert) {
+ return readInt32(this, offset, true, noAssert);
+};
+
+function readFloat(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.readFloatLE = function(offset, noAssert) {
+ return readFloat(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readFloatBE = function(offset, noAssert) {
+ return readFloat(this, offset, true, noAssert);
+};
+
+function readDouble(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.readDoubleLE = function(offset, noAssert) {
+ return readDouble(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readDoubleBE = function(offset, noAssert) {
+ return readDouble(this, offset, true, noAssert);
+};
+
+
+/*
+ * We have to make sure that the value is a valid integer. This means that it is
+ * non-negative. It has no fractional component and that it does not exceed the
+ * maximum allowed value.
+ *
+ * value The number to check for validity
+ *
+ * max The maximum value
+ */
+function verifuint(value, max) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value >= 0,
+ 'specified a negative value for writing an unsigned value');
+
+ assert.ok(value <= max, 'value is larger than maximum value for type');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+Buffer.prototype.writeUInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xff);
+ }
+
+ if (offset < buffer.length) {
+ buffer.parent[buffer.offset + offset] = value;
+ }
+};
+
+function writeUInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffff);
+ }
+
+ for (var i = 0; i < Math.min(buffer.length - offset, 2); i++) {
+ buffer.parent[buffer.offset + offset + i] =
+ (value & (0xff << (8 * (isBigEndian ? 1 - i : i)))) >>>
+ (isBigEndian ? 1 - i : i) * 8;
+ }
+
+}
+
+Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, true, noAssert);
+};
+
+function writeUInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffffffff);
+ }
+
+ for (var i = 0; i < Math.min(buffer.length - offset, 4); i++) {
+ buffer.parent[buffer.offset + offset + i] =
+ (value >>> (isBigEndian ? 3 - i : i) * 8) & 0xff;
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, true, noAssert);
+};
+
+
+/*
+ * We now move onto our friends in the signed number category. Unlike unsigned
+ * numbers, we're going to have to worry a bit more about how we put values into
+ * arrays. Since we are only worrying about signed 32-bit values, we're in
+ * slightly better shape. Unfortunately, we really can't do our favorite binary
+ * & in this system. It really seems to do the wrong thing. For example:
+ *
+ * > -32 & 0xff
+ * 224
+ *
+ * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of
+ * this aren't treated as a signed number. Ultimately a bad thing.
+ *
+ * What we're going to want to do is basically create the unsigned equivalent of
+ * our representation and pass that off to the wuint* functions. To do that
+ * we're going to do the following:
+ *
+ * - if the value is positive
+ * we can pass it directly off to the equivalent wuint
+ * - if the value is negative
+ * we do the following computation:
+ * mb + val + 1, where
+ * mb is the maximum unsigned value in that byte size
+ * val is the Javascript negative integer
+ *
+ *
+ * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If
+ * you do out the computations:
+ *
+ * 0xffff - 128 + 1
+ * 0xffff - 127
+ * 0xff80
+ *
+ * You can then encode this value as the signed version. This is really rather
+ * hacky, but it should work and get the job done which is our goal here.
+ */
+
+/*
+ * A series of checks to make sure we actually have a signed 32-bit number
+ */
+function verifsint(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+function verifIEEE754(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+}
+
+Buffer.prototype.writeInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7f, -0x80);
+ }
+
+ if (value >= 0) {
+ buffer.writeUInt8(value, offset, noAssert);
+ } else {
+ buffer.writeUInt8(0xff + value + 1, offset, noAssert);
+ }
+};
+
+function writeInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fff, -0x8000);
+ }
+
+ if (value >= 0) {
+ writeUInt16(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt16LE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt16BE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, true, noAssert);
+};
+
+function writeInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fffffff, -0x80000000);
+ }
+
+ if (value >= 0) {
+ writeUInt32(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt32LE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt32BE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, true, noAssert);
+};
+
+function writeFloat(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.writeFloatLE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeFloatBE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, true, noAssert);
+};
+
+function writeDouble(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, true, noAssert);
+};
+
+SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8;
+SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE;
+SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE;
+SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE;
+SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE;
+SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8;
+SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE;
+SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE;
+SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE;
+SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE;
+SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE;
+SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE;
+SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE;
+SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE;
+SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8;
+SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE;
+SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE;
+SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE;
+SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE;
+SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8;
+SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE;
+SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE;
+SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE;
+SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE;
+SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE;
+SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE;
+SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE;
+SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE;
+
+})()
+},{"assert":2,"./buffer_ieee754":1,"base64-js":5}],3:[function(require,module,exports){
+var events = require('events');
+
+exports.isArray = isArray;
+exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'};
+exports.isRegExp = function(obj){return Object.prototype.toString.call(obj) === '[object RegExp]'};
+
+
+exports.print = function () {};
+exports.puts = function () {};
+exports.debug = function() {};
+
+exports.inspect = function(obj, showHidden, depth, colors) {
+ var seen = [];
+
+ var stylize = function(str, styleType) {
+ // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+ var styles =
+ { 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39] };
+
+ var style =
+ { 'special': 'cyan',
+ 'number': 'blue',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red' }[styleType];
+
+ if (style) {
+ return '\033[' + styles[style][0] + 'm' + str +
+ '\033[' + styles[style][1] + 'm';
+ } else {
+ return str;
+ }
+ };
+ if (! colors) {
+ stylize = function(str, styleType) { return str; };
+ }
+
+ function format(value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value !== exports &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ return value.inspect(recurseTimes);
+ }
+
+ // Primitive types cannot have properties
+ switch (typeof value) {
+ case 'undefined':
+ return stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return stylize(simple, 'string');
+
+ case 'number':
+ return stylize('' + value, 'number');
+
+ case 'boolean':
+ return stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return stylize('null', 'null');
+ }
+
+ // Look up the keys of the object.
+ var visible_keys = Object_keys(value);
+ var keys = showHidden ? Object_getOwnPropertyNames(value) : visible_keys;
+
+ // Functions without properties can be shortcutted.
+ if (typeof value === 'function' && keys.length === 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ var name = value.name ? ': ' + value.name : '';
+ return stylize('[Function' + name + ']', 'special');
+ }
+ }
+
+ // Dates without properties can be shortcutted
+ if (isDate(value) && keys.length === 0) {
+ return stylize(value.toUTCString(), 'date');
+ }
+
+ var base, type, braces;
+ // Determine the object type
+ if (isArray(value)) {
+ type = 'Array';
+ braces = ['[', ']'];
+ } else {
+ type = 'Object';
+ braces = ['{', '}'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var n = value.name ? ': ' + value.name : '';
+ base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
+ } else {
+ base = '';
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + value.toUTCString();
+ }
+
+ if (keys.length === 0) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return stylize('' + value, 'regexp');
+ } else {
+ return stylize('[Object]', 'special');
+ }
+ }
+
+ seen.push(value);
+
+ var output = keys.map(function(key) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Getter/Setter]', 'special');
+ } else {
+ str = stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visible_keys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = format(value[key]);
+ } else {
+ str = format(value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (isArray(value)) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (type === 'Array' && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+ });
+
+ seen.pop();
+
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 50) {
+ output = braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+
+ } else {
+ output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+ }
+
+ return output;
+ }
+ return format(obj, (typeof depth === 'undefined' ? 2 : depth));
+};
+
+
+function isArray(ar) {
+ return ar instanceof Array ||
+ Array.isArray(ar) ||
+ (ar && ar !== Object.prototype && isArray(ar.__proto__));
+}
+
+
+function isRegExp(re) {
+ return re instanceof RegExp ||
+ (typeof re === 'object' && Object.prototype.toString.call(re) === '[object RegExp]');
+}
+
+
+function isDate(d) {
+ if (d instanceof Date) return true;
+ if (typeof d !== 'object') return false;
+ var properties = Date.prototype && Object_getOwnPropertyNames(Date.prototype);
+ var proto = d.__proto__ && Object_getOwnPropertyNames(d.__proto__);
+ return JSON.stringify(proto) === JSON.stringify(properties);
+}
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+exports.log = function (msg) {};
+
+exports.pump = null;
+
+var Object_keys = Object.keys || function (obj) {
+ var res = [];
+ for (var key in obj) res.push(key);
+ return res;
+};
+
+var Object_getOwnPropertyNames = Object.getOwnPropertyNames || function (obj) {
+ var res = [];
+ for (var key in obj) {
+ if (Object.hasOwnProperty.call(obj, key)) res.push(key);
+ }
+ return res;
+};
+
+var Object_create = Object.create || function (prototype, properties) {
+ // from es5-shim
+ var object;
+ if (prototype === null) {
+ object = { '__proto__' : null };
+ }
+ else {
+ if (typeof prototype !== 'object') {
+ throw new TypeError(
+ 'typeof prototype[' + (typeof prototype) + '] != \'object\''
+ );
+ }
+ var Type = function () {};
+ Type.prototype = prototype;
+ object = new Type();
+ object.__proto__ = prototype;
+ }
+ if (typeof properties !== 'undefined' && Object.defineProperties) {
+ Object.defineProperties(object, properties);
+ }
+ return object;
+};
+
+exports.inherits = function(ctor, superCtor) {
+ ctor.super_ = superCtor;
+ ctor.prototype = Object_create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+};
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (typeof f !== 'string') {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(exports.inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j': return JSON.stringify(args[i++]);
+ default:
+ return x;
+ }
+ });
+ for(var x = args[i]; i < len; x = args[++i]){
+ if (x === null || typeof x !== 'object') {
+ str += ' ' + x;
+ } else {
+ str += ' ' + exports.inspect(x);
+ }
+ }
+ return str;
+};
+
+},{"events":6}],5:[function(require,module,exports){
+(function (exports) {
+ 'use strict';
+
+ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+ function b64ToByteArray(b64) {
+ var i, j, l, tmp, placeHolders, arr;
+
+ if (b64.length % 4 > 0) {
+ throw 'Invalid string. Length must be a multiple of 4';
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ placeHolders = b64.indexOf('=');
+ placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0;
+
+ // base64 is 4/3 + up to two characters of the original data
+ arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders);
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? b64.length - 4 : b64.length;
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]);
+ arr.push((tmp & 0xFF0000) >> 16);
+ arr.push((tmp & 0xFF00) >> 8);
+ arr.push(tmp & 0xFF);
+ }
+
+ if (placeHolders === 2) {
+ tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4);
+ arr.push(tmp & 0xFF);
+ } else if (placeHolders === 1) {
+ tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2);
+ arr.push((tmp >> 8) & 0xFF);
+ arr.push(tmp & 0xFF);
+ }
+
+ return arr;
+ }
+
+ function uint8ToBase64(uint8) {
+ var i,
+ extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+ output = "",
+ temp, length;
+
+ function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
+ };
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+ temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
+ output += tripletToBase64(temp);
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ switch (extraBytes) {
+ case 1:
+ temp = uint8[uint8.length - 1];
+ output += lookup[temp >> 2];
+ output += lookup[(temp << 4) & 0x3F];
+ output += '==';
+ break;
+ case 2:
+ temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);
+ output += lookup[temp >> 10];
+ output += lookup[(temp >> 4) & 0x3F];
+ output += lookup[(temp << 2) & 0x3F];
+ output += '=';
+ break;
+ }
+
+ return output;
+ }
+
+ module.exports.toByteArray = b64ToByteArray;
+ module.exports.fromByteArray = uint8ToBase64;
+}());
+
+},{}],7:[function(require,module,exports){
+exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) {
+ var e, m,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ nBits = -7,
+ i = isBE ? 0 : (nBytes - 1),
+ d = isBE ? 1 : -1,
+ s = buffer[offset + i];
+
+ i += d;
+
+ e = s & ((1 << (-nBits)) - 1);
+ s >>= (-nBits);
+ nBits += eLen;
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ m = e & ((1 << (-nBits)) - 1);
+ e >>= (-nBits);
+ nBits += mLen;
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);
+
+ if (e === 0) {
+ e = 1 - eBias;
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity);
+ } else {
+ m = m + Math.pow(2, mLen);
+ e = e - eBias;
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
+};
+
+exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) {
+ var e, m, c,
+ eLen = nBytes * 8 - mLen - 1,
+ eMax = (1 << eLen) - 1,
+ eBias = eMax >> 1,
+ rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),
+ i = isBE ? (nBytes - 1) : 0,
+ d = isBE ? -1 : 1,
+ s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+
+ value = Math.abs(value);
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0;
+ e = eMax;
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2);
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--;
+ c *= 2;
+ }
+ if (e + eBias >= 1) {
+ value += rt / c;
+ } else {
+ value += rt * Math.pow(2, 1 - eBias);
+ }
+ if (value * c >= 2) {
+ e++;
+ c /= 2;
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0;
+ e = eMax;
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen);
+ e = e + eBias;
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+ e = 0;
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);
+
+ e = (e << mLen) | m;
+ eLen += mLen;
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);
+
+ buffer[offset + i - d] |= s * 128;
+};
+
+},{}],8:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+
+process.nextTick = (function () {
+ var canSetImmediate = typeof window !== 'undefined'
+ && window.setImmediate;
+ var canPost = typeof window !== 'undefined'
+ && window.postMessage && window.addEventListener
+ ;
+
+ if (canSetImmediate) {
+ return function (f) { return window.setImmediate(f) };
+ }
+
+ if (canPost) {
+ var queue = [];
+ window.addEventListener('message', function (ev) {
+ if (ev.source === window && ev.data === 'process-tick') {
+ ev.stopPropagation();
+ if (queue.length > 0) {
+ var fn = queue.shift();
+ fn();
+ }
+ }
+ }, true);
+
+ return function nextTick(fn) {
+ queue.push(fn);
+ window.postMessage('process-tick', '*');
+ };
+ }
+
+ return function nextTick(fn) {
+ setTimeout(fn, 0);
+ };
+})();
+
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+}
+
+// TODO(shtylman)
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+
+},{}],6:[function(require,module,exports){
+(function(process){if (!process.EventEmitter) process.EventEmitter = function () {};
+
+var EventEmitter = exports.EventEmitter = process.EventEmitter;
+var isArray = typeof Array.isArray === 'function'
+ ? Array.isArray
+ : function (xs) {
+ return Object.prototype.toString.call(xs) === '[object Array]'
+ }
+;
+function indexOf (xs, x) {
+ if (xs.indexOf) return xs.indexOf(x);
+ for (var i = 0; i < xs.length; i++) {
+ if (x === xs[i]) return i;
+ }
+ return -1;
+}
+
+// By default EventEmitters will print a warning if more than
+// 10 listeners are added to it. This is a useful default which
+// helps finding memory leaks.
+//
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+var defaultMaxListeners = 10;
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!this._events) this._events = {};
+ this._events.maxListeners = n;
+};
+
+
+EventEmitter.prototype.emit = function(type) {
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events || !this._events.error ||
+ (isArray(this._events.error) && !this._events.error.length))
+ {
+ if (arguments[1] instanceof Error) {
+ throw arguments[1]; // Unhandled 'error' event
+ } else {
+ throw new Error("Uncaught, unspecified 'error' event.");
+ }
+ return false;
+ }
+ }
+
+ if (!this._events) return false;
+ var handler = this._events[type];
+ if (!handler) return false;
+
+ if (typeof handler == 'function') {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ var args = Array.prototype.slice.call(arguments, 1);
+ handler.apply(this, args);
+ }
+ return true;
+
+ } else if (isArray(handler)) {
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ var listeners = handler.slice();
+ for (var i = 0, l = listeners.length; i < l; i++) {
+ listeners[i].apply(this, args);
+ }
+ return true;
+
+ } else {
+ return false;
+ }
+};
+
+// EventEmitter is defined in src/node_events.cc
+// EventEmitter.prototype.emit() is also defined there.
+EventEmitter.prototype.addListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('addListener only takes instances of Function');
+ }
+
+ if (!this._events) this._events = {};
+
+ // To avoid recursion in the case that type == "newListeners"! Before
+ // adding it to the listeners, first emit "newListeners".
+ this.emit('newListener', type, listener);
+
+ if (!this._events[type]) {
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ } else if (isArray(this._events[type])) {
+
+ // Check for listener leak
+ if (!this._events[type].warned) {
+ var m;
+ if (this._events.maxListeners !== undefined) {
+ m = this._events.maxListeners;
+ } else {
+ m = defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ console.trace();
+ }
+ }
+
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ } else {
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ var self = this;
+ self.on(type, function g() {
+ self.removeListener(type, g);
+ listener.apply(this, arguments);
+ });
+
+ return this;
+};
+
+EventEmitter.prototype.removeListener = function(type, listener) {
+ if ('function' !== typeof listener) {
+ throw new Error('removeListener only takes instances of Function');
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (!this._events || !this._events[type]) return this;
+
+ var list = this._events[type];
+
+ if (isArray(list)) {
+ var i = indexOf(list, listener);
+ if (i < 0) return this;
+ list.splice(i, 1);
+ if (list.length == 0)
+ delete this._events[type];
+ } else if (this._events[type] === listener) {
+ delete this._events[type];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ if (arguments.length === 0) {
+ this._events = {};
+ return this;
+ }
+
+ // does not use listeners(), so no side effect of creating _events[type]
+ if (type && this._events && this._events[type]) this._events[type] = null;
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ if (!this._events) this._events = {};
+ if (!this._events[type]) this._events[type] = [];
+ if (!isArray(this._events[type])) {
+ this._events[type] = [this._events[type]];
+ }
+ return this._events[type];
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":8}],4:[function(require,module,exports){
+(function(){function SlowBuffer (size) {
+ this.length = size;
+};
+
+var assert = require('assert');
+
+exports.INSPECT_MAX_BYTES = 50;
+
+
+function toHex(n) {
+ if (n < 16) return '0' + n.toString(16);
+ return n.toString(16);
+}
+
+function utf8ToBytes(str) {
+ var byteArray = [];
+ for (var i = 0; i < str.length; i++)
+ if (str.charCodeAt(i) <= 0x7F)
+ byteArray.push(str.charCodeAt(i));
+ else {
+ var h = encodeURIComponent(str.charAt(i)).substr(1).split('%');
+ for (var j = 0; j < h.length; j++)
+ byteArray.push(parseInt(h[j], 16));
+ }
+
+ return byteArray;
+}
+
+function asciiToBytes(str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; i++ )
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push( str.charCodeAt(i) & 0xFF );
+
+ return byteArray;
+}
+
+function base64ToBytes(str) {
+ return require("base64-js").toByteArray(str);
+}
+
+SlowBuffer.byteLength = function (str, encoding) {
+ switch (encoding || "utf8") {
+ case 'hex':
+ return str.length / 2;
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8ToBytes(str).length;
+
+ case 'ascii':
+ return str.length;
+
+ case 'base64':
+ return base64ToBytes(str).length;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+function blitBuffer(src, dst, offset, length) {
+ var pos, i = 0;
+ while (i < length) {
+ if ((i+offset >= dst.length) || (i >= src.length))
+ break;
+
+ dst[i + offset] = src[i];
+ i++;
+ }
+ return i;
+}
+
+SlowBuffer.prototype.utf8Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(utf8ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.asciiWrite = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(asciiToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Write = function (string, offset, length) {
+ var bytes, pos;
+ return SlowBuffer._charsWritten = blitBuffer(base64ToBytes(string), this, offset, length);
+};
+
+SlowBuffer.prototype.base64Slice = function (start, end) {
+ var bytes = Array.prototype.slice.apply(this, arguments)
+ return require("base64-js").fromByteArray(bytes);
+}
+
+function decodeUtf8Char(str) {
+ try {
+ return decodeURIComponent(str);
+ } catch (err) {
+ return String.fromCharCode(0xFFFD); // UTF 8 invalid char
+ }
+}
+
+SlowBuffer.prototype.utf8Slice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var res = "";
+ var tmp = "";
+ var i = 0;
+ while (i < bytes.length) {
+ if (bytes[i] <= 0x7F) {
+ res += decodeUtf8Char(tmp) + String.fromCharCode(bytes[i]);
+ tmp = "";
+ } else
+ tmp += "%" + bytes[i].toString(16);
+
+ i++;
+ }
+
+ return res + decodeUtf8Char(tmp);
+}
+
+SlowBuffer.prototype.asciiSlice = function () {
+ var bytes = Array.prototype.slice.apply(this, arguments);
+ var ret = "";
+ for (var i = 0; i < bytes.length; i++)
+ ret += String.fromCharCode(bytes[i]);
+ return ret;
+}
+
+SlowBuffer.prototype.inspect = function() {
+ var out = [],
+ len = this.length;
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this[i]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+ return '<SlowBuffer ' + out.join(' ') + '>';
+};
+
+
+SlowBuffer.prototype.hexSlice = function(start, end) {
+ var len = this.length;
+
+ if (!start || start < 0) start = 0;
+ if (!end || end < 0 || end > len) end = len;
+
+ var out = '';
+ for (var i = start; i < end; i++) {
+ out += toHex(this[i]);
+ }
+ return out;
+};
+
+
+SlowBuffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+ start = +start || 0;
+ if (typeof end == 'undefined') end = this.length;
+
+ // Fastpath empty strings
+ if (+end == start) {
+ return '';
+ }
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.asciiSlice(start, end);
+
+ case 'binary':
+ return this.binarySlice(start, end);
+
+ case 'base64':
+ return this.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+SlowBuffer.prototype.hexWrite = function(string, offset, length) {
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length;
+ if (strLen % 2) {
+ throw new Error('Invalid hex string');
+ }
+ if (length > strLen / 2) {
+ length = strLen / 2;
+ }
+ for (var i = 0; i < length; i++) {
+ var byte = parseInt(string.substr(i * 2, 2), 16);
+ if (isNaN(byte)) throw new Error('Invalid hex string');
+ this[offset + i] = byte;
+ }
+ SlowBuffer._charsWritten = i * 2;
+ return i;
+};
+
+
+SlowBuffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ switch (encoding) {
+ case 'hex':
+ return this.hexWrite(string, offset, length);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.utf8Write(string, offset, length);
+
+ case 'ascii':
+ return this.asciiWrite(string, offset, length);
+
+ case 'binary':
+ return this.binaryWrite(string, offset, length);
+
+ case 'base64':
+ return this.base64Write(string, offset, length);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.ucs2Write(string, offset, length);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// slice(start, end)
+SlowBuffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+
+ if (end > this.length) {
+ throw new Error('oob');
+ }
+ if (start > end) {
+ throw new Error('oob');
+ }
+
+ return new Buffer(this, end - start, +start);
+};
+
+SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) {
+ var temp = [];
+ for (var i=sourcestart; i<sourceend; i++) {
+ assert.ok(typeof this[i] !== 'undefined', "copying undefined buffer bytes!");
+ temp.push(this[i]);
+ }
+
+ for (var i=targetstart; i<targetstart+temp.length; i++) {
+ target[i] = temp[i-targetstart];
+ }
+};
+
+function coerce(length) {
+ // Coerce length to a number (possibly NaN), round up
+ // in case it's fractional (e.g. 123.456) then do a
+ // double negate to coerce a NaN to 0. Easy, right?
+ length = ~~Math.ceil(+length);
+ return length < 0 ? 0 : length;
+}
+
+
+// Buffer
+
+function Buffer(subject, encoding, offset) {
+ if (!(this instanceof Buffer)) {
+ return new Buffer(subject, encoding, offset);
+ }
+
+ var type;
+
+ // Are we slicing?
+ if (typeof offset === 'number') {
+ this.length = coerce(encoding);
+ this.parent = subject;
+ this.offset = offset;
+ } else {
+ // Find the length
+ switch (type = typeof subject) {
+ case 'number':
+ this.length = coerce(subject);
+ break;
+
+ case 'string':
+ this.length = Buffer.byteLength(subject, encoding);
+ break;
+
+ case 'object': // Assume object is an array
+ this.length = coerce(subject.length);
+ break;
+
+ default:
+ throw new Error('First argument needs to be a number, ' +
+ 'array or string.');
+ }
+
+ if (this.length > Buffer.poolSize) {
+ // Big buffer, just alloc one.
+ this.parent = new SlowBuffer(this.length);
+ this.offset = 0;
+
+ } else {
+ // Small buffer.
+ if (!pool || pool.length - pool.used < this.length) allocPool();
+ this.parent = pool;
+ this.offset = pool.used;
+ pool.used += this.length;
+ }
+
+ // Treat array-ish objects as a byte array.
+ if (isArrayIsh(subject)) {
+ for (var i = 0; i < this.length; i++) {
+ this.parent[i + this.offset] = subject[i];
+ }
+ } else if (type == 'string') {
+ // We are a string
+ this.length = this.write(subject, 0, encoding);
+ }
+ }
+
+}
+
+function isArrayIsh(subject) {
+ return Array.isArray(subject) || Buffer.isBuffer(subject) ||
+ subject && typeof subject === 'object' &&
+ typeof subject.length === 'number';
+}
+
+exports.SlowBuffer = SlowBuffer;
+exports.Buffer = Buffer;
+
+Buffer.poolSize = 8 * 1024;
+var pool;
+
+function allocPool() {
+ pool = new SlowBuffer(Buffer.poolSize);
+ pool.used = 0;
+}
+
+
+// Static methods
+Buffer.isBuffer = function isBuffer(b) {
+ return b instanceof Buffer || b instanceof SlowBuffer;
+};
+
+Buffer.concat = function (list, totalLength) {
+ if (!Array.isArray(list)) {
+ throw new Error("Usage: Buffer.concat(list, [totalLength])\n \
+ list should be an Array.");
+ }
+
+ if (list.length === 0) {
+ return new Buffer(0);
+ } else if (list.length === 1) {
+ return list[0];
+ }
+
+ if (typeof totalLength !== 'number') {
+ totalLength = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ totalLength += buf.length;
+ }
+ }
+
+ var buffer = new Buffer(totalLength);
+ var pos = 0;
+ for (var i = 0; i < list.length; i++) {
+ var buf = list[i];
+ buf.copy(buffer, pos);
+ pos += buf.length;
+ }
+ return buffer;
+};
+
+// Inspect
+Buffer.prototype.inspect = function inspect() {
+ var out = [],
+ len = this.length;
+
+ for (var i = 0; i < len; i++) {
+ out[i] = toHex(this.parent[i + this.offset]);
+ if (i == exports.INSPECT_MAX_BYTES) {
+ out[i + 1] = '...';
+ break;
+ }
+ }
+
+ return '<Buffer ' + out.join(' ') + '>';
+};
+
+
+Buffer.prototype.get = function get(i) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i];
+};
+
+
+Buffer.prototype.set = function set(i, v) {
+ if (i < 0 || i >= this.length) throw new Error('oob');
+ return this.parent[this.offset + i] = v;
+};
+
+
+// write(string, offset = 0, length = buffer.length-offset, encoding = 'utf8')
+Buffer.prototype.write = function(string, offset, length, encoding) {
+ // Support both (string, offset, length, encoding)
+ // and the legacy (string, encoding, offset, length)
+ if (isFinite(offset)) {
+ if (!isFinite(length)) {
+ encoding = length;
+ length = undefined;
+ }
+ } else { // legacy
+ var swap = encoding;
+ encoding = offset;
+ offset = length;
+ length = swap;
+ }
+
+ offset = +offset || 0;
+ var remaining = this.length - offset;
+ if (!length) {
+ length = remaining;
+ } else {
+ length = +length;
+ if (length > remaining) {
+ length = remaining;
+ }
+ }
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ var ret;
+ switch (encoding) {
+ case 'hex':
+ ret = this.parent.hexWrite(string, this.offset + offset, length);
+ break;
+
+ case 'utf8':
+ case 'utf-8':
+ ret = this.parent.utf8Write(string, this.offset + offset, length);
+ break;
+
+ case 'ascii':
+ ret = this.parent.asciiWrite(string, this.offset + offset, length);
+ break;
+
+ case 'binary':
+ ret = this.parent.binaryWrite(string, this.offset + offset, length);
+ break;
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ ret = this.parent.base64Write(string, this.offset + offset, length);
+ break;
+
+ case 'ucs2':
+ case 'ucs-2':
+ ret = this.parent.ucs2Write(string, this.offset + offset, length);
+ break;
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+
+ Buffer._charsWritten = SlowBuffer._charsWritten;
+
+ return ret;
+};
+
+
+// toString(encoding, start=0, end=buffer.length)
+Buffer.prototype.toString = function(encoding, start, end) {
+ encoding = String(encoding || 'utf8').toLowerCase();
+
+ if (typeof start == 'undefined' || start < 0) {
+ start = 0;
+ } else if (start > this.length) {
+ start = this.length;
+ }
+
+ if (typeof end == 'undefined' || end > this.length) {
+ end = this.length;
+ } else if (end < 0) {
+ end = 0;
+ }
+
+ start = start + this.offset;
+ end = end + this.offset;
+
+ switch (encoding) {
+ case 'hex':
+ return this.parent.hexSlice(start, end);
+
+ case 'utf8':
+ case 'utf-8':
+ return this.parent.utf8Slice(start, end);
+
+ case 'ascii':
+ return this.parent.asciiSlice(start, end);
+
+ case 'binary':
+ return this.parent.binarySlice(start, end);
+
+ case 'base64':
+ return this.parent.base64Slice(start, end);
+
+ case 'ucs2':
+ case 'ucs-2':
+ return this.parent.ucs2Slice(start, end);
+
+ default:
+ throw new Error('Unknown encoding');
+ }
+};
+
+
+// byteLength
+Buffer.byteLength = SlowBuffer.byteLength;
+
+
+// fill(value, start=0, end=buffer.length)
+Buffer.prototype.fill = function fill(value, start, end) {
+ value || (value = 0);
+ start || (start = 0);
+ end || (end = this.length);
+
+ if (typeof value === 'string') {
+ value = value.charCodeAt(0);
+ }
+ if (!(typeof value === 'number') || isNaN(value)) {
+ throw new Error('value is not a number');
+ }
+
+ if (end < start) throw new Error('end < start');
+
+ // Fill 0 bytes; we're done
+ if (end === start) return 0;
+ if (this.length == 0) return 0;
+
+ if (start < 0 || start >= this.length) {
+ throw new Error('start out of bounds');
+ }
+
+ if (end < 0 || end > this.length) {
+ throw new Error('end out of bounds');
+ }
+
+ return this.parent.fill(value,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function(target, target_start, start, end) {
+ var source = this;
+ start || (start = 0);
+ end || (end = this.length);
+ target_start || (target_start = 0);
+
+ if (end < start) throw new Error('sourceEnd < sourceStart');
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0;
+ if (target.length == 0 || source.length == 0) return 0;
+
+ if (target_start < 0 || target_start >= target.length) {
+ throw new Error('targetStart out of bounds');
+ }
+
+ if (start < 0 || start >= source.length) {
+ throw new Error('sourceStart out of bounds');
+ }
+
+ if (end < 0 || end > source.length) {
+ throw new Error('sourceEnd out of bounds');
+ }
+
+ // Are we oob?
+ if (end > this.length) {
+ end = this.length;
+ }
+
+ if (target.length - target_start < end - start) {
+ end = target.length - target_start + start;
+ }
+
+ return this.parent.copy(target.parent,
+ target_start + target.offset,
+ start + this.offset,
+ end + this.offset);
+};
+
+
+// slice(start, end)
+Buffer.prototype.slice = function(start, end) {
+ if (end === undefined) end = this.length;
+ if (end > this.length) throw new Error('oob');
+ if (start > end) throw new Error('oob');
+
+ return new Buffer(this.parent, end - start, +start + this.offset);
+};
+
+
+// Legacy methods for backwards compatibility.
+
+Buffer.prototype.utf8Slice = function(start, end) {
+ return this.toString('utf8', start, end);
+};
+
+Buffer.prototype.binarySlice = function(start, end) {
+ return this.toString('binary', start, end);
+};
+
+Buffer.prototype.asciiSlice = function(start, end) {
+ return this.toString('ascii', start, end);
+};
+
+Buffer.prototype.utf8Write = function(string, offset) {
+ return this.write(string, offset, 'utf8');
+};
+
+Buffer.prototype.binaryWrite = function(string, offset) {
+ return this.write(string, offset, 'binary');
+};
+
+Buffer.prototype.asciiWrite = function(string, offset) {
+ return this.write(string, offset, 'ascii');
+};
+
+Buffer.prototype.readUInt8 = function(offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return buffer.parent[buffer.offset + offset];
+};
+
+function readUInt16(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset] << 8;
+ val |= buffer.parent[buffer.offset + offset + 1];
+ } else {
+ val = buffer.parent[buffer.offset + offset];
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt16LE = function(offset, noAssert) {
+ return readUInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt16BE = function(offset, noAssert) {
+ return readUInt16(this, offset, true, noAssert);
+};
+
+function readUInt32(buffer, offset, isBigEndian, noAssert) {
+ var val = 0;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ if (isBigEndian) {
+ val = buffer.parent[buffer.offset + offset + 1] << 16;
+ val |= buffer.parent[buffer.offset + offset + 2] << 8;
+ val |= buffer.parent[buffer.offset + offset + 3];
+ val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0);
+ } else {
+ val = buffer.parent[buffer.offset + offset + 2] << 16;
+ val |= buffer.parent[buffer.offset + offset + 1] << 8;
+ val |= buffer.parent[buffer.offset + offset];
+ val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0);
+ }
+
+ return val;
+}
+
+Buffer.prototype.readUInt32LE = function(offset, noAssert) {
+ return readUInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readUInt32BE = function(offset, noAssert) {
+ return readUInt32(this, offset, true, noAssert);
+};
+
+
+/*
+ * Signed integer types, yay team! A reminder on how two's complement actually
+ * works. The first bit is the signed bit, i.e. tells us whether or not the
+ * number should be positive or negative. If the two's complement value is
+ * positive, then we're done, as it's equivalent to the unsigned representation.
+ *
+ * Now if the number is positive, you're pretty much done, you can just leverage
+ * the unsigned translations and return those. Unfortunately, negative numbers
+ * aren't quite that straightforward.
+ *
+ * At first glance, one might be inclined to use the traditional formula to
+ * translate binary numbers between the positive and negative values in two's
+ * complement. (Though it doesn't quite work for the most negative value)
+ * Mainly:
+ * - invert all the bits
+ * - add one to the result
+ *
+ * Of course, this doesn't quite work in Javascript. Take for example the value
+ * of -128. This could be represented in 16 bits (big-endian) as 0xff80. But of
+ * course, Javascript will do the following:
+ *
+ * > ~0xff80
+ * -65409
+ *
+ * Whoh there, Javascript, that's not quite right. But wait, according to
+ * Javascript that's perfectly correct. When Javascript ends up seeing the
+ * constant 0xff80, it has no notion that it is actually a signed number. It
+ * assumes that we've input the unsigned value 0xff80. Thus, when it does the
+ * binary negation, it casts it into a signed value, (positive 0xff80). Then
+ * when you perform binary negation on that, it turns it into a negative number.
+ *
+ * Instead, we're going to have to use the following general formula, that works
+ * in a rather Javascript friendly way. I'm glad we don't support this kind of
+ * weird numbering scheme in the kernel.
+ *
+ * (BIT-MAX - (unsigned)val + 1) * -1
+ *
+ * The astute observer, may think that this doesn't make sense for 8-bit numbers
+ * (really it isn't necessary for them). However, when you get 16-bit numbers,
+ * you do. Let's go back to our prior example and see how this will look:
+ *
+ * (0xffff - 0xff80 + 1) * -1
+ * (0x007f + 1) * -1
+ * (0x0080) * -1
+ */
+Buffer.prototype.readInt8 = function(offset, noAssert) {
+ var buffer = this;
+ var neg;
+
+ if (!noAssert) {
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ neg = buffer.parent[buffer.offset + offset] & 0x80;
+ if (!neg) {
+ return (buffer.parent[buffer.offset + offset]);
+ }
+
+ return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1);
+};
+
+function readInt16(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt16(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x8000;
+ if (!neg) {
+ return val;
+ }
+
+ return (0xffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt16LE = function(offset, noAssert) {
+ return readInt16(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt16BE = function(offset, noAssert) {
+ return readInt16(this, offset, true, noAssert);
+};
+
+function readInt32(buffer, offset, isBigEndian, noAssert) {
+ var neg, val;
+
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ val = readUInt32(buffer, offset, isBigEndian, noAssert);
+ neg = val & 0x80000000;
+ if (!neg) {
+ return (val);
+ }
+
+ return (0xffffffff - val + 1) * -1;
+}
+
+Buffer.prototype.readInt32LE = function(offset, noAssert) {
+ return readInt32(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readInt32BE = function(offset, noAssert) {
+ return readInt32(this, offset, true, noAssert);
+};
+
+function readFloat(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.readFloatLE = function(offset, noAssert) {
+ return readFloat(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readFloatBE = function(offset, noAssert) {
+ return readFloat(this, offset, true, noAssert);
+};
+
+function readDouble(buffer, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to read beyond buffer length');
+ }
+
+ return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.readDoubleLE = function(offset, noAssert) {
+ return readDouble(this, offset, false, noAssert);
+};
+
+Buffer.prototype.readDoubleBE = function(offset, noAssert) {
+ return readDouble(this, offset, true, noAssert);
+};
+
+
+/*
+ * We have to make sure that the value is a valid integer. This means that it is
+ * non-negative. It has no fractional component and that it does not exceed the
+ * maximum allowed value.
+ *
+ * value The number to check for validity
+ *
+ * max The maximum value
+ */
+function verifuint(value, max) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value >= 0,
+ 'specified a negative value for writing an unsigned value');
+
+ assert.ok(value <= max, 'value is larger than maximum value for type');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+Buffer.prototype.writeUInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xff);
+ }
+
+ buffer.parent[buffer.offset + offset] = value;
+};
+
+function writeUInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffff);
+ }
+
+ if (isBigEndian) {
+ buffer.parent[buffer.offset + offset] = (value & 0xff00) >>> 8;
+ buffer.parent[buffer.offset + offset + 1] = value & 0x00ff;
+ } else {
+ buffer.parent[buffer.offset + offset + 1] = (value & 0xff00) >>> 8;
+ buffer.parent[buffer.offset + offset] = value & 0x00ff;
+ }
+}
+
+Buffer.prototype.writeUInt16LE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt16BE = function(value, offset, noAssert) {
+ writeUInt16(this, value, offset, true, noAssert);
+};
+
+function writeUInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'trying to write beyond buffer length');
+
+ verifuint(value, 0xffffffff);
+ }
+
+ if (isBigEndian) {
+ buffer.parent[buffer.offset + offset] = (value >>> 24) & 0xff;
+ buffer.parent[buffer.offset + offset + 1] = (value >>> 16) & 0xff;
+ buffer.parent[buffer.offset + offset + 2] = (value >>> 8) & 0xff;
+ buffer.parent[buffer.offset + offset + 3] = value & 0xff;
+ } else {
+ buffer.parent[buffer.offset + offset + 3] = (value >>> 24) & 0xff;
+ buffer.parent[buffer.offset + offset + 2] = (value >>> 16) & 0xff;
+ buffer.parent[buffer.offset + offset + 1] = (value >>> 8) & 0xff;
+ buffer.parent[buffer.offset + offset] = value & 0xff;
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeUInt32BE = function(value, offset, noAssert) {
+ writeUInt32(this, value, offset, true, noAssert);
+};
+
+
+/*
+ * We now move onto our friends in the signed number category. Unlike unsigned
+ * numbers, we're going to have to worry a bit more about how we put values into
+ * arrays. Since we are only worrying about signed 32-bit values, we're in
+ * slightly better shape. Unfortunately, we really can't do our favorite binary
+ * & in this system. It really seems to do the wrong thing. For example:
+ *
+ * > -32 & 0xff
+ * 224
+ *
+ * What's happening above is really: 0xe0 & 0xff = 0xe0. However, the results of
+ * this aren't treated as a signed number. Ultimately a bad thing.
+ *
+ * What we're going to want to do is basically create the unsigned equivalent of
+ * our representation and pass that off to the wuint* functions. To do that
+ * we're going to do the following:
+ *
+ * - if the value is positive
+ * we can pass it directly off to the equivalent wuint
+ * - if the value is negative
+ * we do the following computation:
+ * mb + val + 1, where
+ * mb is the maximum unsigned value in that byte size
+ * val is the Javascript negative integer
+ *
+ *
+ * As a concrete value, take -128. In signed 16 bits this would be 0xff80. If
+ * you do out the computations:
+ *
+ * 0xffff - 128 + 1
+ * 0xffff - 127
+ * 0xff80
+ *
+ * You can then encode this value as the signed version. This is really rather
+ * hacky, but it should work and get the job done which is our goal here.
+ */
+
+/*
+ * A series of checks to make sure we actually have a signed 32-bit number
+ */
+function verifsint(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+
+ assert.ok(Math.floor(value) === value, 'value has a fractional component');
+}
+
+function verifIEEE754(value, max, min) {
+ assert.ok(typeof (value) == 'number',
+ 'cannot write a non-number as a number');
+
+ assert.ok(value <= max, 'value larger than maximum allowed value');
+
+ assert.ok(value >= min, 'value smaller than minimum allowed value');
+}
+
+Buffer.prototype.writeInt8 = function(value, offset, noAssert) {
+ var buffer = this;
+
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7f, -0x80);
+ }
+
+ if (value >= 0) {
+ buffer.writeUInt8(value, offset, noAssert);
+ } else {
+ buffer.writeUInt8(0xff + value + 1, offset, noAssert);
+ }
+};
+
+function writeInt16(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 1 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fff, -0x8000);
+ }
+
+ if (value >= 0) {
+ writeUInt16(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt16(buffer, 0xffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt16LE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt16BE = function(value, offset, noAssert) {
+ writeInt16(this, value, offset, true, noAssert);
+};
+
+function writeInt32(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifsint(value, 0x7fffffff, -0x80000000);
+ }
+
+ if (value >= 0) {
+ writeUInt32(buffer, value, offset, isBigEndian, noAssert);
+ } else {
+ writeUInt32(buffer, 0xffffffff + value + 1, offset, isBigEndian, noAssert);
+ }
+}
+
+Buffer.prototype.writeInt32LE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeInt32BE = function(value, offset, noAssert) {
+ writeInt32(this, value, offset, true, noAssert);
+};
+
+function writeFloat(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 3 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 23, 4);
+}
+
+Buffer.prototype.writeFloatLE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeFloatBE = function(value, offset, noAssert) {
+ writeFloat(this, value, offset, true, noAssert);
+};
+
+function writeDouble(buffer, value, offset, isBigEndian, noAssert) {
+ if (!noAssert) {
+ assert.ok(value !== undefined && value !== null,
+ 'missing value');
+
+ assert.ok(typeof (isBigEndian) === 'boolean',
+ 'missing or invalid endian');
+
+ assert.ok(offset !== undefined && offset !== null,
+ 'missing offset');
+
+ assert.ok(offset + 7 < buffer.length,
+ 'Trying to write beyond buffer length');
+
+ verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308);
+ }
+
+ require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
+ 52, 8);
+}
+
+Buffer.prototype.writeDoubleLE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, false, noAssert);
+};
+
+Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
+ writeDouble(this, value, offset, true, noAssert);
+};
+
+SlowBuffer.prototype.readUInt8 = Buffer.prototype.readUInt8;
+SlowBuffer.prototype.readUInt16LE = Buffer.prototype.readUInt16LE;
+SlowBuffer.prototype.readUInt16BE = Buffer.prototype.readUInt16BE;
+SlowBuffer.prototype.readUInt32LE = Buffer.prototype.readUInt32LE;
+SlowBuffer.prototype.readUInt32BE = Buffer.prototype.readUInt32BE;
+SlowBuffer.prototype.readInt8 = Buffer.prototype.readInt8;
+SlowBuffer.prototype.readInt16LE = Buffer.prototype.readInt16LE;
+SlowBuffer.prototype.readInt16BE = Buffer.prototype.readInt16BE;
+SlowBuffer.prototype.readInt32LE = Buffer.prototype.readInt32LE;
+SlowBuffer.prototype.readInt32BE = Buffer.prototype.readInt32BE;
+SlowBuffer.prototype.readFloatLE = Buffer.prototype.readFloatLE;
+SlowBuffer.prototype.readFloatBE = Buffer.prototype.readFloatBE;
+SlowBuffer.prototype.readDoubleLE = Buffer.prototype.readDoubleLE;
+SlowBuffer.prototype.readDoubleBE = Buffer.prototype.readDoubleBE;
+SlowBuffer.prototype.writeUInt8 = Buffer.prototype.writeUInt8;
+SlowBuffer.prototype.writeUInt16LE = Buffer.prototype.writeUInt16LE;
+SlowBuffer.prototype.writeUInt16BE = Buffer.prototype.writeUInt16BE;
+SlowBuffer.prototype.writeUInt32LE = Buffer.prototype.writeUInt32LE;
+SlowBuffer.prototype.writeUInt32BE = Buffer.prototype.writeUInt32BE;
+SlowBuffer.prototype.writeInt8 = Buffer.prototype.writeInt8;
+SlowBuffer.prototype.writeInt16LE = Buffer.prototype.writeInt16LE;
+SlowBuffer.prototype.writeInt16BE = Buffer.prototype.writeInt16BE;
+SlowBuffer.prototype.writeInt32LE = Buffer.prototype.writeInt32LE;
+SlowBuffer.prototype.writeInt32BE = Buffer.prototype.writeInt32BE;
+SlowBuffer.prototype.writeFloatLE = Buffer.prototype.writeFloatLE;
+SlowBuffer.prototype.writeFloatBE = Buffer.prototype.writeFloatBE;
+SlowBuffer.prototype.writeDoubleLE = Buffer.prototype.writeDoubleLE;
+SlowBuffer.prototype.writeDoubleBE = Buffer.prototype.writeDoubleBE;
+
+})()
+},{"assert":2,"./buffer_ieee754":7,"base64-js":9}],9:[function(require,module,exports){
+(function (exports) {
+ 'use strict';
+
+ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+ function b64ToByteArray(b64) {
+ var i, j, l, tmp, placeHolders, arr;
+
+ if (b64.length % 4 > 0) {
+ throw 'Invalid string. Length must be a multiple of 4';
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ placeHolders = b64.indexOf('=');
+ placeHolders = placeHolders > 0 ? b64.length - placeHolders : 0;
+
+ // base64 is 4/3 + up to two characters of the original data
+ arr = [];//new Uint8Array(b64.length * 3 / 4 - placeHolders);
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? b64.length - 4 : b64.length;
+
+ for (i = 0, j = 0; i < l; i += 4, j += 3) {
+ tmp = (lookup.indexOf(b64[i]) << 18) | (lookup.indexOf(b64[i + 1]) << 12) | (lookup.indexOf(b64[i + 2]) << 6) | lookup.indexOf(b64[i + 3]);
+ arr.push((tmp & 0xFF0000) >> 16);
+ arr.push((tmp & 0xFF00) >> 8);
+ arr.push(tmp & 0xFF);
+ }
+
+ if (placeHolders === 2) {
+ tmp = (lookup.indexOf(b64[i]) << 2) | (lookup.indexOf(b64[i + 1]) >> 4);
+ arr.push(tmp & 0xFF);
+ } else if (placeHolders === 1) {
+ tmp = (lookup.indexOf(b64[i]) << 10) | (lookup.indexOf(b64[i + 1]) << 4) | (lookup.indexOf(b64[i + 2]) >> 2);
+ arr.push((tmp >> 8) & 0xFF);
+ arr.push(tmp & 0xFF);
+ }
+
+ return arr;
+ }
+
+ function uint8ToBase64(uint8) {
+ var i,
+ extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+ output = "",
+ temp, length;
+
+ function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
+ };
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+ temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);
+ output += tripletToBase64(temp);
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ switch (extraBytes) {
+ case 1:
+ temp = uint8[uint8.length - 1];
+ output += lookup[temp >> 2];
+ output += lookup[(temp << 4) & 0x3F];
+ output += '==';
+ break;
+ case 2:
+ temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]);
+ output += lookup[temp >> 10];
+ output += lookup[(temp >> 4) & 0x3F];
+ output += lookup[(temp << 2) & 0x3F];
+ output += '=';
+ break;
+ }
+
+ return output;
+ }
+
+ module.exports.toByteArray = b64ToByteArray;
+ module.exports.fromByteArray = uint8ToBase64;
+}());
+
+},{}]},{},[])
+;;module.exports=require("buffer-browserify")
+
+},{}],62:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var WordNetFile = require('./wordnet_file'),
+ fs = require('fs'),
+ util = require('util');
+
+function get(location, callback) {
+ var buff = new Buffer(4096);
+
+ this.open(function(err, fd, done) {
+ WordNetFile.appendLineChar(fd, location, 0, buff, function(line) {
+ done();
+ var data = line.split('| ');
+ var tokens = data[0].split(/\s+/);
+ var ptrs = [];
+ var wCnt = parseInt(tokens[3], 10);
+ var synonyms = [];
+
+ for(var i = 0; i < wCnt; i++) {
+ synonyms.push(tokens[4 + i * 2]);
+ }
+
+ var ptrOffset = (wCnt - 1) * 2 + 6;
+ for(var i = 0; i < parseInt(tokens[ptrOffset], 10); i++) {
+ ptrs.push({
+ pointerSymbol: tokens[ptrOffset + 1 + i * 4],
+ synsetOffset: parseInt(tokens[ptrOffset + 2 + i * 4], 10),
+ pos: tokens[ptrOffset + 3 + i * 4],
+ sourceTarget: tokens[ptrOffset + 4 + i * 4]
+ });
+ }
+
+ callback({
+ synsetOffset: parseInt(tokens[0], 10),
+ lexFilenum: parseInt(tokens[1], 10),
+ pos: tokens[2],
+ wCnt: wCnt,
+ lemma: tokens[4],
+ synonyms: synonyms,
+ lexId: tokens[5],
+ ptrs: ptrs,
+ gloss: data[1]
+ });
+ });
+ });
+}
+
+var DataFile = function(dataDir, name) {
+ WordNetFile.call(this, dataDir, 'data.' + name);
+};
+
+util.inherits(DataFile, WordNetFile);
+DataFile.prototype.get = get;
+
+module.exports = DataFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"util":40,"./wordnet_file":63,"__browserify_buffer":61}],64:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var WordNetFile = require('./wordnet_file'),
+ fs = require('fs'),
+ util = require('util');
+
+function getFileSize(path) {
+ var stat = fs.statSync(path);
+ return stat.size;
+}
+
+function findPrevEOL(fd, pos, callback) {
+ var buff = new Buffer(1024);
+ if(pos == 0)
+ callback(0);
+ else {
+ fs.read(fd, buff, 0, 1, pos, function(err, count) {
+ if(buff[0] == 10)
+ callback(pos + 1);
+ else
+ findPrevEOL(fd, pos - 1, callback);
+ });
+ }
+}
+
+function readLine(fd, pos, callback) {
+ var buff = new Buffer(1024);
+ findPrevEOL(fd, pos, function(pos) {
+ WordNetFile.appendLineChar(fd, pos, 0, buff, callback);
+ });
+}
+
+function miss(callback) {
+ callback({status: 'miss'});
+}
+
+function findAt(fd, size, pos, lastPos, adjustment, searchKey, callback, lastKey) {
+ if (lastPos == pos || pos >= size) {
+ miss(callback);
+ } else {
+ readLine(fd, pos, function(line) {
+ var tokens = line.split(/\s+/);
+ var key = tokens[0];
+
+ if(key == searchKey) {
+ callback({status: 'hit', key: key, 'line': line, tokens: tokens});
+ } else if(adjustment == 1 || key == lastKey) {
+ miss(callback);
+ } else {
+ adjustment = Math.ceil(adjustment * 0.5);
+
+ if (key < searchKey) {
+ findAt(fd, size, pos + adjustment, pos, adjustment, searchKey, callback, key);
+ } else {
+ findAt(fd, size, pos - adjustment, pos, adjustment, searchKey, callback, key);
+ }
+ }
+ });
+ }
+}
+
+function find(searchKey, callback) {
+ var indexFile = this;
+
+ indexFile.open(function(err, fd, done) {
+ if(err) {
+ console.log(err);
+ } else {
+ var size = getFileSize(indexFile.filePath) - 1;
+ var pos = Math.ceil(size / 2);
+ findAt(fd, size, pos, null, pos, searchKey,
+ function(result) { callback(result); done(); });
+ }
+ });
+}
+
+function lookupFromFile(word, callback) {
+ this.find(word, function(record) {
+ var indexRecord = null;
+
+ if(record.status == 'hit') {
+ var ptrs = [], offsets = [];
+
+ for(var i = 0; i < parseInt(record.tokens[3]); i++)
+ ptrs.push(record.tokens[i]);
+
+ for(var i = 0; i < parseInt(record.tokens[2]); i++)
+ offsets.push(parseInt(record.tokens[ptrs.length + 6 + i], 10));
+
+ indexRecord = {
+ lemma: record.tokens[0],
+ pos: record.tokens[1],
+ ptrSymbol: ptrs,
+ senseCnt: parseInt(record.tokens[ptrs.length + 4], 10),
+ tagsenseCnt: parseInt(record.tokens[ptrs.length + 5], 10),
+ synsetOffset: offsets
+ };
+ }
+
+ callback(indexRecord);
+ });
+}
+
+function lookup(word, callback) {
+ this.lookupFromFile(word, callback);
+}
+
+var IndexFile = function(dataDir, name) {
+ WordNetFile.call(this, dataDir, 'index.' + name);
+};
+
+util.inherits(IndexFile, WordNetFile);
+
+IndexFile.prototype.lookupFromFile = lookupFromFile;
+IndexFile.prototype.lookup = lookup;
+IndexFile.prototype.find = find;
+
+IndexFile.prototype._findAt = findAt;
+
+module.exports = IndexFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"util":40,"./wordnet_file":63,"__browserify_buffer":61}],56:[function(require,module,exports){
+/*
+Copyright (c) 2011, Polyakov Vladimir, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'о', 'поÑле', 'вÑе', 'также', 'и', 'другие', 'вÑе', 'как', 'во', 'быть',
+ 'потому', 'был', 'до', 'ÑвлÑÑŽÑÑŒ', 'между', 'вÑе', 'но', 'от', 'иди', 'могу',
+ 'подойди', 'мог', 'делал', 'делаю', 'каждый', 'длÑ', 'откуда', 'иметь', 'имел',
+ 'он', 'имеет', 'её', 'здеÑÑŒ', 'его', 'как', 'еÑли', 'в', 'оно', 'за',
+ 'делать', 'много', 'Ñ', 'может быть', 'более', 'Ñамый', 'должен',
+ 'мой', 'никогда', 'ÑейчаÑ', 'из', 'на', 'только', 'или', 'другой', 'другаÑ',
+ 'другое', 'наше', 'вне', 'конец', 'Ñказал', 'Ñказала', 'также', 'видел', 'c',
+ 'немного', 'вÑе еще', 'так', 'затем', 'тот', 'их', 'там', 'Ñтот', 'они', 'те',
+ 'через', 'тоже', 'под', 'над', 'очень', 'был', 'путь', 'мы', 'хорошо',
+ 'что', 'где', 'который', 'пока', 'кто', 'Ñ ÐºÐµÐ¼', 'хотел бы', 'Ñ‚Ñ‹', 'твои',
+ 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н',
+ 'o', 'п', 'Ñ€', 'Ñ', 'Ñ‚', 'у', 'Ñ„', 'Ñ…', 'ц', 'ч', 'ш', 'щ', 'ÑŠ', 'Ñ‹', 'ÑŒ',
+ 'Ñ', 'ÑŽ', 'Ñ','$', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],57:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+Farsi Stop Words by Fardin Koochaki <me@fardinak.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ // Words
+ 'از', 'با', 'یه', 'برای', 'و', 'باید', 'شاید',
+
+ // Symbols
+ '؟', '!', '٪', '.', '،', '؛', ':', ';', ',',
+
+ // Numbers
+ 'Û±', 'Û²', 'Û³', 'Û´', 'Ûµ', 'Û¶', 'Û·', 'Û¸', 'Û¹', 'Û°'
+];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],58:[function(require,module,exports){
+/*
+Copyright (c) 2011, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'ad','al','allo','ai','agli','all','agl','alla','alle','con','col','coi','da','dal','dallo',
+ 'dai','dagli','dall','dagl','dalla','dalle','di','del','dello','dei','degli','dell','degl',
+ 'della','delle','in','nel','nello','nei','negli','nell','negl','nella','nelle','su','sul',
+ 'sullo','sui','sugli','sull','sugl','sulla','sulle','per','tra','contro','io','tu','lui',
+ 'lei','noi','voi','loro','mio','mia','miei','mie','tuo','tua','tuoi','tue','suo','sua','suoi',
+ 'sue','nostro','nostra','nostri','nostre','vostro','vostra','vostri','vostre','mi','ti','ci',
+ 'vi','lo','la','li','le','gli','ne','il','un','uno','una','ma','ed','se','perché','anche','come',
+ 'dov','dove','che','chi','cui','non','più','quale','quanto','quanti','quanta','quante','quello',
+ 'quelli','quella','quelle','questo','questi','questa','queste','si','tutto','tutti','a','c','e',
+ 'i','l','o','ho','hai','ha','abbiamo','avete','hanno','abbia','abbiate','abbiano','avrò','avrai',
+ 'avrà','avremo','avrete','avranno','avrei','avresti','avrebbe','avremmo','avreste','avrebbero',
+ 'avevo','avevi','aveva','avevamo','avevate','avevano','ebbi','avesti','ebbe','avemmo','aveste',
+ 'ebbero','avessi','avesse','avessimo','avessero','avendo','avuto','avuta','avuti','avute','sono',
+ 'sei','è','siamo','siete','sia','siate','siano','sarò','sarai','sarà','saremo','sarete','saranno',
+ 'sarei','saresti','sarebbe','saremmo','sareste','sarebbero','ero','eri','era','eravamo','eravate',
+ 'erano','fui','fosti','fu','fummo','foste','furono','fossi','fosse','fossimo','fossero','essendo',
+ 'faccio','fai','facciamo','fanno','faccia','facciate','facciano','farò','farai','farà','faremo',
+ 'farete','faranno','farei','faresti','farebbe','faremmo','fareste','farebbero','facevo','facevi',
+ 'faceva','facevamo','facevate','facevano','feci','facesti','fece','facemmo','faceste','fecero',
+ 'facessi','facesse','facessimo','facessero','facendo','sto','stai','sta','stiamo','stanno','stia',
+ 'stiate','stiano','starò','starai','starà','staremo','starete','staranno','starei','staresti',
+ 'starebbe','staremmo','stareste','starebbero','stavo','stavi','stava','stavamo','stavate','stavano',
+ 'stetti','stesti','stette','stemmo','steste','stettero','stessi','stesse','stessimo','stessero','stando',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],59:[function(require,module,exports){
+/*
+Copyright (c) 2011, David Przybilla, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+// a list of commonly used words that have little meaning and can be excluded
+// from analysis.
+var words = [
+ 'a','un','el','ella','y','sobre','de','la','que','en',
+ 'los','del','se','las','por','un','para','con','no',
+ 'una','su','al','lo','como','más','pero','sus','le',
+ 'ya','o','porque','cuando','muy','sin','sobre','también',
+ 'me','hasta','donde','quien','desde','nos','durante','uno',
+ 'ni','contra','ese','eso','mí','qué','otro','él','cual',
+ 'poco','mi','tú','te','ti','sí',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_'];
+
+// tell the world about the noise words.
+exports.words = words;
+
+},{}],63:[function(require,module,exports){
+(function(Buffer){/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var fs = require('fs'),
+ path = require('path'),
+ util = require('util');
+
+
+function appendLineChar(fd, pos, buffPos, buff, callback) {
+ if(buffPos >= buff.length) {
+ var newBuff = new Buffer(buff.length * 2);
+ buff.copy(newBuff, 0, 0, buff.length);
+ buff = newBuff;
+ }
+
+ fs.read(fd, buff, buffPos, 1, pos, function(err, count) {
+ if(err)
+ console.log(err);
+ else {
+ if(buff[buffPos] == 10 || buffPos == buff.length)
+ callback(buff.slice(0, buffPos).toString('ASCII'));
+ else {
+ appendLineChar(fd, pos + 1, buffPos + 1, buff, callback);
+ }
+ }
+ });
+}
+
+function open(callback) {
+ var filePath = this.filePath;
+
+ fs.open(filePath, 'r', null, function(err, fd) {
+ if (err) {
+ console.log('Unable to open %s', filePath);
+ return;
+ }
+ callback(err, fd, function() {fs.close(fd)});
+ });
+}
+
+var WordNetFile = function(dataDir, fileName) {
+ this.dataDir = dataDir;
+ this.fileName = fileName;
+ this.filePath = require('path').join(this.dataDir, this.fileName);
+};
+
+WordNetFile.prototype.open = open;
+WordNetFile.appendLineChar = appendLineChar;
+
+module.exports = WordNetFile;
+
+})(require("__browserify_buffer").Buffer)
+},{"fs":42,"path":65,"util":40,"__browserify_buffer":61}],21:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require("util"),
+ _ = require('underscore')._;
+
+var contractions2 = [
+ /(.)('ll|'re|'ve|n't|'s|'m|'d)\b/ig,
+ /\b(can)(not)\b/ig,
+ /\b(D)('ye)\b/ig,
+ /\b(Gim)(me)\b/ig,
+ /\b(Gon)(na)\b/ig,
+ /\b(Got)(ta)\b/ig,
+ /\b(Lem)(me)\b/ig,
+ /\b(Mor)('n)\b/ig,
+ /\b(T)(is)\b/ig,
+ /\b(T)(was)\b/ig,
+ /\b(Wan)(na)\b/ig];
+
+var contractions3 = [
+ /\b(Whad)(dd)(ya)\b/ig,
+ /\b(Wha)(t)(cha)\b/ig
+];
+
+var TreebankWordTokenizer = function() {
+};
+
+util.inherits(TreebankWordTokenizer, Tokenizer);
+
+TreebankWordTokenizer.prototype.tokenize = function(text) {
+ contractions2.forEach(function(regexp) {
+ text = text.replace(regexp,"$1 $2");
+ });
+
+ contractions3.forEach(function(regexp) {
+ text = text.replace(regexp,"$1 $2 $3");
+ });
+
+ // most punctuation
+ text = text.replace(/([^\w\.\'\-\/\+\<\>,&])/g, " $1 ");
+
+ // commas if followed by space
+ text = text.replace(/(,\s)/g, " $1");
+
+ // single quotes if followed by a space
+ text = text.replace(/('\s)/g, " $1");
+
+ // periods before newline or end of string
+ text = text.replace(/\. *(\n|$)/g, " . ");
+
+ return _.without(text.split(/\s+/), '');
+};
+
+module.exports = TreebankWordTokenizer;
+
+},{"util":40,"./tokenizer":52,"underscore":66}],19:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Tokenizer = require('./tokenizer'),
+ util = require("util"),
+ _ = require('underscore')._;
+
+// Base Class for RegExp Matching
+var RegexpTokenizer = function(options) {
+ var options = options || {};
+ this._pattern = options.pattern || this._pattern;
+ this.discardEmpty = options.discardEmpty || true;
+
+ // Match and split on GAPS not the actual WORDS
+ this._gaps = options.gaps;
+
+ if (this._gaps === undefined) {
+ this._gaps = true;
+ }
+};
+
+util.inherits(RegexpTokenizer, Tokenizer);
+
+RegexpTokenizer.prototype.tokenize = function(s) {
+ var results;
+
+ if (this._gaps) {
+ results = s.split(this._pattern);
+ return (this.discardEmpty) ? _.without(results,'',' ') : results;
+ } else {
+ return s.match(this._pattern);
+ }
+};
+
+exports.RegexpTokenizer = RegexpTokenizer;
+
+/***
+ * A tokenizer that divides a text into sequences of alphabetic and
+ * non-alphabetic characters. E.g.:
+ *
+ * >>> WordTokenizer().tokenize("She said 'hello'.")
+ * ['She', 'said', 'hello']
+ *
+ */
+var WordTokenizer = function(options) {
+ this._pattern = /\W+/;
+ RegexpTokenizer.call(this,options)
+};
+
+util.inherits(WordTokenizer, RegexpTokenizer);
+exports.WordTokenizer = WordTokenizer;
+
+/***
+ * A tokenizer that divides a text into sequences of alphabetic and
+ * non-alphabetic characters. E.g.:
+ *
+ * >>> WordPunctTokenizer().tokenize("She said 'hello'.")
+ * ['She', 'said', "'", 'hello', "'."]
+ *
+ */
+var WordPunctTokenizer = function(options) {
+ this._pattern = new RegExp(/(\w+|\!|\'|\"")/i);
+ RegexpTokenizer.call(this,options)
+};
+
+util.inherits(WordPunctTokenizer, RegexpTokenizer);
+exports.WordPunctTokenizer = WordPunctTokenizer;
+
+},{"util":40,"./tokenizer":52,"underscore":66}],22:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util'),
+Classifier = require('./classifier'),
+ApparatusBayesClassifier = require('apparatus').BayesClassifier;
+
+var BayesClassifier = function(stemmer) {
+ Classifier.call(this, new ApparatusBayesClassifier(), stemmer);
+};
+
+util.inherits(BayesClassifier, Classifier);
+
+function restore(classifier, stemmer) {
+ classifier = Classifier.restore(classifier, stemmer);
+ classifier.__proto__ = BayesClassifier.prototype;
+ classifier.classifier = ApparatusBayesClassifier.restore(classifier.classifier);
+
+ return classifier;
+}
+
+function load(filename, stemmer, callback) {
+ Classifier.load(filename, function(err, classifier) {
+ callback(err, restore(classifier, stemmer));
+ });
+}
+
+BayesClassifier.restore = restore;
+BayesClassifier.load = load;
+
+module.exports = BayesClassifier;
+
+},{"util":40,"../stemmers/porter_stemmer":7,"./classifier":60,"apparatus":67}],23:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var PorterStemmer = require('../stemmers/porter_stemmer'),
+util = require('util'),
+Classifier = require('./classifier'),
+ApparatusLogisticRegressionClassifier = require('apparatus').LogisticRegressionClassifier;
+
+var LogisticRegressionClassifier = function(stemmer) {
+ Classifier.call(this, new ApparatusLogisticRegressionClassifier(), stemmer);
+};
+
+util.inherits(LogisticRegressionClassifier, Classifier);
+
+function restore(classifier, stemmer) {
+ classifier = Classifier.restore(classifier, stemmer);
+ classifier.__proto__ = LogisticRegressionClassifier.prototype;
+ classifier.classifier = ApparatusLogisticRegressionClassifier.restore(classifier.classifier);
+
+ return classifier;
+}
+
+function load(filename, stemmer, callback) {
+ Classifier.load(filename, function(err, classifier) {
+ callback(err, restore(classifier, stemmer));
+ });
+}
+
+function train() {
+ // we need to reset the traning state because logistic regression
+ // needs its matricies to have their widths synced, etc.
+ this.lastAdded = 0;
+ this.classifier = new ApparatusLogisticRegressionClassifier();
+ Classifier.prototype.train.call(this);
+}
+
+LogisticRegressionClassifier.prototype.train = train;
+LogisticRegressionClassifier.restore = restore;
+LogisticRegressionClassifier.load = load;
+
+module.exports = LogisticRegressionClassifier;
+
+},{"util":40,"../stemmers/porter_stemmer":7,"./classifier":60,"apparatus":67}],65:[function(require,module,exports){
+(function(process){function filter (xs, fn) {
+ var res = [];
+ for (var i = 0; i < xs.length; i++) {
+ if (fn(xs[i], i, xs)) res.push(xs[i]);
+ }
+ return res;
+}
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+ // if the path tries to go above the root, `up` ends up > 0
+ var up = 0;
+ for (var i = parts.length; i >= 0; i--) {
+ var last = parts[i];
+ if (last == '.') {
+ parts.splice(i, 1);
+ } else if (last === '..') {
+ parts.splice(i, 1);
+ up++;
+ } else if (up) {
+ parts.splice(i, 1);
+ up--;
+ }
+ }
+
+ // if the path is allowed to go above the root, restore leading ..s
+ if (allowAboveRoot) {
+ for (; up--; up) {
+ parts.unshift('..');
+ }
+ }
+
+ return parts;
+}
+
+// Regex to split a filename into [*, dir, basename, ext]
+// posix version
+var splitPathRe = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/;
+
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+var resolvedPath = '',
+ resolvedAbsolute = false;
+
+for (var i = arguments.length; i >= -1 && !resolvedAbsolute; i--) {
+ var path = (i >= 0)
+ ? arguments[i]
+ : process.cwd();
+
+ // Skip empty and invalid entries
+ if (typeof path !== 'string' || !path) {
+ continue;
+ }
+
+ resolvedPath = path + '/' + resolvedPath;
+ resolvedAbsolute = path.charAt(0) === '/';
+}
+
+// At this point the path should be resolved to a full absolute path, but
+// handle relative paths to be safe (might happen when process.cwd() fails)
+
+// Normalize the path
+resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+ return !!p;
+ }), !resolvedAbsolute).join('/');
+
+ return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
+
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+var isAbsolute = path.charAt(0) === '/',
+ trailingSlash = path.slice(-1) === '/';
+
+// Normalize the path
+path = normalizeArray(filter(path.split('/'), function(p) {
+ return !!p;
+ }), !isAbsolute).join('/');
+
+ if (!path && !isAbsolute) {
+ path = '.';
+ }
+ if (path && trailingSlash) {
+ path += '/';
+ }
+
+ return (isAbsolute ? '/' : '') + path;
+};
+
+
+// posix version
+exports.join = function() {
+ var paths = Array.prototype.slice.call(arguments, 0);
+ return exports.normalize(filter(paths, function(p, index) {
+ return p && typeof p === 'string';
+ }).join('/'));
+};
+
+
+exports.dirname = function(path) {
+ var dir = splitPathRe.exec(path)[1] || '';
+ var isWindows = false;
+ if (!dir) {
+ // No dirname
+ return '.';
+ } else if (dir.length === 1 ||
+ (isWindows && dir.length <= 3 && dir.charAt(1) === ':')) {
+ // It is just a slash or a drive letter with a slash
+ return dir;
+ } else {
+ // It is a full dirname, strip trailing slash
+ return dir.substring(0, dir.length - 1);
+ }
+};
+
+
+exports.basename = function(path, ext) {
+ var f = splitPathRe.exec(path)[2] || '';
+ // TODO: make this comparison case-insensitive on windows?
+ if (ext && f.substr(-1 * ext.length) === ext) {
+ f = f.substr(0, f.length - ext.length);
+ }
+ return f;
+};
+
+
+exports.extname = function(path) {
+ return splitPathRe.exec(path)[3] || '';
+};
+
+exports.relative = function(from, to) {
+ from = exports.resolve(from).substr(1);
+ to = exports.resolve(to).substr(1);
+
+ function trim(arr) {
+ var start = 0;
+ for (; start < arr.length; start++) {
+ if (arr[start] !== '') break;
+ }
+
+ var end = arr.length - 1;
+ for (; end >= 0; end--) {
+ if (arr[end] !== '') break;
+ }
+
+ if (start > end) return [];
+ return arr.slice(start, end - start + 1);
+ }
+
+ var fromParts = trim(from.split('/'));
+ var toParts = trim(to.split('/'));
+
+ var length = Math.min(fromParts.length, toParts.length);
+ var samePartsLength = length;
+ for (var i = 0; i < length; i++) {
+ if (fromParts[i] !== toParts[i]) {
+ samePartsLength = i;
+ break;
+ }
+ }
+
+ var outputParts = [];
+ for (var i = samePartsLength; i < fromParts.length; i++) {
+ outputParts.push('..');
+ }
+
+ outputParts = outputParts.concat(toParts.slice(samePartsLength));
+
+ return outputParts.join('/');
+};
+
+})(require("__browserify_process"))
+},{"__browserify_process":43}],30:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._,
+ Tokenizer = require('../tokenizers/regexp_tokenizer').WordTokenizer,
+ tokenizer = new Tokenizer(),
+ stopwords = require('../util/stopwords').words,
+ fs = require('fs');
+
+function buildDocument(text, key) {
+ var stopOut;
+
+ if(typeof text === 'string') {
+ text = tokenizer.tokenize(text.toLowerCase());
+ stopOut = true;
+ } else if(!_.isArray(text)) {
+ return text;
+ stopOut = false;
+ }
+
+ return text.reduce(function(document, term) {
+ if(!stopOut || stopwords.indexOf(term) < 0)
+ document[term] = (document[term] ? document[term] + 1 : 1);
+
+ return document;
+ }, {__key: key});
+}
+
+function tf(term, document) {
+ return document[term] ? document[term]: 0;
+}
+
+function documentHasTerm(term, document) {
+ return document[term] && document[term] > 0;
+}
+
+function TfIdf(deserialized) {
+ if(deserialized)
+ this.documents = deserialized.documents;
+ else
+ this.documents = [];
+}
+
+module.exports = TfIdf;
+TfIdf.tf = tf;
+
+TfIdf.prototype.idf = function(term) {
+ var docsWithTerm = this.documents.reduce(function(count, document) {
+ return count + (documentHasTerm(term, document) ? 1 : 0);
+ }, 1);
+
+ return Math.log(this.documents.length + 1 / docsWithTerm /* inited to 1 so
+ no addition needed */);
+};
+
+TfIdf.prototype.addDocument = function(document, key) {
+ this.documents.push(buildDocument(document, key));
+};
+
+TfIdf.prototype.addFileSync = function(path, encoding, key) {
+ if(encoding)
+ encoding = 'UTF-8';
+
+ var document = fs.readFileSync(path, 'UTF-8');
+ this.documents.push(buildDocument(document, key));
+};
+
+TfIdf.prototype.tfidf = function(terms, d) {
+ var _this = this;
+
+ if(!_.isArray(terms))
+ terms = tokenizer.tokenize(terms.toString().toLowerCase());
+
+ return terms.reduce(function(value, term) {
+ return value + (tf(term, _this.documents[d]) * _this.idf(term));
+ }, 0.0);
+};
+
+TfIdf.prototype.listTerms = function(d) {
+ var terms = [];
+
+ for(var term in this.documents[d]) {
+ terms.push({term: term, tfidf: this.tfidf(term, d)})
+ }
+
+ return terms.sort(function(x, y) { return y.tfidf - x.tfidf });
+}
+
+TfIdf.prototype.tfidfs = function(terms, callback) {
+ var tfidfs = new Array(this.documents.length);
+
+ for(var i = 0; i < this.documents.length; i++) {
+ tfidfs[i] = this.tfidf(terms, i);
+
+ if(callback)
+ callback(i, tfidfs[i], this.documents[i].__key);
+ }
+
+ return tfidfs;
+};
+
+},{"fs":42,"../tokenizers/regexp_tokenizer":19,"../util/stopwords":33,"underscore":66}],31:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._;
+
+/*
+ Sentences Analizer Class
+ From http://www.writingcentre.uottawa.ca/hypergrammar/sntpurps.html
+
+ Take a POS input and analyse it for
+ - Type of Sentense
+ - Interrogative
+ - Tag Questions
+ -
+ - Declarative
+ - Exclamatory
+ - Imperative
+
+ - Parts of a Sentense
+ - Subject
+ - Predicate
+
+ - Show Preposition Phrases
+*/
+
+var Sentences = function(pos, callback) {
+ this.posObj = pos;
+ this.senType = null;
+ callback(this);
+}
+
+Sentences.prototype.part = function(callback) {
+ var subject = [],
+ predicat = [],
+ verbFound = false;
+
+ this.prepositionPhrases();
+
+ for (var i = 0; i < this.posObj.tags.length; i++) {
+ if (this.posObj.tags[i].pos == "VB") {
+ if (i === 0) {
+ verbFound = true;
+ } else {
+ // We need to Test for any EX before the VB
+ if (this.posObj.tags[i - 1].pos != "EX") {
+ verbFound = true;
+ } else {
+ predicat.push(this.posObj.tags[i].token);
+ }
+ }
+ }
+
+ // Add Pronoun Phrase (pp) Or Subject Phrase (sp)
+ if (!verbFound) {
+ if (this.posObj.tags[i].pp != true)
+ this.posObj.tags[i].spos = "SP";
+
+ subject.push(this.posObj.tags[i].token);
+ } else {
+ if (this.posObj.tags[i].pp != true)
+ this.posObj.tags[i].spos = "PP";
+
+ predicat.push(this.posObj.tags[i].token)
+ }
+ }
+
+ if (subject.length == 0) {
+ this.posObj.tags.push({token:"You",spos:"SP",pos:"PRP",added:true});
+ }
+
+ callback(this);
+}
+
+// Takes POS and removes IN to NN or NNS
+// Adds a PP for each prepositionPhrases
+Sentences.prototype.prepositionPhrases = function() {
+ var remove = false;
+
+ for (var i = 0; i < this.posObj.tags.length; i++) {
+ if (this.posObj.tags[i].pos.match("IN")) {
+ remove = true;
+ }
+
+ if (remove) {
+ this.posObj.tags[i].pp = true;
+ }
+
+ if (this.posObj.tags[i].pos.match("NN")) {
+ remove = false;
+ }
+ }
+}
+
+Sentences.prototype.subjectToString = function() {
+ return this.posObj.tags.map(function(t){ if (t.spos == "SP" || t.spos == "S" ) return t.token }).join(' ');
+}
+
+Sentences.prototype.predicateToString = function() {
+ return this.posObj.tags.map(function(t){ if (t.spos == "PP" || t.spos == "P" ) return t.token }).join(' ');
+}
+
+Sentences.prototype.implicitYou = function() {
+ for (var i = 0; i < this.posObj.tags.length;i++) {
+ if (this.posObj.tags[i].added) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+Sentences.prototype.toString = function() {
+ return this.posObj.tags.map(function(t){return t.token}).join(' ');
+}
+
+// This is quick and incomplete.
+Sentences.prototype.type = function(callback) {
+ var callback = callback || false;
+
+ // FIXME - punct seems useless
+ var lastElement = this.posObj.punct();
+ lastElement = (lastElement.length != 0) ? lastElement.pop() : this.posObj.tags.pop();
+
+ if (lastElement.pos !== ".") {
+ if (this.implicitYou()) {
+ this.senType = "COMMAND";
+ } else if (_(["WDT","WP","WP$","WRB"]).contains(this.posObj.tags[0].pos)) {
+ // Sentences that start with: who, what where when why and how, then they are questions
+ this.senType = "INTERROGATIVE";
+ } else if (_(["PRP"]).contains(lastElement.pos)) {
+ // Sentences that end in a Personal pronoun are most likely questions
+ // eg. We should run away, should we [?]
+ // eg. You want to see that again, do you [?]
+ this.senType = "INTERROGATIVE";
+ } else {
+ this.senType = "UNKNOWN";
+ }
+
+ } else {
+ switch(lastElement.token) {
+ case "?": this.senType = "INTERROGATIVE"; break;
+ case "!": this.senType = (this.implicitYou()) ? "COMMAND":"EXCLAMATORY"; break;
+ case ".": this.senType = (this.implicitYou()) ? "COMMAND":"DECLARATIVE"; break;
+ }
+ }
+
+ if (callback && _(callback).isFunction()) {
+ callback(this);
+ } else {
+ return this.senType;
+ }
+}
+
+module.exports = Sentences;
+
+},{"underscore":66}],34:[function(require,module,exports){
+/*
+Copyright (c) 2011, Rob Ellis, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var _ = require("underscore")._,
+ Tokenizer = require('../tokenizers/regexp_tokenizer').WordTokenizer,
+ tokenizer = new Tokenizer();
+
+exports.ngrams = function(sequence, n) {
+ return ngrams(sequence, n);
+}
+
+exports.bigrams = function(sequence) {
+ return ngrams(sequence, 2);
+}
+
+exports.trigrams = function(sequence) {
+ return ngrams(sequence, 3);
+}
+
+var ngrams = function(sequence, n) {
+ var result = [];
+
+ if (!_(sequence).isArray()) {
+ sequence = tokenizer.tokenize(sequence);
+ }
+
+ var count = _.max([0, sequence.length - n + 1]);
+
+ for (var i = 0; i < count; i++) {
+ result.push(sequence.slice(i, i + n));
+ }
+
+ return result;
+}
+
+
+},{"../tokenizers/regexp_tokenizer":19,"underscore":66}],66:[function(require,module,exports){
+(function(){// Underscore.js 1.4.4
+// http://underscorejs.org
+// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` in the browser, or `global` on the server.
+ var root = this;
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Establish the object that gets returned to break out of a loop iteration.
+ var breaker = {};
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ concat = ArrayProto.concat,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var
+ nativeForEach = ArrayProto.forEach,
+ nativeMap = ArrayProto.map,
+ nativeReduce = ArrayProto.reduce,
+ nativeReduceRight = ArrayProto.reduceRight,
+ nativeFilter = ArrayProto.filter,
+ nativeEvery = ArrayProto.every,
+ nativeSome = ArrayProto.some,
+ nativeIndexOf = ArrayProto.indexOf,
+ nativeLastIndexOf = ArrayProto.lastIndexOf,
+ nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeBind = FuncProto.bind;
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for the old `require()` API. If we're in
+ // the browser, add `_` as a global object via a string identifier,
+ // for Closure Compiler "advanced" mode.
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.4.4';
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles objects with the built-in `forEach`, arrays, and raw objects.
+ // Delegates to **ECMAScript 5**'s native `forEach` if available.
+ var each = _.each = _.forEach = function(obj, iterator, context) {
+ if (obj == null) return;
+ if (nativeForEach && obj.forEach === nativeForEach) {
+ obj.forEach(iterator, context);
+ } else if (obj.length === +obj.length) {
+ for (var i = 0, l = obj.length; i < l; i++) {
+ if (iterator.call(context, obj[i], i, obj) === breaker) return;
+ }
+ } else {
+ for (var key in obj) {
+ if (_.has(obj, key)) {
+ if (iterator.call(context, obj[key], key, obj) === breaker) return;
+ }
+ }
+ }
+ };
+
+ // Return the results of applying the iterator to each element.
+ // Delegates to **ECMAScript 5**'s native `map` if available.
+ _.map = _.collect = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+ each(obj, function(value, index, list) {
+ results[results.length] = iterator.call(context, value, index, list);
+ });
+ return results;
+ };
+
+ var reduceError = 'Reduce of empty array with no initial value';
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+ _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduce && obj.reduce === nativeReduce) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+ }
+ each(obj, function(value, index, list) {
+ if (!initial) {
+ memo = value;
+ initial = true;
+ } else {
+ memo = iterator.call(context, memo, value, index, list);
+ }
+ });
+ if (!initial) throw new TypeError(reduceError);
+ return memo;
+ };
+
+ // The right-associative version of reduce, also known as `foldr`.
+ // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+ _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+ var initial = arguments.length > 2;
+ if (obj == null) obj = [];
+ if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+ if (context) iterator = _.bind(iterator, context);
+ return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+ }
+ var length = obj.length;
+ if (length !== +length) {
+ var keys = _.keys(obj);
+ length = keys.length;
+ }
+ each(obj, function(value, index, list) {
+ index = keys ? keys[--length] : --length;
+ if (!initial) {
+ memo = obj[index];
+ initial = true;
+ } else {
+ memo = iterator.call(context, memo, obj[index], index, list);
+ }
+ });
+ if (!initial) throw new TypeError(reduceError);
+ return memo;
+ };
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, iterator, context) {
+ var result;
+ any(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) {
+ result = value;
+ return true;
+ }
+ });
+ return result;
+ };
+
+ // Return all the elements that pass a truth test.
+ // Delegates to **ECMAScript 5**'s native `filter` if available.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, iterator, context) {
+ var results = [];
+ if (obj == null) return results;
+ if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+ each(obj, function(value, index, list) {
+ if (iterator.call(context, value, index, list)) results[results.length] = value;
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, iterator, context) {
+ return _.filter(obj, function(value, index, list) {
+ return !iterator.call(context, value, index, list);
+ }, context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Delegates to **ECMAScript 5**'s native `every` if available.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, iterator, context) {
+ iterator || (iterator = _.identity);
+ var result = true;
+ if (obj == null) return result;
+ if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+ each(obj, function(value, index, list) {
+ if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Delegates to **ECMAScript 5**'s native `some` if available.
+ // Aliased as `any`.
+ var any = _.some = _.any = function(obj, iterator, context) {
+ iterator || (iterator = _.identity);
+ var result = false;
+ if (obj == null) return result;
+ if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+ each(obj, function(value, index, list) {
+ if (result || (result = iterator.call(context, value, index, list))) return breaker;
+ });
+ return !!result;
+ };
+
+ // Determine if the array or object contains a given value (using `===`).
+ // Aliased as `include`.
+ _.contains = _.include = function(obj, target) {
+ if (obj == null) return false;
+ if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+ return any(obj, function(value) {
+ return value === target;
+ });
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = function(obj, method) {
+ var args = slice.call(arguments, 2);
+ var isFunc = _.isFunction(method);
+ return _.map(obj, function(value) {
+ return (isFunc ? method : value[method]).apply(value, args);
+ });
+ };
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, function(value){ return value[key]; });
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs, first) {
+ if (_.isEmpty(attrs)) return first ? null : [];
+ return _[first ? 'find' : 'filter'](obj, function(value) {
+ for (var key in attrs) {
+ if (attrs[key] !== value[key]) return false;
+ }
+ return true;
+ });
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.where(obj, attrs, true);
+ };
+
+ // Return the maximum element or (element-based computation).
+ // Can't optimize arrays of integers longer than 65,535 elements.
+ // See: https://bugs.webkit.org/show_bug.cgi?id=80797
+ _.max = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+ return Math.max.apply(Math, obj);
+ }
+ if (!iterator && _.isEmpty(obj)) return -Infinity;
+ var result = {computed : -Infinity, value: -Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed >= result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iterator, context) {
+ if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
+ return Math.min.apply(Math, obj);
+ }
+ if (!iterator && _.isEmpty(obj)) return Infinity;
+ var result = {computed : Infinity, value: Infinity};
+ each(obj, function(value, index, list) {
+ var computed = iterator ? iterator.call(context, value, index, list) : value;
+ computed < result.computed && (result = {value : value, computed : computed});
+ });
+ return result.value;
+ };
+
+ // Shuffle an array.
+ _.shuffle = function(obj) {
+ var rand;
+ var index = 0;
+ var shuffled = [];
+ each(obj, function(value) {
+ rand = _.random(index++);
+ shuffled[index - 1] = shuffled[rand];
+ shuffled[rand] = value;
+ });
+ return shuffled;
+ };
+
+ // An internal function to generate lookup iterators.
+ var lookupIterator = function(value) {
+ return _.isFunction(value) ? value : function(obj){ return obj[value]; };
+ };
+
+ // Sort the object's values by a criterion produced by an iterator.
+ _.sortBy = function(obj, value, context) {
+ var iterator = lookupIterator(value);
+ return _.pluck(_.map(obj, function(value, index, list) {
+ return {
+ value : value,
+ index : index,
+ criteria : iterator.call(context, value, index, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index < right.index ? -1 : 1;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(obj, value, context, behavior) {
+ var result = {};
+ var iterator = lookupIterator(value || _.identity);
+ each(obj, function(value, index) {
+ var key = iterator.call(context, value, index, obj);
+ behavior(result, key, value);
+ });
+ return result;
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = function(obj, value, context) {
+ return group(obj, value, context, function(result, key, value) {
+ (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
+ });
+ };
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = function(obj, value, context) {
+ return group(obj, value, context, function(result, key) {
+ if (!_.has(result, key)) result[key] = 0;
+ result[key]++;
+ });
+ };
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iterator, context) {
+ iterator = iterator == null ? _.identity : lookupIterator(iterator);
+ var value = iterator.call(context, obj);
+ var low = 0, high = array.length;
+ while (low < high) {
+ var mid = (low + high) >>> 1;
+ iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;
+ }
+ return low;
+ };
+
+ // Safely convert anything iterable into a real, live array.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (obj.length === +obj.length) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;
+ };
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null) return void 0;
+ return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N. The **guard** check allows it to work with
+ // `_.map`.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array. The **guard** check allows it to work with `_.map`.
+ _.last = function(array, n, guard) {
+ if (array == null) return void 0;
+ if ((n != null) && !guard) {
+ return slice.call(array, Math.max(array.length - n, 0));
+ } else {
+ return array[array.length - 1];
+ }
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array. The **guard**
+ // check allows it to work with `_.map`.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, (n == null) || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, _.identity);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, output) {
+ each(input, function(value) {
+ if (_.isArray(value)) {
+ shallow ? push.apply(output, value) : flatten(value, shallow, output);
+ } else {
+ output.push(value);
+ }
+ });
+ return output;
+ };
+
+ // Return a completely flattened version of an array.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, []);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = function(array) {
+ return _.difference(array, slice.call(arguments, 1));
+ };
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iterator, context) {
+ if (_.isFunction(isSorted)) {
+ context = iterator;
+ iterator = isSorted;
+ isSorted = false;
+ }
+ var initial = iterator ? _.map(array, iterator, context) : array;
+ var results = [];
+ var seen = [];
+ each(initial, function(value, index) {
+ if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {
+ seen.push(value);
+ results.push(array[index]);
+ }
+ });
+ return results;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = function() {
+ return _.uniq(concat.apply(ArrayProto, arguments));
+ };
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ var rest = slice.call(arguments, 1);
+ return _.filter(_.uniq(array), function(item) {
+ return _.every(rest, function(other) {
+ return _.indexOf(other, item) >= 0;
+ });
+ });
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = function(array) {
+ var rest = concat.apply(ArrayProto, slice.call(arguments, 1));
+ return _.filter(array, function(value){ return !_.contains(rest, value); });
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = function() {
+ var args = slice.call(arguments);
+ var length = _.max(_.pluck(args, 'length'));
+ var results = new Array(length);
+ for (var i = 0; i < length; i++) {
+ results[i] = _.pluck(args, "" + i);
+ }
+ return results;
+ };
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values.
+ _.object = function(list, values) {
+ if (list == null) return {};
+ var result = {};
+ for (var i = 0, l = list.length; i < l; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+ // we need this function. Return the position of the first occurrence of an
+ // item in an array, or -1 if the item is not included in the array.
+ // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = function(array, item, isSorted) {
+ if (array == null) return -1;
+ var i = 0, l = array.length;
+ if (isSorted) {
+ if (typeof isSorted == 'number') {
+ i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
+ } else {
+ i = _.sortedIndex(array, item);
+ return array[i] === item ? i : -1;
+ }
+ }
+ if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
+ for (; i < l; i++) if (array[i] === item) return i;
+ return -1;
+ };
+
+ // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+ _.lastIndexOf = function(array, item, from) {
+ if (array == null) return -1;
+ var hasIndex = from != null;
+ if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {
+ return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);
+ }
+ var i = (hasIndex ? from : array.length);
+ while (i--) if (array[i] === item) return i;
+ return -1;
+ };
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (arguments.length <= 1) {
+ stop = start || 0;
+ start = 0;
+ }
+ step = arguments[2] || 1;
+
+ var len = Math.max(Math.ceil((stop - start) / step), 0);
+ var idx = 0;
+ var range = new Array(len);
+
+ while(idx < len) {
+ range[idx++] = start;
+ start += step;
+ }
+
+ return range;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = function(func, context) {
+ if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+ var args = slice.call(arguments, 2);
+ return function() {
+ return func.apply(context, args.concat(slice.call(arguments)));
+ };
+ };
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context.
+ _.partial = function(func) {
+ var args = slice.call(arguments, 1);
+ return function() {
+ return func.apply(this, args.concat(slice.call(arguments)));
+ };
+ };
+
+ // Bind all of an object's methods to that object. Useful for ensuring that
+ // all callbacks defined on an object belong to it.
+ _.bindAll = function(obj) {
+ var funcs = slice.call(arguments, 1);
+ if (funcs.length === 0) funcs = _.functions(obj);
+ each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+ return obj;
+ };
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memo = {};
+ hasher || (hasher = _.identity);
+ return function() {
+ var key = hasher.apply(this, arguments);
+ return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+ };
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = function(func, wait) {
+ var args = slice.call(arguments, 2);
+ return setTimeout(function(){ return func.apply(null, args); }, wait);
+ };
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = function(func) {
+ return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+ };
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time.
+ _.throttle = function(func, wait) {
+ var context, args, timeout, result;
+ var previous = 0;
+ var later = function() {
+ previous = new Date;
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments;
+ var later = function() {
+ timeout = null;
+ if (!immediate) result = func.apply(context, args);
+ };
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(context, args);
+ return result;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = function(func) {
+ var ran = false, memo;
+ return function() {
+ if (ran) return memo;
+ ran = true;
+ memo = func.apply(this, arguments);
+ func = null;
+ return memo;
+ };
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return function() {
+ var args = [func];
+ push.apply(args, arguments);
+ return wrapper.apply(this, args);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var funcs = arguments;
+ return function() {
+ var args = arguments;
+ for (var i = funcs.length - 1; i >= 0; i--) {
+ args = [funcs[i].apply(this, args)];
+ }
+ return args[0];
+ };
+ };
+
+ // Returns a function that will only be executed after being called N times.
+ _.after = function(times, func) {
+ if (times <= 0) return func();
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Object Functions
+ // ----------------
+
+ // Retrieve the names of an object's properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`
+ _.keys = nativeKeys || function(obj) {
+ if (obj !== Object(obj)) throw new TypeError('Invalid object');
+ var keys = [];
+ for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var values = [];
+ for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
+ return values;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ _.pairs = function(obj) {
+ var pairs = [];
+ for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ if (source) {
+ for (var prop in source) {
+ obj[prop] = source[prop];
+ }
+ }
+ });
+ return obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = function(obj) {
+ var copy = {};
+ var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+ each(keys, function(key) {
+ if (key in obj) copy[key] = obj[key];
+ });
+ return copy;
+ };
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = function(obj) {
+ var copy = {};
+ var keys = concat.apply(ArrayProto, slice.call(arguments, 1));
+ for (var key in obj) {
+ if (!_.contains(keys, key)) copy[key] = obj[key];
+ }
+ return copy;
+ };
+
+ // Fill in a given object with default properties.
+ _.defaults = function(obj) {
+ each(slice.call(arguments, 1), function(source) {
+ if (source) {
+ for (var prop in source) {
+ if (obj[prop] == null) obj[prop] = source[prop];
+ }
+ }
+ });
+ return obj;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+ if (a === b) return a !== 0 || 1 / a == 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className != toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, dates, and booleans are compared by value.
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return a == String(b);
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+ // other numeric values.
+ return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a == +b;
+ // RegExps are compared by their source patterns and flags.
+ case '[object RegExp]':
+ return a.source == b.source &&
+ a.global == b.global &&
+ a.multiline == b.multiline &&
+ a.ignoreCase == b.ignoreCase;
+ }
+ if (typeof a != 'object' || typeof b != 'object') return false;
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] == a) return bStack[length] == b;
+ }
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+ var size = 0, result = true;
+ // Recursively compare objects and arrays.
+ if (className == '[object Array]') {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ size = a.length;
+ result = size == b.length;
+ if (result) {
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (size--) {
+ if (!(result = eq(a[size], b[size], aStack, bStack))) break;
+ }
+ }
+ } else {
+ // Objects with different constructors are not equivalent, but `Object`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
+ _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
+ return false;
+ }
+ // Deep compare objects.
+ for (var key in a) {
+ if (_.has(a, key)) {
+ // Count the expected number of properties.
+ size++;
+ // Deep compare each member.
+ if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
+ }
+ }
+ // Ensure that both objects contain the same number of properties.
+ if (result) {
+ for (key in b) {
+ if (_.has(b, key) && !(size--)) break;
+ }
+ result = !size;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return result;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b, [], []);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+ for (var key in obj) if (_.has(obj, key)) return false;
+ return true;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) == '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ return obj === Object(obj);
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.
+ each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) == '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return !!(obj && _.has(obj, 'callee'));
+ };
+ }
+
+ // Optimize `isFunction` if appropriate.
+ if (typeof (/./) !== 'function') {
+ _.isFunction = function(obj) {
+ return typeof obj === 'function';
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && obj != +obj;
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, key) {
+ return hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iterators.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iterator, context) {
+ var accum = Array(n);
+ for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // List of HTML entities for escaping.
+ var entityMap = {
+ escape: {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '/': '&#x2F;'
+ }
+ };
+ entityMap.unescape = _.invert(entityMap.escape);
+
+ // Regexes containing the keys and values listed immediately above.
+ var entityRegexes = {
+ escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),
+ unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')
+ };
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ _.each(['escape', 'unescape'], function(method) {
+ _[method] = function(string) {
+ if (string == null) return '';
+ return ('' + string).replace(entityRegexes[method], function(match) {
+ return entityMap[method][match];
+ });
+ };
+ });
+
+ // If the value of the named property is a function then invoke it;
+ // otherwise, return it.
+ _.result = function(object, property) {
+ if (object == null) return null;
+ var value = object[property];
+ return _.isFunction(value) ? value.call(object) : value;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ each(_.functions(obj), function(name){
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return result.call(this, func.apply(_, args));
+ };
+ });
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate : /<%([\s\S]+?)%>/g,
+ interpolate : /<%=([\s\S]+?)%>/g,
+ escape : /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\t': 't',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g;
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ _.template = function(text, data, settings) {
+ var render;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = new RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset)
+ .replace(escaper, function(match) { return '\\' + escapes[match]; });
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ }
+ if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ }
+ if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+ index = offset + match.length;
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + "return __p;\n";
+
+ try {
+ render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ if (data) return render(data, _);
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled function source as a convenience for precompilation.
+ template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function, which will delegate to the wrapper.
+ _.chain = function(obj) {
+ return _(obj).chain();
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var result = function(obj) {
+ return this._chain ? _(obj).chain() : obj;
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];
+ return result.call(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return result.call(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ _.extend(_.prototype, {
+
+ // Start chaining a wrapped Underscore object.
+ chain: function() {
+ this._chain = true;
+ return this;
+ },
+
+ // Extracts the result from a wrapped and chained object.
+ value: function() {
+ return this._wrapped;
+ }
+
+ });
+
+}).call(this);
+
+})()
+},{}],29:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var IndexFile = require('./index_file'),
+ DataFile = require('./data_file');
+
+function pushResults(data, results, offsets, callback) {
+ var wordnet = this;
+
+ if(offsets.length == 0) {
+ callback(results);
+ } else {
+ data.get(offsets.pop(), function(record) {
+ results.push(record);
+ wordnet.pushResults(data, results, offsets, callback);
+ });
+ }
+}
+
+function lookupFromFiles(files, results, word, callback) {
+ var wordnet = this;
+
+ if(files.length == 0)
+ callback(results);
+ else {
+ var file = files.pop();
+
+ file.index.lookup(word, function(record) {
+ if(record) {
+ wordnet.pushResults(file.data, results, record.synsetOffset, function() {
+ wordnet.lookupFromFiles(files, results, word, callback);
+ });
+ } else {
+ wordnet.lookupFromFiles(files, results, word, callback);
+ }
+ });
+ }
+}
+
+function lookup(word, callback) {
+ word = word.toLowerCase().replace(/\s+/g, '_');
+
+ this.lookupFromFiles([
+ {index: this.nounIndex, data: this.nounData},
+ {index: this.verbIndex, data: this.verbData},
+ {index: this.adjIndex, data: this.adjData},
+ {index: this.advIndex, data: this.advData},
+ ], [], word, callback);
+}
+
+function get(synsetOffset, pos, callback) {
+ var dataFile = this.getDataFile(pos);
+ var wordnet = this;
+
+ dataFile.get(synsetOffset, function(result) {
+ callback(result);
+ });
+}
+
+function getDataFile(pos) {
+ switch(pos) {
+ case 'n':
+ return this.nounData;
+ case 'v':
+ return this.verbData;
+ case 'a': case 's':
+ return this.adjData;
+ case 'r':
+ return this.advData;
+ }
+}
+
+function loadSynonyms(synonyms, results, ptrs, callback) {
+ var wordnet = this;
+
+ if(ptrs.length > 0) {
+ var ptr = ptrs.pop();
+
+ this.get(ptr.synsetOffset, ptr.pos, function(result) {
+ synonyms.push(result);
+ wordnet.loadSynonyms(synonyms, results, ptrs, callback);
+ });
+ } else {
+ wordnet.loadResultSynonyms(synonyms, results, callback);
+ }
+}
+
+function loadResultSynonyms(synonyms, results, callback) {
+ var wordnet = this;
+
+ if(results.length > 0) {
+ var result = results.pop();
+ wordnet.loadSynonyms(synonyms, results, result.ptrs, callback);
+ } else
+ callback(synonyms);
+}
+
+function lookupSynonyms(word, callback) {
+ var wordnet = this;
+
+ wordnet.lookup(word, function(results) {
+ wordnet.loadResultSynonyms([], results, callback);
+ });
+}
+
+function getSynonyms() {
+ var wordnet = this;
+ var callback = arguments[2] ? arguments[2] : arguments[1];
+ var pos = arguments[0].pos ? arguments[0].pos : arguments[1];
+ var synsetOffset = arguments[0].synsetOffset ? arguments[0].synsetOffset : arguments[0];
+
+ this.get(synsetOffset, pos, function(result) {
+ wordnet.loadSynonyms([], [], result.ptrs, callback);
+ });
+}
+
+function WordNet(dataDir) {
+
+ if (!dataDir) {
+ try {
+ var WNdb = require('WNdb');
+ } catch(e) {
+ console.error("Please 'npm install WNdb' before using WordNet module or specify a dict directory.");
+ throw e;
+ }
+ dataDir = WNdb.path;
+ }
+
+ this.nounIndex = new IndexFile(dataDir, 'noun');
+ this.verbIndex = new IndexFile(dataDir, 'verb');
+ this.adjIndex = new IndexFile(dataDir, 'adj');
+ this.advIndex = new IndexFile(dataDir, 'adv');
+
+ this.nounData = new DataFile(dataDir, 'noun');
+ this.verbData = new DataFile(dataDir, 'verb');
+ this.adjData = new DataFile(dataDir, 'adj');
+ this.advData = new DataFile(dataDir, 'adv');
+
+ this.get = get;
+ this.lookup = lookup;
+ this.lookupFromFiles = lookupFromFiles;
+ this.pushResults = pushResults;
+ this.loadResultSynonyms = loadResultSynonyms;
+ this.loadSynonyms = loadSynonyms;
+ this.lookupSynonyms = lookupSynonyms;
+ this.getSynonyms = getSynonyms;
+ this.getDataFile = getDataFile;
+}
+
+module.exports = WordNet;
+
+},{"./index_file":64,"./data_file":62,"WNdb":68}],68:[function(require,module,exports){
+(function(__dirname){
+exports.version = "3.0"; // this is the WordNet DB version
+exports.path = require('path').join(__dirname, "dict");
+exports.files = require('fs').readdirSync(exports.path);
+
+})("/node_modules/WNdb")
+},{"path":65,"fs":42}],67:[function(require,module,exports){
+
+exports.BayesClassifier = require('./classifier/bayes_classifier');
+exports.LogisticRegressionClassifier = require('./classifier/logistic_regression_classifier');
+exports.KMeans = require('./clusterer/kmeans');
+
+},{"./classifier/bayes_classifier":69,"./classifier/logistic_regression_classifier":70,"./clusterer/kmeans":71}],69:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+Classifier = require('./classifier');
+
+var BayesClassifier = function(smoothing) {
+ Classifier.call(this);
+ this.classFeatures = {};
+ this.classTotals = {};
+ this.totalExamples = 1; // start at one to smooth
+ this.smoothing = smoothing === undefined ? 1.0 : smoothing;
+};
+
+util.inherits(BayesClassifier, Classifier);
+
+function addExample(observation, label) {
+ if(!this.classFeatures[label]) {
+ this.classFeatures[label] = {};
+ this.classTotals[label] = 1; // give an extra for smoothing
+ }
+
+ if(observation instanceof Array){
+ var i = observation.length;
+ this.totalExamples++;
+ this.classTotals[label]++;
+
+ while(i--) {
+ if(observation[i]) {
+ if(this.classFeatures[label][i]) {
+ this.classFeatures[label][i]++;
+ } else {
+ // give an extra for smoothing
+ this.classFeatures[label][i] = 1 + this.smoothing;
+ }
+ }
+ }
+ } else {
+ // sparse observation
+ for(var key in observation){
+ value = observation[key];
+
+ if(this.classFeatures[label][value]) {
+ this.classFeatures[label][value]++;
+ } else {
+ // give an extra for smoothing
+ this.classFeatures[label][value] = 1 + this.smoothing;
+ }
+ }
+ }
+}
+
+function train() {
+
+}
+
+function probabilityOfClass(observation, label) {
+ var prob = 0;
+
+ if(observation instanceof Array){
+ var i = observation.length;
+
+ while(i--) {
+ if(observation[i]) {
+ var count = this.classFeatures[label][i] || this.smoothing;
+
+ // numbers are tiny, add logs rather than take product
+ prob += Math.log(count / this.classTotals[label]);
+ }
+ };
+ } else {
+ // sparse observation
+ for(var key in observation){
+ var count = this.classFeatures[label][observation[key]] || this.smoothing;
+
+ // numbers are tiny, add logs rather than take product
+ prob += Math.log(count / this.classTotals[label]);
+ }
+ }
+
+ // p(C) * unlogging the above calculation P(X|C)
+ prob = (this.classTotals[label] / this.totalExamples) * Math.exp(prob);
+
+ return prob;
+}
+
+function getClassifications(observation) {
+ var classifier = this;
+ var labels = [];
+
+ for(var className in this.classFeatures) {
+ labels.push({label: className,
+ value: classifier.probabilityOfClass(observation, className)});
+ }
+
+ return labels.sort(function(x, y) {return y.value > x.value});
+}
+
+function restore(classifier) {
+ classifier = Classifier.restore(classifier);
+ classifier.__proto__ = BayesClassifier.prototype;
+
+ return classifier;
+}
+
+BayesClassifier.prototype.addExample = addExample;
+BayesClassifier.prototype.train = train;
+BayesClassifier.prototype.getClassifications = getClassifications;
+BayesClassifier.prototype.probabilityOfClass = probabilityOfClass;
+
+BayesClassifier.restore = restore;
+
+module.exports = BayesClassifier;
+},{"util":40,"./classifier":72}],72:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+function Classifier() {
+}
+
+function restore(classifier) {
+ classifier = typeof classifier == 'string' ? JSON.parse(classifier) : classifier;
+
+ return classifier;
+}
+
+function addExample(observation, classification) {
+ throw 'Not implemented';
+}
+
+function classify(observation) {
+ return this.getClassifications(observation)[0].label;
+}
+
+function train() {
+ throw 'Not implemented';
+}
+
+Classifier.prototype.addExample = addExample;
+Classifier.prototype.train = train;
+Classifier.prototype.classify = classify;
+
+Classifier.restore = restore;
+
+module.exports = Classifier;
+
+},{}],70:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var util = require('util'),
+ Classifier = require('./classifier');
+
+var sylvester = require('sylvester'),
+Matrix = sylvester.Matrix,
+Vector = sylvester.Vector;
+
+function sigmoid(z) {
+ return 1 / (1 + Math.exp(0 - z));
+}
+
+function hypothesis(theta, Observations) {
+ return Observations.x(theta).map(sigmoid);
+}
+
+function cost(theta, Examples, classifications) {
+ var hypothesisResult = hypothesis(theta, Examples);
+
+ var ones = Vector.One(Examples.rows());
+ var cost_1 = Vector.Zero(Examples.rows()).subtract(classifications).elementMultiply(hypothesisResult.log());
+ var cost_0 = ones.subtract(classifications).elementMultiply(ones.subtract(hypothesisResult).log());
+
+ return (1 / Examples.rows()) * cost_1.subtract(cost_0).sum();
+}
+
+function descendGradient(theta, Examples, classifications) {
+ var maxIt = 500;
+ var last;
+ var current;
+ var learningRate = 3;
+ var learningRateFound = false;
+
+ Examples = Matrix.One(Examples.rows(), 1).augment(Examples);
+ theta = theta.augment([0]);
+
+ while(!learningRateFound) {
+ var i = 0;
+ last = null;
+
+ while(true) {
+ var hypothesisResult = hypothesis(theta, Examples);
+ theta = theta.subtract(Examples.transpose().x(
+ hypothesisResult.subtract(classifications)).x(1 / Examples.rows()).x(learningRate));
+ current = cost(theta, Examples, classifications);
+
+ i++;
+
+ if(last) {
+ if(current < last)
+ learningRateFound = true;
+ else
+ break;
+
+ if(last - current < 0.0001)
+ break;
+ }
+
+ if(i >= maxIt)
+ throw 'unable to find minimum';
+
+ last = current;
+ }
+
+ learningRate /= 3;
+ }
+
+ return theta.chomp(1);
+}
+
+var LogisticRegressionClassifier = function() {
+ Classifier.call(this);
+ this.examples = {};
+ this.features = [];
+ this.featurePositions = {};
+ this.maxFeaturePosition = 0;
+ this.classifications = [];
+ this.exampleCount = 0;
+};
+
+util.inherits(LogisticRegressionClassifier, Classifier);
+
+function createClassifications() {
+ var classifications = [];
+
+ for(var i = 0; i < this.exampleCount; i++) {
+ var classification = [];
+
+ for(var _ in this.examples)
+ classification.push(0);
+
+ classifications.push(classification);
+ }
+
+ return classifications;
+}
+
+function computeThetas(Examples, Classifications) {
+ this.theta = [];
+
+ // each class will have it's own theta.
+ for(var i = 1; i <= this.classifications.length; i++) {
+ var theta = Examples.row(1).map(function() { return 0; });
+ this.theta.push(descendGradient(theta, Examples, Classifications.column(i)));
+ }
+}
+
+function train() {
+ var examples = [];
+ var classifications = this.createClassifications();
+ var d = 0, c = 0;
+
+ for(var classification in this.examples) {
+ for(var i = 0; i < this.examples[classification].length; i++) {
+ var doc = this.examples[classification][i];
+ var example = doc;
+
+ examples.push(example);
+ classifications[d][c] = 1;
+ d++;
+ }
+
+ c++;
+ }
+
+ this.computeThetas($M(examples), $M(classifications));
+}
+
+function addExample(data, classification) {
+ if(!this.examples[classification]) {
+ this.examples[classification] = [];
+ this.classifications.push(classification);
+ }
+
+ this.examples[classification].push(data);
+ this.exampleCount++;
+}
+
+function getClassifications(observation) {
+ observation = $V(observation);
+ var classifications = [];
+
+ for(var i = 0; i < this.theta.length; i++) {
+ classifications.push({label: this.classifications[i],
+ value: sigmoid(observation.dot(this.theta[i])) });
+ }
+
+ return classifications.sort(function(x, y) {return y.value > x.value});
+}
+
+function restore(classifier) {
+ classifier = Classifier.restore(classifier);
+ classifier.__proto__ = LogisticRegressionClassifier.prototype;
+
+ return classifier;
+}
+
+LogisticRegressionClassifier.prototype.addExample = addExample;
+LogisticRegressionClassifier.prototype.restore = restore;
+LogisticRegressionClassifier.prototype.train = train;
+LogisticRegressionClassifier.prototype.createClassifications = createClassifications;
+LogisticRegressionClassifier.prototype.computeThetas = computeThetas;
+LogisticRegressionClassifier.prototype.getClassifications = getClassifications;
+
+LogisticRegressionClassifier.restore = restore;
+
+module.exports = LogisticRegressionClassifier;
+
+},{"util":40,"./classifier":72,"sylvester":73}],71:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var Sylvester = require('sylvester'),
+Matrix = Sylvester.Matrix,
+Vector = Sylvester.Vector;
+
+function KMeans(Observations) {
+ if(!Observations.elements)
+ Observations = $M(Observations);
+
+ this.Observations = Observations;
+}
+
+// create an initial centroid matrix with initial values between
+// 0 and the max of feature data X.
+function createCentroids(k) {
+ var Centroid = [];
+ var maxes = this.Observations.maxColumns();
+ //console.log(maxes);
+
+ for(var i = 1; i <= k; i++) {
+ var centroid = [];
+
+ for(var j = 1; j <= this.Observations.cols(); j++) {
+ centroid.push(Math.random() * maxes.e(j));
+ }
+
+ Centroid.push(centroid);
+ }
+
+ //console.log(centroid)
+
+ return $M(Centroid);
+}
+
+// get the euclidian distance between the feature data X and
+// a given centroid matrix C.
+function distanceFrom(Centroids) {
+ var distances = [];
+
+ for(var i = 1; i <= this.Observations.rows(); i++) {
+ var distance = [];
+
+ for(var j = 1; j <= Centroids.rows(); j++) {
+ distance.push(this.Observations.row(i).distanceFrom(Centroids.row(j)));
+ }
+
+ distances.push(distance);
+ }
+
+ return $M(distances);
+}
+
+// categorize the feature data X into k clusters. return a vector
+// containing the results.
+function cluster(k) {
+ var Centroids = this.createCentroids(k);
+ var LastDistances = Matrix.Zero(this.Observations.rows(), this.Observations.cols());
+ var Distances = this.distanceFrom(Centroids);
+ var Groups;
+
+ while(!(LastDistances.eql(Distances))) {
+ Groups = Distances.minColumnIndexes();
+ LastDistances = Distances;
+
+ var newCentroids = [];
+
+ for(var i = 1; i <= Centroids.rows(); i++) {
+ var centroid = [];
+
+ for(var j = 1; j <= Centroids.cols(); j++) {
+ var sum = 0;
+ var count = 0;
+
+ for(var l = 1; l <= this.Observations.rows(); l++) {
+ if(Groups.e(l) == i) {
+ count++;
+ sum += this.Observations.e(l, j);
+ }
+ }
+
+ centroid.push(sum / count);
+ }
+
+ newCentroids.push(centroid);
+ }
+
+ Centroids = $M(newCentroids);
+ Distances = this.distanceFrom(Centroids);
+ }
+
+ return Groups;
+}
+
+KMeans.prototype.createCentroids = createCentroids;
+KMeans.prototype.distanceFrom = distanceFrom;
+KMeans.prototype.cluster = cluster;
+
+module.exports = KMeans;
+
+},{"sylvester":73}],73:[function(require,module,exports){
+(function(global){// Copyright (c) 2011, Chris Umbel
+
+exports.Vector = require('./vector');
+global.$V = exports.Vector.create;
+exports.Matrix = require('./matrix');
+global.$M = exports.Matrix.create;
+exports.Line = require('./line');
+global.$L = exports.Line.create;
+exports.Plane = require('./plane');
+global.$P = exports.Plane.create;
+exports.Line.Segment = require('./line.segment');
+exports.Sylvester = require('./sylvester');
+
+})(window)
+},{"./vector":74,"./matrix":75,"./line":76,"./plane":77,"./line.segment":78,"./sylvester":79}],79:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// This file is required in order for any other classes to work. Some Vector methods work with the
+// other Sylvester classes and are useless unless they are included. Other classes such as Line and
+// Plane will not function at all without Vector being loaded first.
+
+Math.sign = function(x) {
+ return x < 0 ? -1: 1;
+}
+
+var Sylvester = {
+ precision: 1e-6,
+ approxPrecision: 1e-5
+};
+
+module.exports = Sylvester;
+
+},{}],74:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// This file is required in order for any other classes to work. Some Vector methods work with the
+// other Sylvester classes and are useless unless they are included. Other classes such as Line and
+// Plane will not function at all without Vector being loaded first.
+
+var Sylvester = require('./sylvester'),
+Matrix = require('./matrix');
+
+function Vector() {}
+Vector.prototype = {
+
+ norm: function() {
+ var n = this.elements.length;
+ var sum = 0;
+
+ while (n--) {
+ sum += Math.pow(this.elements[n], 2);
+ }
+
+ return Math.sqrt(sum);
+ },
+
+ // Returns element i of the vector
+ e: function(i) {
+ return (i < 1 || i > this.elements.length) ? null : this.elements[i - 1];
+ },
+
+ // Returns the number of rows/columns the vector has
+ dimensions: function() {
+ return {rows: 1, cols: this.elements.length};
+ },
+
+ // Returns the number of rows in the vector
+ rows: function() {
+ return 1;
+ },
+
+ // Returns the number of columns in the vector
+ cols: function() {
+ return this.elements.length;
+ },
+
+ // Returns the modulus ('length') of the vector
+ modulus: function() {
+ return Math.sqrt(this.dot(this));
+ },
+
+ // Returns true iff the vector is equal to the argument
+ eql: function(vector) {
+ var n = this.elements.length;
+ var V = vector.elements || vector;
+ if (n != V.length) { return false; }
+ while (n--) {
+ if (Math.abs(this.elements[n] - V[n]) > Sylvester.precision) { return false; }
+ }
+ return true;
+ },
+
+ // Returns a copy of the vector
+ dup: function() {
+ return Vector.create(this.elements);
+ },
+
+ // Maps the vector to another vector according to the given function
+ map: function(fn) {
+ var elements = [];
+ this.each(function(x, i) {
+ elements.push(fn(x, i));
+ });
+ return Vector.create(elements);
+ },
+
+ // Calls the iterator for each element of the vector in turn
+ each: function(fn) {
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ fn(this.elements[i], i + 1);
+ }
+ },
+
+ // Returns a new vector created by normalizing the receiver
+ toUnitVector: function() {
+ var r = this.modulus();
+ if (r === 0) { return this.dup(); }
+ return this.map(function(x) { return x / r; });
+ },
+
+ // Returns the angle between the vector and the argument (also a vector)
+ angleFrom: function(vector) {
+ var V = vector.elements || vector;
+ var n = this.elements.length, k = n, i;
+ if (n != V.length) { return null; }
+ var dot = 0, mod1 = 0, mod2 = 0;
+ // Work things out in parallel to save time
+ this.each(function(x, i) {
+ dot += x * V[i - 1];
+ mod1 += x * x;
+ mod2 += V[i - 1] * V[i - 1];
+ });
+ mod1 = Math.sqrt(mod1); mod2 = Math.sqrt(mod2);
+ if (mod1 * mod2 === 0) { return null; }
+ var theta = dot / (mod1 * mod2);
+ if (theta < -1) { theta = -1; }
+ if (theta > 1) { theta = 1; }
+ return Math.acos(theta);
+ },
+
+ // Returns true iff the vector is parallel to the argument
+ isParallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (angle <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is antiparallel to the argument
+ isAntiparallelTo: function(vector) {
+ var angle = this.angleFrom(vector);
+ return (angle === null) ? null : (Math.abs(angle - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns true iff the vector is perpendicular to the argument
+ isPerpendicularTo: function(vector) {
+ var dot = this.dot(vector);
+ return (dot === null) ? null : (Math.abs(dot) <= Sylvester.precision);
+ },
+
+ // Returns the result of adding the argument to the vector
+ add: function(value) {
+ var V = value.elements || value;
+
+ if (this.elements.length != V.length)
+ return this.map(function(v) { return v + value });
+ else
+ return this.map(function(x, i) { return x + V[i - 1]; });
+ },
+
+ // Returns the result of subtracting the argument from the vector
+ subtract: function(v) {
+ if (typeof(v) == 'number')
+ return this.map(function(k) { return k - v; });
+
+ var V = v.elements || v;
+ if (this.elements.length != V.length) { return null; }
+ return this.map(function(x, i) { return x - V[i - 1]; });
+ },
+
+ // Returns the result of multiplying the elements of the vector by the argument
+ multiply: function(k) {
+ return this.map(function(x) { return x * k; });
+ },
+
+ elementMultiply: function(v) {
+ return this.map(function(k, i) {
+ return v.e(i) * k;
+ });
+ },
+
+ sum: function() {
+ var sum = 0;
+ this.map(function(x) { sum += x;});
+ return sum;
+ },
+
+ chomp: function(n) {
+ var elements = [];
+
+ for (var i = n; i < this.elements.length; i++) {
+ elements.push(this.elements[i]);
+ }
+
+ return Vector.create(elements);
+ },
+
+ top: function(n) {
+ var elements = [];
+
+ for (var i = 0; i < n; i++) {
+ elements.push(this.elements[i]);
+ }
+
+ return Vector.create(elements);
+ },
+
+ augment: function(elements) {
+ var newElements = this.elements;
+
+ for (var i = 0; i < elements.length; i++) {
+ newElements.push(elements[i]);
+ }
+
+ return Vector.create(newElements);
+ },
+
+ x: function(k) { return this.multiply(k); },
+
+ log: function() {
+ return Vector.log(this);
+ },
+
+ elementDivide: function(vector) {
+ return this.map(function(v, i) {
+ return v / vector.e(i);
+ });
+ },
+
+ product: function() {
+ var p = 1;
+
+ this.map(function(v) {
+ p *= v;
+ });
+
+ return p;
+ },
+
+ // Returns the scalar product of the vector with the argument
+ // Both vectors must have equal dimensionality
+ dot: function(vector) {
+ var V = vector.elements || vector;
+ var i, product = 0, n = this.elements.length;
+ if (n != V.length) { return null; }
+ while (n--) { product += this.elements[n] * V[n]; }
+ return product;
+ },
+
+ // Returns the vector product of the vector with the argument
+ // Both vectors must have dimensionality 3
+ cross: function(vector) {
+ var B = vector.elements || vector;
+ if (this.elements.length != 3 || B.length != 3) { return null; }
+ var A = this.elements;
+ return Vector.create([
+ (A[1] * B[2]) - (A[2] * B[1]),
+ (A[2] * B[0]) - (A[0] * B[2]),
+ (A[0] * B[1]) - (A[1] * B[0])
+ ]);
+ },
+
+ // Returns the (absolute) largest element of the vector
+ max: function() {
+ var m = 0, i = this.elements.length;
+ while (i--) {
+ if (Math.abs(this.elements[i]) > Math.abs(m)) { m = this.elements[i]; }
+ }
+ return m;
+ },
+
+
+ maxIndex: function() {
+ var m = 0, i = this.elements.length;
+ var maxIndex = -1;
+
+ while (i--) {
+ if (Math.abs(this.elements[i]) > Math.abs(m)) {
+ m = this.elements[i];
+ maxIndex = i + 1;
+ }
+ }
+
+ return maxIndex;
+ },
+
+
+ // Returns the index of the first match found
+ indexOf: function(x) {
+ var index = null, n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ if (index === null && this.elements[i] == x) {
+ index = i + 1;
+ }
+ }
+ return index;
+ },
+
+ // Returns a diagonal matrix with the vector's elements as its diagonal elements
+ toDiagonalMatrix: function() {
+ return Matrix.Diagonal(this.elements);
+ },
+
+ // Returns the result of rounding the elements of the vector
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Transpose a Vector, return a 1xn Matrix
+ transpose: function() {
+ var rows = this.elements.length;
+ var elements = [];
+
+ for (var i = 0; i < rows; i++) {
+ elements.push([this.elements[i]]);
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns a copy of the vector with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(y) {
+ return (Math.abs(y - x) <= Sylvester.precision) ? x : y;
+ });
+ },
+
+ // Returns the vector's distance from the argument, when considered as a point in space
+ distanceFrom: function(obj) {
+ if (obj.anchor || (obj.start && obj.end)) { return obj.distanceFrom(this); }
+ var V = obj.elements || obj;
+ if (V.length != this.elements.length) { return null; }
+ var sum = 0, part;
+ this.each(function(x, i) {
+ part = x - V[i - 1];
+ sum += part * part;
+ });
+ return Math.sqrt(sum);
+ },
+
+ // Returns true if the vector is point on the given line
+ liesOn: function(line) {
+ return line.contains(this);
+ },
+
+ // Return true iff the vector is a point in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Rotates the vector about the given object. The object should be a
+ // point if the vector is 2D, and a line if it is 3D. Be careful with line directions!
+ rotate: function(t, obj) {
+ var V, R = null, x, y, z;
+ if (t.determinant) { R = t.elements; }
+ switch (this.elements.length) {
+ case 2:
+ V = obj.elements || obj;
+ if (V.length != 2) { return null; }
+ if (!R) { R = Matrix.Rotation(t).elements; }
+ x = this.elements[0] - V[0];
+ y = this.elements[1] - V[1];
+ return Vector.create([
+ V[0] + R[0][0] * x + R[0][1] * y,
+ V[1] + R[1][0] * x + R[1][1] * y
+ ]);
+ break;
+ case 3:
+ if (!obj.direction) { return null; }
+ var C = obj.pointClosestTo(this).elements;
+ if (!R) { R = Matrix.Rotation(t, obj.direction).elements; }
+ x = this.elements[0] - C[0];
+ y = this.elements[1] - C[1];
+ z = this.elements[2] - C[2];
+ return Vector.create([
+ C[0] + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C[1] + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C[2] + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ]);
+ break;
+ default:
+ return null;
+ }
+ },
+
+ // Returns the result of reflecting the point in the given point, line or plane
+ reflectionIn: function(obj) {
+ if (obj.anchor) {
+ // obj is a plane or line
+ var P = this.elements.slice();
+ var C = obj.pointClosestTo(P).elements;
+ return Vector.create([C[0] + (C[0] - P[0]), C[1] + (C[1] - P[1]), C[2] + (C[2] - (P[2] || 0))]);
+ } else {
+ // obj is a point
+ var Q = obj.elements || obj;
+ if (this.elements.length != Q.length) { return null; }
+ return this.map(function(x, i) { return Q[i - 1] + (Q[i - 1] - x); });
+ }
+ },
+
+ // Utility to make sure vectors are 3D. If they are 2D, a zero z-component is added
+ to3D: function() {
+ var V = this.dup();
+ switch (V.elements.length) {
+ case 3: break;
+ case 2: V.elements.push(0); break;
+ default: return null;
+ }
+ return V;
+ },
+
+ // Returns a string representation of the vector
+ inspect: function() {
+ return '[' + this.elements.join(', ') + ']';
+ },
+
+ // Set vector's elements from an array
+ setElements: function(els) {
+ this.elements = (els.elements || els).slice();
+ return this;
+ }
+};
+
+// Constructor function
+Vector.create = function(elements) {
+ var V = new Vector();
+ return V.setElements(elements);
+};
+
+// i, j, k unit vectors
+Vector.i = Vector.create([1, 0, 0]);
+Vector.j = Vector.create([0, 1, 0]);
+Vector.k = Vector.create([0, 0, 1]);
+
+// Random vector of size n
+Vector.Random = function(n) {
+ var elements = [];
+ while (n--) { elements.push(Math.random()); }
+ return Vector.create(elements);
+};
+
+Vector.Fill = function(n, v) {
+ var elements = [];
+ while (n--) { elements.push(v); }
+ return Vector.create(elements);
+};
+
+// Vector filled with zeros
+Vector.Zero = function(n) {
+ return Vector.Fill(n, 0);
+};
+
+Vector.One = function(n) {
+ return Vector.Fill(n, 1);
+};
+
+Vector.log = function(v) {
+ return v.map(function(x) {
+ return Math.log(x);
+ });
+};
+
+module.exports = Vector;
+
+},{"./sylvester":79,"./matrix":75}],76:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+var Vector = require('./vector');
+var Matrix = require('./matrix');
+var Plane = require('./plane');
+var Sylvester = require('./sylvester');
+
+// Line class - depends on Vector, and some methods require Matrix and Plane.
+
+function Line() {}
+Line.prototype = {
+
+ // Returns true if the argument occupies the same space as the line
+ eql: function(line) {
+ return (this.isParallelTo(line) && this.contains(line.anchor));
+ },
+
+ // Returns a copy of the line
+ dup: function() {
+ return Line.create(this.anchor, this.direction);
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Line.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.direction);
+ },
+
+ // Returns true if the line is parallel to the argument. Here, 'parallel to'
+ // means that the argument's direction is either parallel or antiparallel to
+ // the line's own direction. A line is parallel to a plane if the two do not
+ // have a unique intersection.
+ isParallelTo: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.isParallelTo(this); }
+ var theta = this.direction.angleFrom(obj.direction);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision);
+ },
+
+ // Returns the line's perpendicular distance from the argument,
+ // which can be a point, a line or a plane
+ distanceFrom: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.distanceFrom(this); }
+ if (obj.direction) {
+ // obj is a line
+ if (this.isParallelTo(obj)) { return this.distanceFrom(obj.anchor); }
+ var N = this.direction.cross(obj.direction).toUnitVector().elements;
+ var A = this.anchor.elements, B = obj.anchor.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var PA1 = P[0] - A[0], PA2 = P[1] - A[1], PA3 = (P[2] || 0) - A[2];
+ var modPA = Math.sqrt(PA1*PA1 + PA2*PA2 + PA3*PA3);
+ if (modPA === 0) return 0;
+ // Assumes direction vector is normalized
+ var cosTheta = (PA1 * D[0] + PA2 * D[1] + PA3 * D[2]) / modPA;
+ var sin2 = 1 - cosTheta*cosTheta;
+ return Math.abs(modPA * Math.sqrt(sin2 < 0 ? 0 : sin2));
+ }
+ },
+
+ // Returns true iff the argument is a point on the line, or if the argument
+ // is a line segment lying within the receiver
+ contains: function(obj) {
+ if (obj.start && obj.end) { return this.contains(obj.start) && this.contains(obj.end); }
+ var dist = this.distanceFrom(obj);
+ return (dist !== null && dist <= Sylvester.precision);
+ },
+
+ // Returns the distance from the anchor of the given point. Negative values are
+ // returned for points that are in the opposite direction to the line's direction from
+ // the line's anchor point.
+ positionOf: function(point) {
+ if (!this.contains(point)) { return null; }
+ var P = point.elements || point;
+ var A = this.anchor.elements, D = this.direction.elements;
+ return (P[0] - A[0]) * D[0] + (P[1] - A[1]) * D[1] + ((P[2] || 0) - A[2]) * D[2];
+ },
+
+ // Returns true iff the line lies in the given plane
+ liesIn: function(plane) {
+ return plane.contains(this);
+ },
+
+ // Returns true iff the line has a unique point of intersection with the argument
+ intersects: function(obj) {
+ if (obj.normal) { return obj.intersects(this); }
+ return (!this.isParallelTo(obj) && this.distanceFrom(obj) <= Sylvester.precision);
+ },
+
+ // Returns the unique intersection point with the argument, if one exists
+ intersectionWith: function(obj) {
+ if (obj.normal || (obj.start && obj.end)) { return obj.intersectionWith(this); }
+ if (!this.intersects(obj)) { return null; }
+ var P = this.anchor.elements, X = this.direction.elements,
+ Q = obj.anchor.elements, Y = obj.direction.elements;
+ var X1 = X[0], X2 = X[1], X3 = X[2], Y1 = Y[0], Y2 = Y[1], Y3 = Y[2];
+ var PsubQ1 = P[0] - Q[0], PsubQ2 = P[1] - Q[1], PsubQ3 = P[2] - Q[2];
+ var XdotQsubP = - X1*PsubQ1 - X2*PsubQ2 - X3*PsubQ3;
+ var YdotPsubQ = Y1*PsubQ1 + Y2*PsubQ2 + Y3*PsubQ3;
+ var XdotX = X1*X1 + X2*X2 + X3*X3;
+ var YdotY = Y1*Y1 + Y2*Y2 + Y3*Y3;
+ var XdotY = X1*Y1 + X2*Y2 + X3*Y3;
+ var k = (XdotQsubP * YdotY / XdotX + XdotY * YdotPsubQ) / (YdotY - XdotY * XdotY);
+ return Vector.create([P[0] + k*X1, P[1] + k*X2, P[2] + k*X3]);
+ },
+
+ // Returns the point on the line that is closest to the given point or line/line segment
+ pointClosestTo: function(obj) {
+ if (obj.start && obj.end) {
+ // obj is a line segment
+ var P = obj.pointClosestTo(this);
+ return (P === null) ? null : this.pointClosestTo(P);
+ } else if (obj.direction) {
+ // obj is a line
+ if (this.intersects(obj)) { return this.intersectionWith(obj); }
+ if (this.isParallelTo(obj)) { return null; }
+ var D = this.direction.elements, E = obj.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], E1 = E[0], E2 = E[1], E3 = E[2];
+ // Create plane containing obj and the shared normal and intersect this with it
+ // Thank you: http://www.cgafaq.info/wiki/Line-line_distance
+ var x = (D3 * E1 - D1 * E3), y = (D1 * E2 - D2 * E1), z = (D2 * E3 - D3 * E2);
+ var N = [x * E3 - y * E2, y * E1 - z * E3, z * E2 - x * E1];
+ var P = Plane.create(obj.anchor, N);
+ return P.intersectionWith(this);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ if (this.contains(P)) { return Vector.create(P); }
+ var A = this.anchor.elements, D = this.direction.elements;
+ var D1 = D[0], D2 = D[1], D3 = D[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = D1 * (P[1]-A2) - D2 * (P[0]-A1), y = D2 * ((P[2] || 0) - A3) - D3 * (P[1]-A2),
+ z = D3 * (P[0]-A1) - D1 * ((P[2] || 0) - A3);
+ var V = Vector.create([D2 * x - D3 * z, D3 * y - D1 * x, D1 * z - D2 * y]);
+ var k = this.distanceFrom(P) / V.modulus();
+ return Vector.create([
+ P[0] + V.elements[0] * k,
+ P[1] + V.elements[1] * k,
+ (P[2] || 0) + V.elements[2] * k
+ ]);
+ }
+ },
+
+ // Returns a copy of the line rotated by t radians about the given line. Works by
+ // finding the argument's closest point to this line's anchor point (call this C) and
+ // rotating the anchor about C. Also rotates the line's direction about the argument's.
+ // Be careful with this - the rotation axis' direction affects the outcome!
+ rotate: function(t, line) {
+ // If we're working in 2D
+ if (typeof(line.direction) == 'undefined') { line = Line.create(line.to3D(), Vector.k); }
+ var R = Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, D = this.direction.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Line.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * D[0] + R[0][1] * D[1] + R[0][2] * D[2],
+ R[1][0] * D[0] + R[1][1] * D[1] + R[1][2] * D[2],
+ R[2][0] * D[0] + R[2][1] * D[1] + R[2][2] * D[2]
+ ]);
+ },
+
+ // Returns a copy of the line with its direction vector reversed.
+ // Useful when using lines for rotations.
+ reverse: function() {
+ return Line.create(this.anchor, this.direction.x(-1));
+ },
+
+ // Returns the line's reflection in the given point or line
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, D = this.direction.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], D1 = D[0], D2 = D[1], D3 = D[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the line's direction vector to its anchor, then mirror that in the plane
+ var AD1 = A1 + D1, AD2 = A2 + D2, AD3 = A3 + D3;
+ var Q = obj.pointClosestTo([AD1, AD2, AD3]).elements;
+ var newD = [Q[0] + (Q[0] - AD1) - newA[0], Q[1] + (Q[1] - AD2) - newA[1], Q[2] + (Q[2] - AD3) - newA[2]];
+ return Line.create(newA, newD);
+ } else if (obj.direction) {
+ // obj is a line - reflection obtained by rotating PI radians about obj
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point - just reflect the line's anchor in it
+ var P = obj.elements || obj;
+ return Line.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.direction);
+ }
+ },
+
+ // Set the line's anchor point and direction.
+ setVectors: function(anchor, direction) {
+ // Need to do this so that line's properties are not
+ // references to the arguments passed in
+ anchor = Vector.create(anchor);
+ direction = Vector.create(direction);
+ if (anchor.elements.length == 2) {anchor.elements.push(0); }
+ if (direction.elements.length == 2) { direction.elements.push(0); }
+ if (anchor.elements.length > 3 || direction.elements.length > 3) { return null; }
+ var mod = direction.modulus();
+ if (mod === 0) { return null; }
+ this.anchor = anchor;
+ this.direction = Vector.create([
+ direction.elements[0] / mod,
+ direction.elements[1] / mod,
+ direction.elements[2] / mod
+ ]);
+ return this;
+ }
+};
+
+// Constructor function
+Line.create = function(anchor, direction) {
+ var L = new Line();
+ return L.setVectors(anchor, direction);
+};
+
+// Axes
+Line.X = Line.create(Vector.Zero(3), Vector.i);
+Line.Y = Line.create(Vector.Zero(3), Vector.j);
+Line.Z = Line.create(Vector.Zero(3), Vector.k);
+
+module.exports = Line;
+
+},{"./matrix":75,"./vector":74,"./plane":77,"./sylvester":79}],77:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Plane class - depends on Vector. Some methods require Matrix and Line.
+var Vector = require('./vector');
+var Matrix = require('./matrix');
+var Line = require('./line');
+
+var Sylvester = require('./sylvester');
+
+function Plane() {}
+Plane.prototype = {
+
+ // Returns true iff the plane occupies the same space as the argument
+ eql: function(plane) {
+ return (this.contains(plane.anchor) && this.isParallelTo(plane));
+ },
+
+ // Returns a copy of the plane
+ dup: function() {
+ return Plane.create(this.anchor, this.normal);
+ },
+
+ // Returns the result of translating the plane by the given vector
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ return Plane.create([
+ this.anchor.elements[0] + V[0],
+ this.anchor.elements[1] + V[1],
+ this.anchor.elements[2] + (V[2] || 0)
+ ], this.normal);
+ },
+
+ // Returns true iff the plane is parallel to the argument. Will return true
+ // if the planes are equal, or if you give a line and it lies in the plane.
+ isParallelTo: function(obj) {
+ var theta;
+ if (obj.normal) {
+ // obj is a plane
+ theta = this.normal.angleFrom(obj.normal);
+ return (Math.abs(theta) <= Sylvester.precision || Math.abs(Math.PI - theta) <= Sylvester.precision);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.normal.isPerpendicularTo(obj.direction);
+ }
+ return null;
+ },
+
+ // Returns true iff the receiver is perpendicular to the argument
+ isPerpendicularTo: function(plane) {
+ var theta = this.normal.angleFrom(plane.normal);
+ return (Math.abs(Math.PI/2 - theta) <= Sylvester.precision);
+ },
+
+ // Returns the plane's distance from the given object (point, line or plane)
+ distanceFrom: function(obj) {
+ if (this.intersects(obj) || this.contains(obj)) { return 0; }
+ if (obj.anchor) {
+ // obj is a plane or line
+ var A = this.anchor.elements, B = obj.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - B[0]) * N[0] + (A[1] - B[1]) * N[1] + (A[2] - B[2]) * N[2]);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ return Math.abs((A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2]);
+ }
+ },
+
+ // Returns true iff the plane contains the given point or line
+ contains: function(obj) {
+ if (obj.normal) { return null; }
+ if (obj.direction) {
+ return (this.contains(obj.anchor) && this.contains(obj.anchor.add(obj.direction)));
+ } else {
+ var P = obj.elements || obj;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var diff = Math.abs(N[0]*(A[0] - P[0]) + N[1]*(A[1] - P[1]) + N[2]*(A[2] - (P[2] || 0)));
+ return (diff <= Sylvester.precision);
+ }
+ },
+
+ // Returns true iff the plane has a unique point/line of intersection with the argument
+ intersects: function(obj) {
+ if (typeof(obj.direction) == 'undefined' && typeof(obj.normal) == 'undefined') { return null; }
+ return !this.isParallelTo(obj);
+ },
+
+ // Returns the unique intersection with the argument, if one exists. The result
+ // will be a vector if a line is supplied, and a line if a plane is supplied.
+ intersectionWith: function(obj) {
+ if (!this.intersects(obj)) { return null; }
+ if (obj.direction) {
+ // obj is a line
+ var A = obj.anchor.elements, D = obj.direction.elements,
+ P = this.anchor.elements, N = this.normal.elements;
+ var multiplier = (N[0]*(P[0]-A[0]) + N[1]*(P[1]-A[1]) + N[2]*(P[2]-A[2])) / (N[0]*D[0] + N[1]*D[1] + N[2]*D[2]);
+ return Vector.create([A[0] + D[0]*multiplier, A[1] + D[1]*multiplier, A[2] + D[2]*multiplier]);
+ } else if (obj.normal) {
+ // obj is a plane
+ var direction = this.normal.cross(obj.normal).toUnitVector();
+ // To find an anchor point, we find one co-ordinate that has a value
+ // of zero somewhere on the intersection, and remember which one we picked
+ var N = this.normal.elements, A = this.anchor.elements,
+ O = obj.normal.elements, B = obj.anchor.elements;
+ var solver = Matrix.Zero(2,2), i = 0;
+ while (solver.isSingular()) {
+ i++;
+ solver = Matrix.create([
+ [ N[i%3], N[(i+1)%3] ],
+ [ O[i%3], O[(i+1)%3] ]
+ ]);
+ }
+ // Then we solve the simultaneous equations in the remaining dimensions
+ var inverse = solver.inverse().elements;
+ var x = N[0]*A[0] + N[1]*A[1] + N[2]*A[2];
+ var y = O[0]*B[0] + O[1]*B[1] + O[2]*B[2];
+ var intersection = [
+ inverse[0][0] * x + inverse[0][1] * y,
+ inverse[1][0] * x + inverse[1][1] * y
+ ];
+ var anchor = [];
+ for (var j = 1; j <= 3; j++) {
+ // This formula picks the right element from intersection by
+ // cycling depending on which element we set to zero above
+ anchor.push((i == j) ? 0 : intersection[(j + (5 - i)%3)%3]);
+ }
+ return Line.create(anchor, direction);
+ }
+ },
+
+ // Returns the point in the plane closest to the given point
+ pointClosestTo: function(point) {
+ var P = point.elements || point;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var dot = (A[0] - P[0]) * N[0] + (A[1] - P[1]) * N[1] + (A[2] - (P[2] || 0)) * N[2];
+ return Vector.create([P[0] + N[0] * dot, P[1] + N[1] * dot, (P[2] || 0) + N[2] * dot]);
+ },
+
+ // Returns a copy of the plane, rotated by t radians about the given line
+ // See notes on Line#rotate.
+ rotate: function(t, line) {
+ var R = t.determinant ? t.elements : Matrix.Rotation(t, line.direction).elements;
+ var C = line.pointClosestTo(this.anchor).elements;
+ var A = this.anchor.elements, N = this.normal.elements;
+ var C1 = C[0], C2 = C[1], C3 = C[2], A1 = A[0], A2 = A[1], A3 = A[2];
+ var x = A1 - C1, y = A2 - C2, z = A3 - C3;
+ return Plane.create([
+ C1 + R[0][0] * x + R[0][1] * y + R[0][2] * z,
+ C2 + R[1][0] * x + R[1][1] * y + R[1][2] * z,
+ C3 + R[2][0] * x + R[2][1] * y + R[2][2] * z
+ ], [
+ R[0][0] * N[0] + R[0][1] * N[1] + R[0][2] * N[2],
+ R[1][0] * N[0] + R[1][1] * N[1] + R[1][2] * N[2],
+ R[2][0] * N[0] + R[2][1] * N[1] + R[2][2] * N[2]
+ ]);
+ },
+
+ // Returns the reflection of the plane in the given point, line or plane.
+ reflectionIn: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var A = this.anchor.elements, N = this.normal.elements;
+ var A1 = A[0], A2 = A[1], A3 = A[2], N1 = N[0], N2 = N[1], N3 = N[2];
+ var newA = this.anchor.reflectionIn(obj).elements;
+ // Add the plane's normal to its anchor, then mirror that in the other plane
+ var AN1 = A1 + N1, AN2 = A2 + N2, AN3 = A3 + N3;
+ var Q = obj.pointClosestTo([AN1, AN2, AN3]).elements;
+ var newN = [Q[0] + (Q[0] - AN1) - newA[0], Q[1] + (Q[1] - AN2) - newA[1], Q[2] + (Q[2] - AN3) - newA[2]];
+ return Plane.create(newA, newN);
+ } else if (obj.direction) {
+ // obj is a line
+ return this.rotate(Math.PI, obj);
+ } else {
+ // obj is a point
+ var P = obj.elements || obj;
+ return Plane.create(this.anchor.reflectionIn([P[0], P[1], (P[2] || 0)]), this.normal);
+ }
+ },
+
+ // Sets the anchor point and normal to the plane. If three arguments are specified,
+ // the normal is calculated by assuming the three points should lie in the same plane.
+ // If only two are sepcified, the second is taken to be the normal. Normal vector is
+ // normalised before storage.
+ setVectors: function(anchor, v1, v2) {
+ anchor = Vector.create(anchor);
+ anchor = anchor.to3D(); if (anchor === null) { return null; }
+ v1 = Vector.create(v1);
+ v1 = v1.to3D(); if (v1 === null) { return null; }
+ if (typeof(v2) == 'undefined') {
+ v2 = null;
+ } else {
+ v2 = Vector.create(v2);
+ v2 = v2.to3D(); if (v2 === null) { return null; }
+ }
+ var A1 = anchor.elements[0], A2 = anchor.elements[1], A3 = anchor.elements[2];
+ var v11 = v1.elements[0], v12 = v1.elements[1], v13 = v1.elements[2];
+ var normal, mod;
+ if (v2 !== null) {
+ var v21 = v2.elements[0], v22 = v2.elements[1], v23 = v2.elements[2];
+ normal = Vector.create([
+ (v12 - A2) * (v23 - A3) - (v13 - A3) * (v22 - A2),
+ (v13 - A3) * (v21 - A1) - (v11 - A1) * (v23 - A3),
+ (v11 - A1) * (v22 - A2) - (v12 - A2) * (v21 - A1)
+ ]);
+ mod = normal.modulus();
+ if (mod === 0) { return null; }
+ normal = Vector.create([normal.elements[0] / mod, normal.elements[1] / mod, normal.elements[2] / mod]);
+ } else {
+ mod = Math.sqrt(v11*v11 + v12*v12 + v13*v13);
+ if (mod === 0) { return null; }
+ normal = Vector.create([v1.elements[0] / mod, v1.elements[1] / mod, v1.elements[2] / mod]);
+ }
+ this.anchor = anchor;
+ this.normal = normal;
+ return this;
+ }
+};
+
+// Constructor function
+Plane.create = function(anchor, v1, v2) {
+ var P = new Plane();
+ return P.setVectors(anchor, v1, v2);
+};
+
+// X-Y-Z planes
+Plane.XY = Plane.create(Vector.Zero(3), Vector.k);
+Plane.YZ = Plane.create(Vector.Zero(3), Vector.i);
+Plane.ZX = Plane.create(Vector.Zero(3), Vector.j);
+Plane.YX = Plane.XY; Plane.ZY = Plane.YZ; Plane.XZ = Plane.ZX;
+
+// Returns the plane containing the given points (can be arrays as
+// well as vectors). If the points are not coplanar, returns null.
+Plane.fromPoints = function(points) {
+ var np = points.length, list = [], i, P, n, N, A, B, C, D, theta, prevN, totalN = Vector.Zero(3);
+ for (i = 0; i < np; i++) {
+ P = Vector.create(points[i]).to3D();
+ if (P === null) { return null; }
+ list.push(P);
+ n = list.length;
+ if (n > 2) {
+ // Compute plane normal for the latest three points
+ A = list[n-1].elements; B = list[n-2].elements; C = list[n-3].elements;
+ N = Vector.create([
+ (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),
+ (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),
+ (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])
+ ]).toUnitVector();
+ if (n > 3) {
+ // If the latest normal is not (anti)parallel to the previous one, we've strayed off the plane.
+ // This might be a slightly long-winded way of doing things, but we need the sum of all the normals
+ // to find which way the plane normal should point so that the points form an anticlockwise list.
+ theta = N.angleFrom(prevN);
+ if (theta !== null) {
+ if (!(Math.abs(theta) <= Sylvester.precision || Math.abs(theta - Math.PI) <= Sylvester.precision)) { return null; }
+ }
+ }
+ totalN = totalN.add(N);
+ prevN = N;
+ }
+ }
+ // We need to add in the normals at the start and end points, which the above misses out
+ A = list[1].elements; B = list[0].elements; C = list[n-1].elements; D = list[n-2].elements;
+ totalN = totalN.add(Vector.create([
+ (A[1] - B[1]) * (C[2] - B[2]) - (A[2] - B[2]) * (C[1] - B[1]),
+ (A[2] - B[2]) * (C[0] - B[0]) - (A[0] - B[0]) * (C[2] - B[2]),
+ (A[0] - B[0]) * (C[1] - B[1]) - (A[1] - B[1]) * (C[0] - B[0])
+ ]).toUnitVector()).add(Vector.create([
+ (B[1] - C[1]) * (D[2] - C[2]) - (B[2] - C[2]) * (D[1] - C[1]),
+ (B[2] - C[2]) * (D[0] - C[0]) - (B[0] - C[0]) * (D[2] - C[2]),
+ (B[0] - C[0]) * (D[1] - C[1]) - (B[1] - C[1]) * (D[0] - C[0])
+ ]).toUnitVector());
+ return Plane.create(list[0], totalN);
+};
+
+module.exports = Plane;
+
+},{"./vector":74,"./matrix":75,"./line":76,"./sylvester":79}],78:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Line.Segment class - depends on Line and its dependencies.
+
+var Line = require('./line');
+var Vector = require('./vector');
+
+Line.Segment = function() {};
+Line.Segment.prototype = {
+
+ // Returns true iff the line segment is equal to the argument
+ eql: function(segment) {
+ return (this.start.eql(segment.start) && this.end.eql(segment.end)) ||
+ (this.start.eql(segment.end) && this.end.eql(segment.start));
+ },
+
+ // Returns a copy of the line segment
+ dup: function() {
+ return Line.Segment.create(this.start, this.end);
+ },
+
+ // Returns the length of the line segment
+ length: function() {
+ var A = this.start.elements, B = this.end.elements;
+ var C1 = B[0] - A[0], C2 = B[1] - A[1], C3 = B[2] - A[2];
+ return Math.sqrt(C1*C1 + C2*C2 + C3*C3);
+ },
+
+ // Returns the line segment as a vector equal to its
+ // end point relative to its endpoint
+ toVector: function() {
+ var A = this.start.elements, B = this.end.elements;
+ return Vector.create([B[0] - A[0], B[1] - A[1], B[2] - A[2]]);
+ },
+
+ // Returns the segment's midpoint as a vector
+ midpoint: function() {
+ var A = this.start.elements, B = this.end.elements;
+ return Vector.create([(B[0] + A[0])/2, (B[1] + A[1])/2, (B[2] + A[2])/2]);
+ },
+
+ // Returns the plane that bisects the segment
+ bisectingPlane: function() {
+ return Plane.create(this.midpoint(), this.toVector());
+ },
+
+ // Returns the result of translating the line by the given vector/array
+ translate: function(vector) {
+ var V = vector.elements || vector;
+ var S = this.start.elements, E = this.end.elements;
+ return Line.Segment.create(
+ [S[0] + V[0], S[1] + V[1], S[2] + (V[2] || 0)],
+ [E[0] + V[0], E[1] + V[1], E[2] + (V[2] || 0)]
+ );
+ },
+
+ // Returns true iff the line segment is parallel to the argument. It simply forwards
+ // the method call onto its line property.
+ isParallelTo: function(obj) {
+ return this.line.isParallelTo(obj);
+ },
+
+ // Returns the distance between the argument and the line segment's closest point to the argument
+ distanceFrom: function(obj) {
+ var P = this.pointClosestTo(obj);
+ return (P === null) ? null : P.distanceFrom(obj);
+ },
+
+ // Returns true iff the given point lies on the segment
+ contains: function(obj) {
+ if (obj.start && obj.end) { return this.contains(obj.start) && this.contains(obj.end); }
+ var P = (obj.elements || obj).slice();
+ if (P.length == 2) { P.push(0); }
+ if (this.start.eql(P)) { return true; }
+ var S = this.start.elements;
+ var V = Vector.create([S[0] - P[0], S[1] - P[1], S[2] - (P[2] || 0)]);
+ var vect = this.toVector();
+ return V.isAntiparallelTo(vect) && V.modulus() <= vect.modulus();
+ },
+
+ // Returns true iff the line segment intersects the argument
+ intersects: function(obj) {
+ return (this.intersectionWith(obj) !== null);
+ },
+
+ // Returns the unique point of intersection with the argument
+ intersectionWith: function(obj) {
+ if (!this.line.intersects(obj)) { return null; }
+ var P = this.line.intersectionWith(obj);
+ return (this.contains(P) ? P : null);
+ },
+
+ // Returns the point on the line segment closest to the given object
+ pointClosestTo: function(obj) {
+ if (obj.normal) {
+ // obj is a plane
+ var V = this.line.intersectionWith(obj);
+ if (V === null) { return null; }
+ return this.pointClosestTo(V);
+ } else {
+ // obj is a line (segment) or point
+ var P = this.line.pointClosestTo(obj);
+ if (P === null) { return null; }
+ if (this.contains(P)) { return P; }
+ return (this.line.positionOf(P) < 0 ? this.start : this.end).dup();
+ }
+ },
+
+ // Set the start and end-points of the segment
+ setPoints: function(startPoint, endPoint) {
+ startPoint = Vector.create(startPoint).to3D();
+ endPoint = Vector.create(endPoint).to3D();
+ if (startPoint === null || endPoint === null) { return null; }
+ this.line = Line.create(startPoint, endPoint.subtract(startPoint));
+ this.start = startPoint;
+ this.end = endPoint;
+ return this;
+ }
+};
+
+// Constructor function
+Line.Segment.create = function(v1, v2) {
+ var S = new Line.Segment();
+ return S.setPoints(v1, v2);
+};
+
+module.exports = Line.Segment;
+
+},{"./line":76,"./vector":74}],75:[function(require,module,exports){
+// Copyright (c) 2011, Chris Umbel, James Coglan
+// Matrix class - depends on Vector.
+
+var fs = require('fs');
+var Sylvester = require('./sylvester');
+var Vector = require('./vector');
+
+// augment a matrix M with identity rows/cols
+function identSize(M, m, n, k) {
+ var e = M.elements;
+ var i = k - 1;
+
+ while(i--) {
+ var row = [];
+
+ for(var j = 0; j < n; j++)
+ row.push(j == i ? 1 : 0);
+
+ e.unshift(row);
+ }
+
+ for(var i = k - 1; i < m; i++) {
+ while(e[i].length < n)
+ e[i].unshift(0);
+ }
+
+ return $M(e);
+}
+
+function pca(X) {
+ var Sigma = X.transpose().x(X).x(1 / X.rows());
+ var svd = Sigma.svd();
+ return {U: svd.U, S: svd.S};
+}
+
+// singular value decomposition in pure javascript
+function svdJs() {
+ var A = this;
+ var V = Matrix.I(A.rows());
+ var S = A.transpose();
+ var U = Matrix.I(A.cols());
+ var err = Number.MAX_VALUE;
+ var i = 0;
+ var maxLoop = 100;
+
+ while(err > 2.2737e-13 && i < maxLoop) {
+ var qr = S.transpose().qrJs();
+ S = qr.R;
+ V = V.x(qr.Q);
+ qr = S.transpose().qrJs();
+ U = U.x(qr.Q);
+ S = qr.R;
+
+ var e = S.triu(1).unroll().norm();
+ var f = S.diagonal().norm();
+
+ if(f == 0)
+ f = 1;
+
+ err = e / f;
+
+ i++;
+ }
+
+ var ss = S.diagonal();
+ var s = [];
+
+ for(var i = 1; i <= ss.cols(); i++) {
+ var ssn = ss.e(i);
+ s.push(Math.abs(ssn));
+
+ if(ssn < 0) {
+ for(var j = 0; j < U.rows(); j++) {
+ V.elements[j][i - 1] = -(V.elements[j][i - 1]);
+ }
+ }
+ }
+
+ return {U: U, S: $V(s).toDiagonalMatrix(), V: V};
+}
+
+// singular value decomposition using LAPACK
+function svdPack() {
+ var result = lapack.sgesvd('A', 'A', this.elements);
+
+ return {
+ U: $M(result.U),
+ S: $M(result.S).column(1).toDiagonalMatrix(),
+ V: $M(result.VT).transpose()
+ };
+}
+
+// QR decomposition in pure javascript
+function qrJs() {
+ var m = this.rows();
+ var n = this.cols();
+ var Q = Matrix.I(m);
+ var A = this;
+
+ for(var k = 1; k < Math.min(m, n); k++) {
+ var ak = A.slice(k, 0, k, k).col(1);
+ var oneZero = [1];
+
+ while(oneZero.length <= m - k)
+ oneZero.push(0);
+
+ oneZero = $V(oneZero);
+ var vk = ak.add(oneZero.x(ak.norm() * Math.sign(ak.e(1))));
+ var Vk = $M(vk);
+ var Hk = Matrix.I(m - k + 1).subtract(Vk.x(2).x(Vk.transpose()).div(Vk.transpose().x(Vk).e(1, 1)));
+ var Qk = identSize(Hk, m, n, k);
+ A = Qk.x(A);
+ // slow way to compute Q
+ Q = Q.x(Qk);
+ }
+
+ return {Q: Q, R: A};
+}
+
+// QR decomposition using LAPACK
+function qrPack() {
+ var qr = lapack.qr(this.elements);
+
+ return {
+ Q: $M(qr.Q),
+ R: $M(qr.R)
+ };
+}
+
+function Matrix() {}
+Matrix.prototype = {
+ // solve a system of linear equations (work in progress)
+ solve: function(b) {
+ var lu = this.lu();
+ b = lu.P.x(b);
+ var y = lu.L.forwardSubstitute(b);
+ var x = lu.U.backSubstitute(y);
+ return lu.P.x(x);
+ //return this.inv().x(b);
+ },
+
+ // project a matrix onto a lower dim
+ pcaProject: function(k, U) {
+ var U = U || pca(this).U;
+ var Ureduce= U.slice(1, U.rows(), 1, k);
+ return {Z: this.x(Ureduce), U: U};
+ },
+
+ // recover a matrix to a higher dimension
+ pcaRecover: function(U) {
+ var k = this.cols();
+ var Ureduce = U.slice(1, U.rows(), 1, k);
+ return this.x(Ureduce.transpose());
+ },
+
+ // grab the upper triangular part of the matrix
+ triu: function(k) {
+ if(!k)
+ k = 0;
+
+ return this.map(function(x, i, j) {
+ return j - i >= k ? x : 0;
+ });
+ },
+
+ // unroll a matrix into a vector
+ unroll: function() {
+ var v = [];
+
+ for(var i = 1; i <= this.cols(); i++) {
+ for(var j = 1; j <= this.rows(); j++) {
+ v.push(this.e(j, i));
+ }
+ }
+
+ return $V(v);
+ },
+
+ // return a sub-block of the matrix
+ slice: function(startRow, endRow, startCol, endCol) {
+ var x = [];
+
+ if(endRow == 0)
+ endRow = this.rows();
+
+ if(endCol == 0)
+ endCol = this.cols();
+
+ for(i = startRow; i <= endRow; i++) {
+ var row = [];
+
+ for(j = startCol; j <= endCol; j++) {
+ row.push(this.e(i, j));
+ }
+
+ x.push(row);
+ }
+
+ return $M(x);
+ },
+
+ // Returns element (i,j) of the matrix
+ e: function(i,j) {
+ if (i < 1 || i > this.elements.length || j < 1 || j > this.elements[0].length) { return null; }
+ return this.elements[i - 1][j - 1];
+ },
+
+ // Returns row k of the matrix as a vector
+ row: function(i) {
+ if (i > this.elements.length) { return null; }
+ return $V(this.elements[i - 1]);
+ },
+
+ // Returns column k of the matrix as a vector
+ col: function(j) {
+ if (j > this.elements[0].length) { return null; }
+ var col = [], n = this.elements.length;
+ for (var i = 0; i < n; i++) { col.push(this.elements[i][j - 1]); }
+ return $V(col);
+ },
+
+ // Returns the number of rows/columns the matrix has
+ dimensions: function() {
+ return {rows: this.elements.length, cols: this.elements[0].length};
+ },
+
+ // Returns the number of rows in the matrix
+ rows: function() {
+ return this.elements.length;
+ },
+
+ // Returns the number of columns in the matrix
+ cols: function() {
+ return this.elements[0].length;
+ },
+
+ approxEql: function(matrix) {
+ return this.eql(matrix, Sylvester.approxPrecision);
+ },
+
+ // Returns true iff the matrix is equal to the argument. You can supply
+ // a vector as the argument, in which case the receiver must be a
+ // one-column matrix equal to the vector.
+ eql: function(matrix, precision) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (this.elements.length != M.length ||
+ this.elements[0].length != M[0].length) { return false; }
+ var i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) { j = nj;
+ while (j--) {
+ if (Math.abs(this.elements[i][j] - M[i][j]) > (precision || Sylvester.precision)) { return false; }
+ }
+ }
+ return true;
+ },
+
+ // Returns a copy of the matrix
+ dup: function() {
+ return Matrix.create(this.elements);
+ },
+
+ // Maps the matrix to another matrix (of the same dimensions) according to the given function
+ map: function(fn) {
+ var els = [], i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) { j = nj;
+ els[i] = [];
+ while (j--) {
+ els[i][j] = fn(this.elements[i][j], i + 1, j + 1);
+ }
+ }
+ return Matrix.create(els);
+ },
+
+ // Returns true iff the argument has the same dimensions as the matrix
+ isSameSizeAs: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ return (this.elements.length == M.length &&
+ this.elements[0].length == M[0].length);
+ },
+
+ // Returns the result of adding the argument to the matrix
+ add: function(matrix) {
+ if(typeof(matrix) == 'number') {
+ return this.map(function(x, i, j) { return x + matrix});
+ } else {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x + M[i - 1][j - 1]; });
+ }
+ },
+
+ // Returns the result of subtracting the argument from the matrix
+ subtract: function(matrix) {
+ if(typeof(matrix) == 'number') {
+ return this.map(function(x, i, j) { return x - matrix});
+ } else {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ if (!this.isSameSizeAs(M)) { return null; }
+ return this.map(function(x, i, j) { return x - M[i - 1][j - 1]; });
+ }
+ },
+
+ // Returns true iff the matrix can multiply the argument from the left
+ canMultiplyFromLeft: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ // this.columns should equal matrix.rows
+ return (this.elements[0].length == M.length);
+ },
+
+ // Returns the result of a multiplication-style operation the matrix from the right by the argument.
+ // If the argument is a scalar then just operate on all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ mulOp: function(matrix, op) {
+ if (!matrix.elements) {
+ return this.map(function(x) { return op(x, matrix); });
+ }
+
+ var returnVector = matrix.modulus ? true : false;
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined')
+ M = Matrix.create(M).elements;
+ if (!this.canMultiplyFromLeft(M))
+ return null;
+ var e = this.elements, rowThis, rowElem, elements = [],
+ sum, m = e.length, n = M[0].length, o = e[0].length, i = m, j, k;
+
+ while (i--) {
+ rowElem = [];
+ rowThis = e[i];
+ j = n;
+
+ while (j--) {
+ sum = 0;
+ k = o;
+
+ while (k--) {
+ sum += op(rowThis[k], M[k][j]);
+ }
+
+ rowElem[j] = sum;
+ }
+
+ elements[i] = rowElem;
+ }
+
+ var M = Matrix.create(elements);
+ return returnVector ? M.col(1) : M;
+ },
+
+ // Returns the result of dividing the matrix from the right by the argument.
+ // If the argument is a scalar then just divide all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ div: function(matrix) {
+ return this.mulOp(matrix, function(x, y) { return x / y});
+ },
+
+ // Returns the result of multiplying the matrix from the right by the argument.
+ // If the argument is a scalar then just multiply all the elements. If the argument is
+ // a vector, a vector is returned, which saves you having to remember calling
+ // col(1) on the result.
+ multiply: function(matrix) {
+ return this.mulOp(matrix, function(x, y) { return x * y});
+ },
+
+ x: function(matrix) { return this.multiply(matrix); },
+
+ elementMultiply: function(v) {
+ return this.map(function(k, i, j) {
+ return v.e(i, j) * k;
+ });
+ },
+
+ // sum all elements in the matrix
+ sum: function() {
+ var sum = 0;
+
+ this.map(function(x) { sum += x;});
+
+ return sum;
+ },
+
+ // Returns a Vector of each colum averaged.
+ mean: function() {
+ var dim = this.dimensions();
+ var r = [];
+ for (var i = 1; i <= dim.cols; i++) {
+ r.push(this.col(i).sum() / dim.rows);
+ }
+ return $V(r);
+ },
+
+ column: function(n) {
+ return this.col(n);
+ },
+
+ // element-wise log
+ log: function() {
+ return this.map(function(x) { return Math.log(x); });
+ },
+
+ // Returns a submatrix taken from the matrix
+ // Argument order is: start row, start col, nrows, ncols
+ // Element selection wraps if the required index is outside the matrix's bounds, so you could
+ // use this to perform row/column cycling or copy-augmenting.
+ minor: function(a, b, c, d) {
+ var elements = [], ni = c, i, nj, j;
+ var rows = this.elements.length, cols = this.elements[0].length;
+ while (ni--) {
+ i = c - ni - 1;
+ elements[i] = [];
+ nj = d;
+ while (nj--) {
+ j = d - nj - 1;
+ elements[i][j] = this.elements[(a + i - 1) % rows][(b + j - 1) % cols];
+ }
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns the transpose of the matrix
+ transpose: function() {
+ var rows = this.elements.length, i, cols = this.elements[0].length, j;
+ var elements = [], i = cols;
+ while (i--) {
+ j = rows;
+ elements[i] = [];
+ while (j--) {
+ elements[i][j] = this.elements[j][i];
+ }
+ }
+ return Matrix.create(elements);
+ },
+
+ // Returns true iff the matrix is square
+ isSquare: function() {
+ return (this.elements.length == this.elements[0].length);
+ },
+
+ // Returns the (absolute) largest element of the matrix
+ max: function() {
+ var m = 0, i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) {
+ j = nj;
+ while (j--) {
+ if (Math.abs(this.elements[i][j]) > Math.abs(m)) { m = this.elements[i][j]; }
+ }
+ }
+ return m;
+ },
+
+ // Returns the indeces of the first match found by reading row-by-row from left to right
+ indexOf: function(x) {
+ var index = null, ni = this.elements.length, i, nj = this.elements[0].length, j;
+ for (i = 0; i < ni; i++) {
+ for (j = 0; j < nj; j++) {
+ if (this.elements[i][j] == x) { return {i: i + 1, j: j + 1}; }
+ }
+ }
+ return null;
+ },
+
+ // If the matrix is square, returns the diagonal elements as a vector.
+ // Otherwise, returns null.
+ diagonal: function() {
+ if (!this.isSquare) { return null; }
+ var els = [], n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ els.push(this.elements[i][i]);
+ }
+ return $V(els);
+ },
+
+ // Make the matrix upper (right) triangular by Gaussian elimination.
+ // This method only adds multiples of rows to other rows. No rows are
+ // scaled up or switched, and the determinant is preserved.
+ toRightTriangular: function() {
+ var M = this.dup(), els;
+ var n = this.elements.length, i, j, np = this.elements[0].length, p;
+ for (i = 0; i < n; i++) {
+ if (M.elements[i][i] == 0) {
+ for (j = i + 1; j < n; j++) {
+ if (M.elements[j][i] != 0) {
+ els = [];
+ for (p = 0; p < np; p++) { els.push(M.elements[i][p] + M.elements[j][p]); }
+ M.elements[i] = els;
+ break;
+ }
+ }
+ }
+ if (M.elements[i][i] != 0) {
+ for (j = i + 1; j < n; j++) {
+ var multiplier = M.elements[j][i] / M.elements[i][i];
+ els = [];
+ for (p = 0; p < np; p++) {
+ // Elements with column numbers up to an including the number
+ // of the row that we're subtracting can safely be set straight to
+ // zero, since that's the point of this routine and it avoids having
+ // to loop over and correct rounding errors later
+ els.push(p <= i ? 0 : M.elements[j][p] - M.elements[i][p] * multiplier);
+ }
+ M.elements[j] = els;
+ }
+ }
+ }
+ return M;
+ },
+
+ toUpperTriangular: function() { return this.toRightTriangular(); },
+
+ // Returns the determinant for square matrices
+ determinant: function() {
+ if (!this.isSquare()) { return null; }
+ if (this.cols == 1 && this.rows == 1) { return this.row(1); }
+ if (this.cols == 0 && this.rows == 0) { return 1; }
+ var M = this.toRightTriangular();
+ var det = M.elements[0][0], n = M.elements.length;
+ for (var i = 1; i < n; i++) {
+ det = det * M.elements[i][i];
+ }
+ return det;
+ },
+ det: function() { return this.determinant(); },
+
+ // Returns true iff the matrix is singular
+ isSingular: function() {
+ return (this.isSquare() && this.determinant() === 0);
+ },
+
+ // Returns the trace for square matrices
+ trace: function() {
+ if (!this.isSquare()) { return null; }
+ var tr = this.elements[0][0], n = this.elements.length;
+ for (var i = 1; i < n; i++) {
+ tr += this.elements[i][i];
+ }
+ return tr;
+ },
+
+ tr: function() { return this.trace(); },
+
+ // Returns the rank of the matrix
+ rank: function() {
+ var M = this.toRightTriangular(), rank = 0;
+ var i = this.elements.length, nj = this.elements[0].length, j;
+ while (i--) {
+ j = nj;
+ while (j--) {
+ if (Math.abs(M.elements[i][j]) > Sylvester.precision) { rank++; break; }
+ }
+ }
+ return rank;
+ },
+
+ rk: function() { return this.rank(); },
+
+ // Returns the result of attaching the given argument to the right-hand side of the matrix
+ augment: function(matrix) {
+ var M = matrix.elements || matrix;
+ if (typeof(M[0][0]) == 'undefined') { M = Matrix.create(M).elements; }
+ var T = this.dup(), cols = T.elements[0].length;
+ var i = T.elements.length, nj = M[0].length, j;
+ if (i != M.length) { return null; }
+ while (i--) {
+ j = nj;
+ while (j--) {
+ T.elements[i][cols + j] = M[i][j];
+ }
+ }
+ return T;
+ },
+
+ // Returns the inverse (if one exists) using Gauss-Jordan
+ inverse: function() {
+ if (!this.isSquare() || this.isSingular()) { return null; }
+ var n = this.elements.length, i = n, j;
+ var M = this.augment(Matrix.I(n)).toRightTriangular();
+ var np = M.elements[0].length, p, els, divisor;
+ var inverse_elements = [], new_element;
+ // Matrix is non-singular so there will be no zeros on the diagonal
+ // Cycle through rows from last to first
+ while (i--) {
+ // First, normalise diagonal elements to 1
+ els = [];
+ inverse_elements[i] = [];
+ divisor = M.elements[i][i];
+ for (p = 0; p < np; p++) {
+ new_element = M.elements[i][p] / divisor;
+ els.push(new_element);
+ // Shuffle off the current row of the right hand side into the results
+ // array as it will not be modified by later runs through this loop
+ if (p >= n) { inverse_elements[i].push(new_element); }
+ }
+ M.elements[i] = els;
+ // Then, subtract this row from those above it to
+ // give the identity matrix on the left hand side
+ j = i;
+ while (j--) {
+ els = [];
+ for (p = 0; p < np; p++) {
+ els.push(M.elements[j][p] - M.elements[i][p] * M.elements[j][i]);
+ }
+ M.elements[j] = els;
+ }
+ }
+ return Matrix.create(inverse_elements);
+ },
+
+ inv: function() { return this.inverse(); },
+
+ // Returns the result of rounding all the elements
+ round: function() {
+ return this.map(function(x) { return Math.round(x); });
+ },
+
+ // Returns a copy of the matrix with elements set to the given value if they
+ // differ from it by less than Sylvester.precision
+ snapTo: function(x) {
+ return this.map(function(p) {
+ return (Math.abs(p - x) <= Sylvester.precision) ? x : p;
+ });
+ },
+
+ // Returns a string representation of the matrix
+ inspect: function() {
+ var matrix_rows = [];
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ matrix_rows.push($V(this.elements[i]).inspect());
+ }
+ return matrix_rows.join('\n');
+ },
+
+ // Returns a array representation of the matrix
+ toArray: function() {
+ var matrix_rows = [];
+ var n = this.elements.length;
+ for (var i = 0; i < n; i++) {
+ matrix_rows.push(this.elements[i]);
+ }
+ return matrix_rows;
+ },
+
+
+ // Set the matrix's elements from an array. If the argument passed
+ // is a vector, the resulting matrix will be a single column.
+ setElements: function(els) {
+ var i, j, elements = els.elements || els;
+ if (typeof(elements[0][0]) != 'undefined') {
+ i = elements.length;
+ this.elements = [];
+ while (i--) {
+ j = elements[i].length;
+ this.elements[i] = [];
+ while (j--) {
+ this.elements[i][j] = elements[i][j];
+ }
+ }
+ return this;
+ }
+ var n = elements.length;
+ this.elements = [];
+ for (i = 0; i < n; i++) {
+ this.elements.push([elements[i]]);
+ }
+ return this;
+ },
+
+ // return the indexes of the columns with the largest value
+ // for each row
+ maxColumnIndexes: function() {
+ var maxes = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var max = null;
+ var maxIndex = -1;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(max === null || this.e(i, j) > max) {
+ max = this.e(i, j);
+ maxIndex = j;
+ }
+ }
+
+ maxes.push(maxIndex);
+ }
+
+ return $V(maxes);
+ },
+
+ // return the largest values in each row
+ maxColumns: function() {
+ var maxes = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var max = null;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(max === null || this.e(i, j) > max) {
+ max = this.e(i, j);
+ }
+ }
+
+ maxes.push(max);
+ }
+
+ return $V(maxes);
+ },
+
+ // return the indexes of the columns with the smallest values
+ // for each row
+ minColumnIndexes: function() {
+ var mins = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var min = null;
+ var minIndex = -1;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(min === null || this.e(i, j) < min) {
+ min = this.e(i, j);
+ minIndex = j;
+ }
+ }
+
+ mins.push(minIndex);
+ }
+
+ return $V(mins);
+ },
+
+ // return the smallest values in each row
+ minColumns: function() {
+ var mins = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var min = null;
+
+ for(var j = 1; j <= this.cols(); j++) {
+ if(min === null || this.e(i, j) < min) {
+ min = this.e(i, j);
+ }
+ }
+
+ mins.push(min);
+ }
+
+ return $V(mins);
+ },
+
+ // perorm a partial pivot on the matrix. essentially move the largest
+ // row below-or-including the pivot and replace the pivot's row with it.
+ // a pivot matrix is returned so multiplication can perform the transform.
+ partialPivot: function(k, j, P, A, L) {
+ var maxIndex = 0;
+ var maxValue = 0;
+
+ for(var i = k; i <= A.rows(); i++) {
+ if(Math.abs(A.e(i, j)) > maxValue) {
+ maxValue = Math.abs(A.e(k, j));
+ maxIndex = i;
+ }
+ }
+
+ if(maxIndex != k) {
+ var tmp = A.elements[k - 1];
+ A.elements[k - 1] = A.elements[maxIndex - 1];
+ A.elements[maxIndex - 1] = tmp;
+
+ P.elements[k - 1][k - 1] = 0;
+ P.elements[k - 1][maxIndex - 1] = 1;
+ P.elements[maxIndex - 1][maxIndex - 1] = 0;
+ P.elements[maxIndex - 1][k - 1] = 1;
+ }
+
+ return P;
+ },
+
+ // solve lower-triangular matrix * x = b via forward substitution
+ forwardSubstitute: function(b) {
+ var xa = [];
+
+ for(var i = 1; i <= this.rows(); i++) {
+ var w = 0;
+
+ for(var j = 1; j < i; j++) {
+ w += this.e(i, j) * xa[j - 1];
+ }
+
+ xa.push((b.e(i) - w) / this.e(i, i));
+ }
+
+ return $V(xa);
+ },
+
+ // solve an upper-triangular matrix * x = b via back substitution
+ backSubstitute: function(b) {
+ var xa = [];
+
+ for(var i = this.rows(); i > 0; i--) {
+ var w = 0;
+
+ for(var j = this.cols(); j > i; j--) {
+ w += this.e(i, j) * xa[this.rows() - j];
+ }
+
+ xa.push((b.e(i) - w) / this.e(i, i));
+ }
+
+ return $V(xa.reverse());
+ },
+
+ luPack: luPack,
+ luJs: luJs,
+ svdJs: svdJs,
+ svdPack: svdPack,
+ qrJs: qrJs,
+ qrPack: qrPack
+};
+
+// LU factorization from LAPACK
+function luPack() {
+ var lu = lapack.lu(this.elements);
+ return {
+ L: $M(lu.L),
+ U: $M(lu.U),
+ P: $M(lu.P)
+ // don't pass back IPIV
+ };
+}
+
+var tolerance = 1.4901e-08;
+
+// pure Javascript LU factorization
+function luJs() {
+ var A = this.dup();
+ var L = Matrix.I(A.rows());
+ var P = Matrix.I(A.rows());
+ var U = Matrix.Zeros(A.rows(), A.cols());
+ var p = 1;
+
+ for(var k = 1; k <= Math.min(A.cols(), A.rows()); k++) {
+ P = A.partialPivot(k, p, P, A, L);
+
+ for(var i = k + 1; i <= A.rows(); i++) {
+ var l = A.e(i, p) / A.e(k, p);
+ L.elements[i - 1][k - 1] = l;
+
+ for(var j = k + 1 ; j <= A.cols(); j++) {
+ A.elements[i - 1][j - 1] -= A.e(k, j) * l;
+ }
+ }
+
+ for(var j = k; j <= A.cols(); j++) {
+ U.elements[k - 1][j - 1] = A.e(k, j);
+ }
+
+ if(p < A.cols())
+ p++;
+ }
+
+ return {L: L, U: U, P: P};
+}
+
+function getLapack() {
+ try {
+ return require('lapack');
+ } catch(e) {}
+}
+
+var lapack;
+
+// if node-lapack is installed use the fast, native fortran routines
+if(lapack = getLapack()) {
+ Matrix.prototype.svd = svdPack;
+ Matrix.prototype.qr = qrPack;
+ Matrix.prototype.lu = luPack;
+} else {
+ // otherwise use the slower pure Javascript versions
+ Matrix.prototype.svd = svdJs;
+ Matrix.prototype.qr = qrJs;
+ Matrix.prototype.lu = luJs;
+}
+
+// Constructor function
+Matrix.create = function(aElements, ignoreLapack) {
+ var M = new Matrix().setElements(aElements);
+ return M;
+};
+
+// Identity matrix of size n
+Matrix.I = function(n) {
+ var els = [], i = n, j;
+ while (i--) {
+ j = n;
+ els[i] = [];
+ while (j--) {
+ els[i][j] = (i == j) ? 1 : 0;
+ }
+ }
+ return Matrix.create(els);
+};
+
+Matrix.loadFile = function(file) {
+ var contents = fs.readFileSync(file, 'utf-8');
+ var matrix = [];
+
+ var rowArray = contents.split('\n');
+ for (var i = 0; i < rowArray.length; i++) {
+ var d = rowArray[i].split(',');
+ if (d.length > 1) {
+ matrix.push(d);
+ }
+ }
+
+ var M = new Matrix();
+ return M.setElements(matrix);
+};
+
+// Diagonal matrix - all off-diagonal elements are zero
+Matrix.Diagonal = function(elements) {
+ var i = elements.length;
+ var M = Matrix.I(i);
+ while (i--) {
+ M.elements[i][i] = elements[i];
+ }
+ return M;
+};
+
+// Rotation matrix about some axis. If no axis is
+// supplied, assume we're after a 2D transform
+Matrix.Rotation = function(theta, a) {
+ if (!a) {
+ return Matrix.create([
+ [Math.cos(theta), -Math.sin(theta)],
+ [Math.sin(theta), Math.cos(theta)]
+ ]);
+ }
+ var axis = a.dup();
+ if (axis.elements.length != 3) { return null; }
+ var mod = axis.modulus();
+ var x = axis.elements[0] / mod, y = axis.elements[1] / mod, z = axis.elements[2] / mod;
+ var s = Math.sin(theta), c = Math.cos(theta), t = 1 - c;
+ // Formula derived here: http://www.gamedev.net/reference/articles/article1199.asp
+ // That proof rotates the co-ordinate system so theta
+ // becomes -theta and sin becomes -sin here.
+ return Matrix.create([
+ [t * x * x + c, t * x * y - s * z, t * x * z + s * y],
+ [t * x * y + s * z, t * y * y + c, t * y * z - s * x],
+ [t * x * z - s * y, t * y * z + s * x, t * z * z + c]
+ ]);
+};
+
+// Special case rotations
+Matrix.RotationX = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [1, 0, 0],
+ [0, c, -s],
+ [0, s, c]
+ ]);
+};
+
+Matrix.RotationY = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, 0, s],
+ [0, 1, 0],
+ [-s, 0, c]
+ ]);
+};
+
+Matrix.RotationZ = function(t) {
+ var c = Math.cos(t), s = Math.sin(t);
+ return Matrix.create([
+ [c, -s, 0],
+ [s, c, 0],
+ [0, 0, 1]
+ ]);
+};
+
+// Random matrix of n rows, m columns
+Matrix.Random = function(n, m) {
+ if (arguments.length === 1) m = n;
+ return Matrix.Zero(n, m).map(
+ function() { return Math.random(); }
+ );
+};
+
+Matrix.Fill = function(n, m, v) {
+ if (arguments.length === 2) {
+ v = m;
+ m = n;
+ }
+
+ var els = [], i = n, j;
+
+ while (i--) {
+ j = m;
+ els[i] = [];
+
+ while (j--) {
+ els[i][j] = v;
+ }
+ }
+
+ return Matrix.create(els);
+};
+
+// Matrix filled with zeros
+Matrix.Zero = function(n, m) {
+ return Matrix.Fill(n, m, 0);
+};
+
+// Matrix filled with zeros
+Matrix.Zeros = function(n, m) {
+ return Matrix.Zero(n, m);
+};
+
+// Matrix filled with ones
+Matrix.One = function(n, m) {
+ return Matrix.Fill(n, m, 1);
+};
+
+// Matrix filled with ones
+Matrix.Ones = function(n, m) {
+ return Matrix.One(n, m);
+};
+
+module.exports = Matrix;
+
+},{"fs":42,"./sylvester":79,"./vector":74,"lapack":80}],80:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+
+var lapack = require('./lapack.js');
+exports.sgeqrf = lapack.sgeqrf;
+exports.sgesvd = lapack.sgesvd;
+exports.qr = lapack.qr;
+exports.lu = lapack.lu;
+exports.sgetrf = lapack.sgetrf;
+exports.sgesv = lapack.sgesv;
+
+},{"./lapack.js":81}],81:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var fortranArray = require('./fortranArray');
+var FFI = require('node-ffi');
+
+var LAPACK;
+
+try {
+ LAPACK = new FFI.Library('liblapack', {
+ "sgeqrf_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer"]],
+ "sorgqr_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer"]],
+ "sgesvd_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer", "pointer", "pointer",
+ "pointer", "pointer", "pointer", "pointer", ]],
+ "sgetrf_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer"]],
+ "sgesv_": ["void", ["pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer", "pointer"]]
+
+ });
+} catch(e) {
+ console.log("!!! node-lapack requires the native lapack to be built as a shared lib.");
+ console.log(e);
+}
+
+var FORTRAN_INT = 4;
+var FORTRAN_CHAR = 1;
+var FORTRAN_FLOAT = 4;
+
+function eye(m) {
+ var matrix = [];
+
+ for(var i = 0; i < m; i++) {
+ var row = [];
+ matrix.push(row);
+
+ for(var j = 0; j < m; j++) {
+ if(i == j)
+ row.push(1);
+ else
+ row.push(0);
+ }
+ }
+
+ return matrix;
+}
+
+function matrixOp(matrix, callback) {
+ var m = matrix.length;
+ var n = matrix[0].length;
+ var f_m = new FFI.Pointer(FORTRAN_INT);
+ var f_n = new FFI.Pointer(FORTRAN_INT);
+ var f_a = fortranArray.jsMatrixToFortranArray(matrix);
+ var f_lda = new FFI.Pointer(FORTRAN_INT);
+
+ f_m.putInt32(m);
+ f_n.putInt32(n);
+ f_lda.putInt32(Math.max(1, m));
+
+ callback(m, n, f_m, f_n, f_a, f_lda);
+}
+
+function zeroBottomLeft(matrix) {
+ // zero out bottom left forming an upper right triangle matrix
+ for(var i = 1; i < matrix.length; i++) {
+ for(var j = 0; j < i && j < matrix[0].length; j++)
+ matrix[i][j] = 0;
+ }
+
+ return matrix
+}
+
+function sgesv(a, b) {
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ var result = {};
+
+ matrixOp(a, function(am, an, af_m, af_n, f_a) {
+ var f_ipiv = new FFI.Pointer(am * FORTRAN_INT);
+
+ matrixOp(b, function(bm, bn, bf_m, bf_n, f_b) {
+ LAPACK.sgesv_(af_m, bf_n, f_a, af_n, f_ipiv, f_b, bf_m, f_info);
+ result.X = fortranArray.fortranArrayToJSMatrix(f_b, bm, bn);
+ result.P = ipivToP(bm, fortranArray.fortranIntArrayToJSArray(f_ipiv, bm));
+ });
+ });
+
+ return result;
+}
+
+function qr(matrix) {
+ var result;
+
+ sgeqrf(matrix, function(qr, m, n, f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info) {
+ var f_k = new FFI.Pointer(FORTRAN_INT);
+ f_k.putInt32(Math.min(m, n));
+ LAPACK.sorgqr_(f_m, f_n, f_k, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ qr.Q = fortranArray.fortranArrayToJSMatrix(f_a, m, n);
+ qr.R = zeroBottomLeft(qr.R);
+ result = qr;
+ });
+
+ return result;
+}
+
+function sgeqrf(matrix, callback) {
+ var qr;
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_tau = new FFI.Pointer(m * n * FORTRAN_FLOAT);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ var f_lwork = new FFI.Pointer(FORTRAN_INT);
+ var f_work;
+ f_lwork.putInt32(-1);
+
+ // get optimal size of workspace
+ f_work = new FFI.Pointer(FORTRAN_INT);
+ LAPACK.sgeqrf_(f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ lwork = f_work.getFloat();
+
+ // allocate workspace
+ f_work = new FFI.Pointer(lwork * FORTRAN_FLOAT);
+ f_lwork.putInt32(lwork);
+
+ // perform QR decomp
+ LAPACK.sgeqrf_(f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+
+ qr = {
+ R: fortranArray.fortranArrayToJSMatrix(f_a, m, n),
+ tau: fortranArray.fortranArrayToJSArray(f_tau, Math.min(m, n))
+ };
+
+ if(callback)
+ qr = callback(qr, m, n, f_m, f_n, f_a, f_lda, f_tau, f_work, f_lwork, f_info);
+ });
+
+ return qr;
+}
+
+function cloneMatrix(matrix, height, width) {
+ var clone = [];
+
+ height = height || matrix.length;
+ width = width || matrix[0].length;
+
+ for(var i = 0; i < height; i++) {
+ var row = [];
+ clone.push(row);
+
+ for(var j = 0; j < width; j++) {
+ row.push(matrix[i][j]);
+ }
+ }
+
+ return clone;
+}
+
+function swapRows(matrix, i, j) {
+ var tmp = matrix[j];
+ matrix[j] = matrix[i];
+ matrix[i] = tmp;
+ return matrix;
+}
+
+function lu(matrix) {
+ var result = sgetrf(matrix);
+ var P = ipivToP(matrix.length, result.IPIV);
+ var L = cloneMatrix(result.LU);
+ var m = n = Math.min(matrix.length, matrix[0].length);
+
+ for(var i = 0; i < L.length; i++) {
+ for(var j = i; j < L[i].length; j++) {
+ if(i == j)
+ L[i][j] = 1;
+ else
+ L[i][j] = 0;
+ }
+ }
+
+ return {
+ L: L,
+ U: zeroBottomLeft(cloneMatrix(result.LU, n, n)),
+ P: P,
+ IPIV: result.IPIV
+ };
+}
+
+function ipivToP(m, ipiv){
+ var P = eye(m);
+
+ for(var i = 0; i < ipiv.length; i++) {
+ if(i != ipiv[i] - 1)
+ swapRows(P, i, ipiv[i] - 1);
+ }
+
+ return P;
+}
+
+function sgetrf(matrix) {
+ var result = {};
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_ipiv = new FFI.Pointer(Math.min(m, n) * FORTRAN_INT);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+ LAPACK.sgetrf_(f_m, f_n, f_a, f_m, f_ipiv, f_info);
+ result.LU = fortranArray.fortranArrayToJSMatrix(f_a, m, n);
+ result.IPIV = fortranArray.fortranIntArrayToJSArray(f_ipiv, Math.min(m, n));
+ });
+
+ return result;
+}
+
+function sgesvd(jobu, jobvt, matrix) {
+ var f_jobu = new FFI.Pointer(FORTRAN_CHAR);
+ var f_jobvt = new FFI.Pointer(FORTRAN_CHAR);
+ f_jobu.putChar(jobu.charCodeAt(0));
+ f_jobvt.putChar(jobvt.charCodeAt(0));
+ var svd;
+
+ matrixOp(matrix, function(m, n, f_m, f_n, f_a, f_lda) {
+ var f_s = new FFI.Pointer(Math.pow(Math.min(m, n), 2) * FORTRAN_FLOAT);
+ var f_u = new FFI.Pointer(Math.pow(m, 2) * FORTRAN_FLOAT);
+ var f_ldu = new FFI.Pointer(FORTRAN_INT);
+ f_ldu.putInt32(m);
+
+ // TODO: punting on dims for now. revisit with http://www.netlib.org/lapack/single/sgesvd.f
+ var f_vt = new FFI.Pointer(Math.pow(n, 2) * FORTRAN_FLOAT);
+ var f_ldvt = new FFI.Pointer(FORTRAN_INT);
+ f_ldvt.putInt32(n);
+
+ var lwork = -1;
+ var f_work = new FFI.Pointer(FORTRAN_FLOAT);
+ var f_lwork = new FFI.Pointer(FORTRAN_INT);
+ f_lwork.putInt32(lwork);
+ var f_info = new FFI.Pointer(FORTRAN_INT);
+
+ LAPACK.sgesvd_(f_jobu, f_jobvt, f_m, f_n, f_a, f_lda, f_s, f_u, f_ldu, f_vt, f_ldvt,
+ f_work, f_lwork, f_info);
+
+ lwork = f_work.getFloat();
+ f_work = new FFI.Pointer(lwork * FORTRAN_FLOAT);
+ f_lwork.putInt32(lwork);
+
+ LAPACK.sgesvd_(f_jobu, f_jobvt, f_m, f_n, f_a, f_lda, f_s, f_u, f_ldu, f_vt, f_ldvt,
+ f_work, f_lwork, f_info);
+
+ svd = {
+ U: fortranArray.fortranArrayToJSMatrix(f_u, m, m),
+ S: fortranArray.fortranArrayToJSMatrix(f_s, n, n),
+ VT: fortranArray.fortranArrayToJSMatrix(f_vt, n, n)
+ };
+ });
+
+ return svd;
+}
+
+exports.sgeqrf = sgeqrf;
+exports.sgesvd = sgesvd;
+exports.sgetrf = sgetrf;
+exports.sgesv = sgesv;
+exports.qr = qr;
+exports.lu = lu;
+
+},{"./fortranArray":82,"node-ffi":83}],82:[function(require,module,exports){
+/*
+Copyright (c) 2011, Chris Umbel
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var FFI = require('node-ffi');
+
+var elementSize = 4;
+
+function fortranArrayToJSMatrix(fortranArray, m, n) {
+ var array = [];
+ var a;
+ var rowWidth = elementSize * n;
+ var columnOffset = m * elementSize;
+
+ for(var i = 0; i < m; i++) {
+ var row = [];
+ var rowStart = i * elementSize;
+
+ for(var j = 0; j < n; j++) {
+ a = fortranArray.seek(columnOffset * j + rowStart);
+ row.push(a.getFloat());
+ }
+
+ array.push(row);
+ }
+
+ return array;
+}
+
+function jsMatrixToFortranArray(array) {
+ var m = array.length;
+ var n = array[0].length;
+ var fortranArrayStart = fortranArray = new FFI.Pointer(m * n * elementSize);
+ for(var j = 0; j < n; j++) {
+ for(var i = 0; i < m; i++) {
+ fortranArray.putFloat(array[i][j]);
+ fortranArray = fortranArray.seek(elementSize);
+ }
+ }
+
+ return fortranArrayStart;
+}
+
+function fortranArrayToJSArray(fortranArray, n) {
+ var array = [];
+
+ for(var i = 0; i < n; i++) {
+ array.push(fortranArray.getFloat());
+ fortranArray = fortranArray.seek(elementSize);
+ }
+
+ return array;
+}
+
+function fortranIntArrayToJSArray(fortranArray, n) {
+ var array = [];
+
+ for(var i = 0; i < n; i++) {
+ array.push(fortranArray.getInt32());
+ fortranArray = fortranArray.seek(4);
+ }
+
+ return array;
+}
+
+module.exports.fortranArrayToJSMatrix = fortranArrayToJSMatrix;
+module.exports.jsMatrixToFortranArray = jsMatrixToFortranArray;
+module.exports.fortranArrayToJSArray = fortranArrayToJSArray;
+module.exports.fortranIntArrayToJSArray = fortranIntArrayToJSArray;
+
+},{"node-ffi":83}],83:[function(require,module,exports){
+var ffi = module.exports
+
+ffi.Bindings = require('bindings')('ffi_bindings.node')
+
+ffi.VERSION = '0.5.0'
+
+ffi.TYPE_TO_POINTER_METHOD_MAP = {
+ 'uint8': 'UInt8'
+ , 'int8': 'Int8'
+ , 'uint8': 'UInt8'
+ , 'int16': 'Int16'
+ , 'uint16': 'UInt16'
+ , 'int32': 'Int32'
+ , 'uint32': 'UInt32'
+ , 'int64': 'Int64'
+ , 'uint64': 'UInt64'
+ , 'float': 'Float'
+ , 'double': 'Double'
+ , 'string': 'CString'
+ , 'pointer': 'Pointer'
+}
+
+ffi.SIZE_TO_POINTER_METHOD_MAP = {
+ 1: 'Int8'
+ , 2: 'Int16'
+ , 4: 'Int32'
+ , 8: 'Int64'
+}
+
+ffi.PLATFORM_LIBRARY_EXTENSIONS = {
+ 'linux': '.so'
+ , 'linux2': '.so'
+ , 'sunos': '.so'
+ , 'solaris':'.so'
+ , 'darwin': '.dylib'
+ , 'mac': '.dylib'
+ , 'win32': '.dll'
+}
+
+// A list of types with no hard C++ methods to read/write them
+ffi.NON_SPECIFIC_TYPES = {
+ 'byte': 'Byte'
+ , 'char': 'Char'
+ , 'uchar': 'UChar'
+ , 'short': 'Short'
+ , 'ushort': 'UShort'
+ , 'int': 'Int'
+ , 'uint': 'UInt'
+ , 'long': 'Long'
+ , 'ulong': 'ULong'
+ , 'longlong': 'LongLong'
+ , 'ulonglong': 'ULongLong'
+ , 'size_t': 'SizeT'
+}
+
+// ------------------------------------------------------
+// Miscellaneous Utility Functions
+// ------------------------------------------------------
+
+// Returns true if the passed type is a valid param type
+ffi.isValidParamType = function(type) {
+ return ffi.isStructType(type) || ffi.Bindings.FFI_TYPES[type] != undefined
+}
+
+// Returns true if the passed type is a valid return type
+ffi.isValidReturnType = function(type) {
+ return ffi.isValidParamType(type) || type == 'void'
+}
+
+ffi.derefValuePtr = function(type, ptr) {
+ if (!ffi.isValidParamType(type)) {
+ throw new Error('Invalid Type: ' + type)
+ }
+
+ if (ffi.isStructType(type)) {
+ return new type(ptr)
+ }
+
+ if (type == 'void') {
+ return null
+ }
+
+ var dptr = ptr
+
+ if (type == 'string') {
+ dptr = ptr.getPointer()
+ if (dptr.isNull()) {
+ return null
+ }
+ }
+
+ return dptr['get' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]]()
+}
+
+// Generates a derefValuePtr for a specific type
+ffi.derefValuePtrFunc = function(type) {
+ if (!ffi.isValidParamType(type)) {
+ throw new Error('Invalid Type: ' + type)
+ }
+
+ if (ffi.isStructType(type)) {
+ return function(ptr) {
+ return new type(ptr)
+ }
+ }
+
+ if (type == 'void') {
+ return function(ptr) { return null; }
+ }
+
+ var getf = 'get' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+
+ if (type == 'string') {
+ return function(ptr) {
+ var dptr = ptr.getPointer()
+ if (dptr.isNull()) {
+ return null
+ }
+ return dptr[getf]()
+ }
+ } else {
+ return function(ptr) {
+ return ptr[getf]()
+ }
+ }
+}
+
+/**
+ * Returns the byte size of the given type. `type` may be a string name
+ * identifier or a Struct type.
+ * Roughly equivalent to the C sizeof() operator.
+ */
+
+function sizeof (type) {
+ return ffi.isStructType(type)
+ ? type.__structInfo__.size
+ : ffi.Bindings.TYPE_SIZE_MAP[type]
+}
+ffi.sizeOf = ffi.sizeof = sizeof
+
+/**
+ * Returns the FFI_TYPE for the given `type`. May be a `Struct` type.
+ */
+
+function ffiTypeFor (type) {
+ return ffi.isStructType(type)
+ ? type._ffiType().ref()
+ : ffi.Bindings.FFI_TYPES[type]
+}
+ffi.ffiTypeFor = ffiTypeFor
+
+/**
+ * Returns true if the given `type` is a Struct type, false otherwise.
+ */
+
+function isStructType (type) {
+ return !!type.__isStructType__
+}
+ffi.isStructType = isStructType
+
+// Direct exports from the bindings
+ffi.free = ffi.Bindings.free
+ffi.CallbackInfo = ffi.Bindings.CallbackInfo
+
+// Include our other modules
+ffi.Pointer = require('./pointer')
+ffi.CIF = require('./cif')
+ffi.ForeignFunction = require('./foreign_function')
+ffi.DynamicLibrary = require('./dynamic_library')
+ffi.Library = require('./library')
+ffi.Callback = require('./callback')
+ffi.Struct = require('./struct')
+ffi.errno = require('./errno')
+
+/**
+ * Define the `FFI_TYPE` struct for use in JS.
+ * This struct type is used internally to define custom struct rtn/arg types.
+ */
+
+ffi.FFI_TYPE = ffi.Struct([
+ ['size_t', 'size']
+ , ['ushort', 'alignment']
+ , ['ushort', 'type']
+ , ['pointer','elements']
+])
+
+
+},{"./pointer":84,"./cif":85,"./foreign_function":86,"./library":87,"./dynamic_library":88,"./callback":89,"./struct":90,"./errno":91,"bindings":92}],84:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+ , util = require('util')
+ , Pointer = module.exports = ffi.Bindings.Pointer
+
+/**
+ * `attach()` is used for tracking dependencies among pointers to prevent
+ * garbage collection.
+ */
+
+Pointer.prototype.attach = function attach (friend) {
+ if (!Array.isArray(friend.__attached)) {
+ friend.__attached = []
+ }
+ friend.__attached.push(this)
+}
+
+/**
+ * Creates and returns a new Pointer that points to the same `address` as this
+ * pointer. Usefor for when you want to use a pointer as in iterator, but still
+ * want to retain this original pointer's address for use.
+ *
+ * The returned Pointer's `free` variable is set to `false` by default.
+ *
+ * @return {Pointer} A new Pointer independent of this one, but points to the same `address`.
+ */
+
+Pointer.prototype.clone = function clone () {
+ return this.seek(0)
+}
+
+/**
+ * This wraps _putPointer so it supports direct Struct writing.
+ */
+
+Pointer.prototype.putPointer = function putPointer (ptr, seek) {
+ var p = ptr && 'pointer' in ptr ? ptr.pointer : ptr
+ return this._putPointer(p, seek)
+}
+
+/**
+ * Custom inspect() function for easier inspecting of Pointers in the REPL
+ */
+
+Pointer.prototype.inspect = function inspect (depth, hidden, colors) {
+ return '<Pointer address="'
+ + util.inspect(this.address, hidden, depth - 1, colors)
+ +'" allocated="'
+ + util.inspect(this.allocated, hidden, depth - 1, colors)
+ +'" free="'
+ + util.inspect(this.free, hidden, depth - 1, colors)
+ +'">'
+}
+
+/**
+ * Returns `true` if the given argument is a `Pointer` instance.
+ * Returns `false` otherwise.
+ *
+ * @param {Object} p A pointer object (possibly...)
+ * @return {Boolean} `true` if the object is a `Pointer` instance
+ */
+
+Pointer.isPointer = function isPointer (p) {
+ return p instanceof Pointer
+}
+
+/**
+ * Allocates a pointer big enough to fit *type* and *value*, writes the value,
+ * and returns it.
+ */
+
+Pointer.alloc = function alloc (type, value) {
+ var size = type == 'string'
+ ? Buffer.byteLength(value, 'utf8') + 1
+ : ffi.sizeOf(type)
+
+ // malloc() the buffer
+ var ptr = new Pointer(size)
+
+ // write the value
+ ptr['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]](value)
+
+ if (type == 'string') {
+ // XXX: consider removing this string special case. it's dumb.
+ // we have to actually build an "in-between" pointer for strings
+ var dptr = new ffi.Pointer(ffi.Bindings.TYPE_SIZE_MAP.pointer)
+ ptr.attach(dptr) // save it from garbage collection
+ dptr.putPointer(ptr)
+ return dptr
+ }
+
+ return ptr
+}
+
+/**
+ * Appends the `NON_SPECIFIC_TYPES` to the `TYPE_TO_POINTER_METHOD_MAP` by
+ * discovering the method suffix by type size.
+ */
+
+Object.keys(ffi.NON_SPECIFIC_TYPES).forEach(function (type) {
+ var method = ffi.NON_SPECIFIC_TYPES[type]
+ , suffix = ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+
+ if (!suffix) {
+ // No hard mapping, determine by size
+ var size = ffi.sizeOf(type)
+ , szFunc = ffi.SIZE_TO_POINTER_METHOD_MAP[size]
+ , signed = type !== 'byte' && type != 'size_t' && type[0] != 'u'
+ suffix = (signed ? '' : 'U') + szFunc
+ }
+
+ ffi.TYPE_TO_POINTER_METHOD_MAP[type] = suffix
+
+ Pointer.prototype['put' + method] = Pointer.prototype['put' + suffix]
+ Pointer.prototype['get' + method] = Pointer.prototype['get' + suffix]
+})
+
+/**
+ * Define the `NULL` pointer. Used internally in other parts of node-ffi.
+ */
+
+Pointer.NULL = new Pointer(0)
+
+})(require("__browserify_buffer").Buffer)
+},{"util":40,"./ffi":83,"__browserify_buffer":61}],85:[function(require,module,exports){
+var ffi = require('./ffi')
+
+/**
+ * CIF provides a JS interface for the libffi "callback info" (CIF) structure.
+ * TODO: Deprecate this class. Turn this into a simple function that returns the
+ * CIF pointer.
+ */
+
+function CIF (rtype, types) {
+
+ if (!ffi.isValidReturnType(rtype)) {
+ throw new Error('Invalid Return Type: ' + rtype)
+ }
+
+ var numArgs = types.length
+
+ this._argtypesptr = new ffi.Pointer(types.length * ffi.Bindings.FFI_TYPE_SIZE)
+ this._rtypeptr = ffi.ffiTypeFor(rtype)
+
+ var tptr = this._argtypesptr.clone()
+
+ for (var i=0; i<numArgs; i++) {
+ var typeName = types[i]
+
+ if (!ffi.isValidParamType(typeName)) {
+ throw new Error('Invalid Type: ' + typeName)
+ }
+
+ var ffiType = ffi.ffiTypeFor(typeName)
+ tptr.putPointer(ffiType, true)
+ }
+
+ this.pointer = ffi.Bindings.prepCif(numArgs, this._rtypeptr, this._argtypesptr)
+}
+module.exports = CIF
+
+CIF.prototype.getPointer = function () { return this.pointer }
+
+},{"./ffi":83}],86:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+ , EventEmitter = require('events').EventEmitter
+ , POINTER_SIZE = ffi.Bindings.POINTER_SIZE
+
+/**
+ * Represents a foreign function in another library. Manages all of the aspects
+ * of function execution, including marshalling the data parameters for the
+ * function into native types and also unmarshalling the return from function
+ * execution.
+ */
+
+function ForeignFunction (ptr, returnType, types, async) {
+ if (!(this instanceof ForeignFunction)) {
+ return new ForeignFunction(ptr, returnType, types, async)
+ }
+
+ var self = this
+ , numArgs = types.length
+ , drefVal = ffi.derefValuePtrFunc(returnType)
+ , result = new ffi.Pointer(ffi.sizeOf(returnType))
+ , argsList = new ffi.Pointer(numArgs * POINTER_SIZE)
+ , cif = new ffi.CIF(returnType, types)
+ , caller = new ffi.Bindings.ForeignCaller(
+ cif.getPointer()
+ , ptr
+ , argsList
+ , result
+ , async
+ )
+
+ // XXX: Can't remove or shit segsaults... WTF....
+ this._ = cif
+
+ // allocate a storage area for each argument,
+ // then write the pointer to the argument list
+ var argputf = types.map(function (type, i) {
+ var argPtr = argsList.seek(i * POINTER_SIZE)
+
+ if (ffi.isStructType(type)) {
+ return function (val) {
+ argPtr.putPointer(val.ref())
+ }
+ }
+
+ var valPtr = new ffi.Pointer(ffi.sizeOf(type))
+ argPtr.putPointer(valPtr)
+
+ if (type == 'string') {
+ return function (val) {
+ var ptr = ffi.Pointer.NULL
+ if (typeof val !== 'undefined' && val !== null) {
+ var len = Buffer.byteLength(val, 'utf8')
+ ptr = new ffi.Pointer(len+1)
+ ptr.putCString(val)
+ }
+ valPtr.putPointer(ptr)
+ }
+ } else if (type == 'pointer') {
+ // Bypass the struct check for non-struct types
+ return function (val) {
+ valPtr._putPointer(val)
+ }
+ } else {
+ // Generic type putter function
+ var putCall = 'put' + ffi.TYPE_TO_POINTER_METHOD_MAP[type]
+ return function (val) {
+ valPtr[putCall](val)
+ }
+ }
+ })
+
+ var proxy = function () {
+ self // XXX: if this isn't in here, callbacks segfault. what.. the.. f?
+
+ if (arguments.length !== numArgs) {
+ throw new Error('Function arguments did not meet specification')
+ }
+
+ // write arguments to storage areas
+ for (var i=0; i<numArgs; i++) {
+ argputf[i](arguments[i])
+ }
+
+ var r = caller.exec()
+
+ if (async) {
+ var emitter = new EventEmitter()
+ r.on('success', function () {
+ emitter.emit('success', drefVal(result))
+ })
+ return emitter
+ }
+
+ return drefVal(result)
+ }
+
+ // Backwards compat
+ // XXX: Remove soon...
+ proxy.getFunction = function () { return this }
+
+ return proxy
+}
+module.exports = ForeignFunction
+
+/**
+ * Deprecated. Just invoke ForeignFunction() instead.
+ */
+
+ForeignFunction.build = ForeignFunction
+
+})(require("__browserify_buffer").Buffer)
+},{"events":41,"./ffi":83,"__browserify_buffer":61}],87:[function(require,module,exports){
+(function(process){var ffi = require('./ffi')
+ , EXT = ffi.PLATFORM_LIBRARY_EXTENSIONS[process.platform]
+ , RTLD_NOW = ffi.DynamicLibrary.FLAGS.RTLD_NOW
+
+/**
+ * Provides a friendly abstraction/API on-top of DynamicLibrary and
+ * ForeignFunction.
+ */
+function Library (libfile, funcs) {
+ if (libfile && libfile.indexOf(EXT) === -1) {
+ libfile += EXT
+ }
+
+ var lib = {}
+ , dl = new ffi.DynamicLibrary(libfile || null, RTLD_NOW)
+
+ if (funcs) {
+ Object.keys(funcs).forEach(function (func) {
+ var fptr = dl.get(func)
+ , info = funcs[func]
+
+ if (fptr.isNull()) {
+ throw new Error('DynamicLibrary "'+libfile+'" returned NULL function pointer for "'+func+'"')
+ }
+
+ var resultType = info[0]
+ , paramTypes = info[1]
+ , fopts = info[2]
+ , async = fopts ? fopts.async : false
+
+ lib[func] = ffi.ForeignFunction(fptr, resultType, paramTypes, async)
+ })
+ }
+
+ return lib
+}
+module.exports = Library
+
+})(require("__browserify_process"))
+},{"./ffi":83,"__browserify_process":43}],89:[function(require,module,exports){
+var ffi = require('./ffi')
+
+/**
+ * Turns a JavaScript function into a C function pointer.
+ * The function pointer may be used in other C functions that
+ * accept C callback functions.
+ * TODO: Deprecate this class, make this function return the callback pointer
+ * directly.
+ */
+
+function Callback (typedata, func) {
+ var retType = typedata[0]
+ , types = typedata[1]
+
+ this._cif = new ffi.CIF(retType, types)
+ this._info = new ffi.CallbackInfo(this._cif.getPointer(), function (retval, params) {
+ var pptr = params.clone()
+ var args = types.map(function (type) {
+ return ffi.derefValuePtr(type, pptr.getPointer(true))
+ })
+
+ // Invoke the user-given function
+ var result = func.apply(null, args)
+
+ if (retType !== 'void') {
+ retval['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[retType]](result)
+ }
+ })
+
+ this.pointer = this._info.pointer
+}
+module.exports = Callback
+
+/**
+ * Returns the callback function pointer. Deprecated. Use `callback.pointer`
+ * instead.
+ */
+
+Callback.prototype.getPointer = function getPointer () {
+ return this.pointer
+}
+
+},{"./ffi":83}],88:[function(require,module,exports){
+var ffi = require('./ffi')
+ , read = require('fs').readFileSync
+ , dlopen = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlopen
+ , 'pointer', [ 'string', 'int32' ])
+ , dlclose = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlclose
+ , 'int32', [ 'pointer' ])
+ , dlsym = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlsym
+ , 'pointer', [ 'pointer', 'string' ])
+ , dlerror = ffi.ForeignFunction(ffi.Bindings.StaticFunctions.dlerror
+ , 'string', [ ])
+
+/**
+ * `DynamicLibrary` loads and fetches function pointers for dynamic libraries
+ * (.so, .dylib, etc). After the libray's function pointer is acquired, then you
+ * call `get(symbol)` to retreive a pointer to an exported symbol. You need to
+ * call `get___()` on the pointer to dereference it into it's acutal value, or
+ * turn the pointer into a callable function with `ForeignFunction`.
+ */
+
+function DynamicLibrary (path, mode) {
+ this._handle = dlopen(path, mode || DynamicLibrary.FLAGS.RTLD_NOW)
+
+ if (this._handle.isNull()) {
+ var err = this.error()
+
+ // THIS CODE IS BASED ON GHC Trac ticket #2615
+ // http://hackage.haskell.org/trac/ghc/attachment/ticket/2615
+
+ // On some systems (e.g., Gentoo Linux) dynamic files (e.g. libc.so)
+ // contain linker scripts rather than ELF-format object code. This
+ // code handles the situation by recognizing the real object code
+ // file name given in the linker script.
+
+ // If an "invalid ELF header" error occurs, it is assumed that the
+ // .so file contains a linker script instead of ELF object code.
+ // In this case, the code looks for the GROUP ( ... ) linker
+ // directive. If one is found, the first file name inside the
+ // parentheses is treated as the name of a dynamic library and the
+ // code attempts to dlopen that file. If this is also unsuccessful,
+ // an error message is returned.
+
+ // see if the error message is due to an invalid ELF header
+ var match
+
+ if (match = err.match(/^(([^ \t()])+\.so([^ \t:()])*):([ \t])*invalid ELF header$/)) {
+ var content = read(match[1], 'ascii')
+ // try to find a GROUP ( ... ) command
+ if (match = content.match(/GROUP *\( *(([^ )])+)/)){
+ return DynamicLibrary.call(this, match[1], mode)
+ }
+ }
+
+ throw new Error('Dynamic Linking Error: ' + err)
+ }
+}
+module.exports = DynamicLibrary
+
+DynamicLibrary.FLAGS = {
+ 'RTLD_LAZY': 0x1
+ , 'RTLD_NOW': 0x2
+ , 'RTLD_LOCAL': 0x4
+ , 'RTLD_GLOBAL': 0x8
+}
+
+/**
+ * Close this library, returns the result of the dlclose() system function.
+ */
+
+DynamicLibrary.prototype.close = function () {
+ return dlclose(this._handle)
+}
+
+/**
+ * Get a symbol from this library, returns a Pointer for (memory address of) the symbol
+ */
+
+DynamicLibrary.prototype.get = function (symbol) {
+ var ptr = dlsym(this._handle, symbol)
+
+ if (ptr.isNull()) {
+ throw new Error('Dynamic Symbol Retrieval Error: ' + this.error())
+ }
+
+ return ptr
+}
+
+/**
+ * Returns the result of the dlerror() system function
+ */
+
+DynamicLibrary.prototype.error = function error () {
+ return dlerror()
+}
+
+},{"fs":42,"./ffi":83}],90:[function(require,module,exports){
+(function(Buffer){var ffi = require('./ffi')
+
+/**
+ * An interface for modeling and instantiating C-style data structures. This is
+ * not a constructor per-say, but a constructor generator. It takes an array of
+ * tuples, the left side being the type, and the right side being a field name.
+ * The order should be the same order it would appear in the C-style struct
+ * definition. It returns a function that can be used to construct an object that
+ * reads and writes to the data structure using properties specified by the
+ * initial field list.
+ *
+ * Example:
+ *
+ * var PasswordEntry = ffi.Struct(
+ * ['string', 'username']
+ * , ['string', 'password']
+ * )
+ * var pwd = new PasswordEntry()
+ * pwd.username = 'ricky'
+ * pwd.password = 'rbransonlovesnode.js'
+ */
+
+function Struct () {
+ var struct = {}
+ , fields = arguments
+
+ // Legacy API, pass an Array of Arrays
+ if (arguments.length > 0) {
+ var firstArg = arguments[0]
+ if (Array.isArray(firstArg) && firstArg.length > 0 && Array.isArray(firstArg[0])) {
+ fields = firstArg
+ }
+ }
+
+ struct.struct = {}
+ struct.members = []
+ struct.size = 0
+ struct.alignment = 0
+
+ function read (ptr, name) {
+ var info = struct.struct[name]
+ var fptr = ptr.seek(info.offset)
+
+ if (ffi.isStructType(info.type)) {
+ return new info.type(fptr)
+ } else if (info.type == 'string') {
+ return fptr.getPointer().getCString()
+ } else {
+ return fptr['get' + ffi.TYPE_TO_POINTER_METHOD_MAP[info.type]]()
+ }
+ }
+
+ function write (ptr, name, val) {
+ var info = struct.struct[name]
+ var fptr = ptr.seek(info.offset)
+
+ if (ffi.isStructType(info.type)) {
+ new info.type(fptr, val)
+ } else if (info.type == 'string') {
+ if (typeof val == 'undefined' || val === null) {
+ return fptr.putPointer(ffi.Pointer.NULL)
+ }
+ var len = Buffer.byteLength(val, 'utf8')
+ var strPtr = new ffi.Pointer(len+1)
+ strPtr.putCString(val)
+ fptr.putPointer(strPtr)
+ } else {
+ return fptr['put' + ffi.TYPE_TO_POINTER_METHOD_MAP[info.type]](val)
+ }
+ }
+
+ // Read the fields list and apply all the fields to the struct
+ for (var i=0, len=fields.length; i<len; i++) {
+ var field = fields[i]
+ , type = field[0]
+ , name = field[1]
+ //console.log(name)
+
+ if (name in struct.struct) {
+ throw new Error('Error when constructing Struct: ' + name + ' field specified twice!')
+ }
+
+ var stype = ffi.isStructType(type)
+ , sz = ffi.sizeOf(type)
+ , asz = stype ? type.__structInfo__.alignment : sz
+ //console.log(' size:',sz)
+ //console.log(' offset:', struct.size)
+ //console.log(' asz:',asz)
+
+ struct.alignment = Math.max(struct.alignment, asz)
+
+ var left = struct.size % struct.alignment
+ , offset = struct.size
+
+ if (sz > left) {
+ offset += left
+ }
+
+ struct.size = offset + sz
+
+ struct.struct[name] = {
+ name: name
+ , type: type
+ , size: sz
+ , offset: offset
+ }
+ struct.members.push(name)
+ }
+ //console.log('before left:', struct.size, struct.alignment)
+ var left = struct.size % struct.alignment
+ if (left) {
+ struct.size += struct.alignment - left
+ }
+ //console.log('after left:', struct.size)
+
+ var constructor = function (arg, data) {
+ if (!(this instanceof constructor)) {
+ return new constructor(arg, data)
+ }
+ if (ffi.Pointer.isPointer(arg)) {
+ this.pointer = arg
+ arg = data
+ } else {
+ this.pointer = new ffi.Pointer(struct.size)
+ }
+ if (arg) {
+ for (var key in arg) {
+ write(this.pointer, key, arg[key])
+ }
+ }
+ }
+
+ // Function to return an `FFI_TYPE` struct instance from this struct
+ constructor._ffiType = function ffiType () {
+ // return cached if available
+ if (this._ffiTypeCached) {
+ return this._ffiTypeCached
+ }
+ var props = this.__structInfo__.struct
+ , propNames = Object.keys(props)
+ , numProps = propNames.length
+ var t = new ffi.FFI_TYPE()
+ t.size = 0
+ t.alignment = 0
+ t.type = 13 // FFI_TYPE_STRUCT
+ t.elements = new ffi.Pointer(ffi.Bindings.POINTER_SIZE * (numProps+1))
+ var tptr = t.elements.clone()
+ for (var i=0; i<numProps; i++) {
+ var prop = props[propNames[i]]
+ tptr.putPointer(ffi.ffiTypeFor(prop.type), true)
+ }
+ // Final NULL pointer to terminate the Array
+ tptr.putPointer(ffi.Pointer.NULL)
+ return this._ffiTypeCached = t
+ }
+
+ // Add getters & setters for each field to the constructor's prototype
+ struct.members.forEach(function (field) {
+ Object.defineProperty(constructor.prototype, field, {
+ get: function () {
+ return read(this.pointer, field)
+ }
+ , set: function (val) {
+ write(this.pointer, field, val)
+ }
+ , enumerable: true
+ , configurable: true
+ })
+ })
+
+ constructor.prototype.__isStructInstance__ == true
+ constructor.prototype.__structInfo__ = struct
+ constructor.prototype.ref = function ref () {
+ return this.pointer
+ }
+
+ constructor.__isStructType__ = true
+ constructor.__structInfo__ = struct
+
+ return constructor
+}
+module.exports = Struct
+
+})(require("__browserify_buffer").Buffer)
+},{"./ffi":83,"__browserify_buffer":61}],91:[function(require,module,exports){
+(function(process){
+/**
+ * Implementation of errno. This is a #define :/
+ * On Linux, it's a global variable with the symbol `errno`,
+ * but on Darwin it's a method execution called `__error`.
+ */
+
+var ffi = require('./ffi')
+ , errnoPtr = null
+
+if (process.platform == 'darwin' || process.platform == 'mac') {
+ var __error = new ffi.DynamicLibrary().get('__error')
+ errnoPtr = ffi.ForeignFunction(__error, 'pointer', [])
+} else if (process.platform == 'win32') {
+ var _errno = new ffi.DynamicLibrary('msvcrt.dll').get('_errno')
+ errnoPtr = ffi.ForeignFunction(_errno, 'pointer', [])
+} else {
+ var errnoGlobal = new ffi.DynamicLibrary().get('errno');
+ errnoPtr = function () { return errnoGlobal }
+}
+
+function errno () {
+ return errnoPtr().getInt32()
+}
+module.exports = errno
+
+})(require("__browserify_process"))
+},{"./ffi":83,"__browserify_process":43}],92:[function(require,module,exports){
+(function(process,__filename){
+/**
+ * Module dependencies.
+ */
+
+var fs = require('fs')
+ , path = require('path')
+ , join = path.join
+ , dirname = path.dirname
+ , exists = fs.existsSync || path.existsSync
+ , defaults = {
+ arrow: process.env.NODE_BINDINGS_ARROW || ' → '
+ , compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled'
+ , platform: process.platform
+ , arch: process.arch
+ , version: process.versions.node
+ , bindings: 'bindings.node'
+ , try: [
+ // node-gyp's linked version in the "build" dir
+ [ 'module_root', 'build', 'bindings' ]
+ // node-waf and gyp_addon (a.k.a node-gyp)
+ , [ 'module_root', 'build', 'Debug', 'bindings' ]
+ , [ 'module_root', 'build', 'Release', 'bindings' ]
+ // Debug files, for development (legacy behavior, remove for node v0.9)
+ , [ 'module_root', 'out', 'Debug', 'bindings' ]
+ , [ 'module_root', 'Debug', 'bindings' ]
+ // Release files, but manually compiled (legacy behavior, remove for node v0.9)
+ , [ 'module_root', 'out', 'Release', 'bindings' ]
+ , [ 'module_root', 'Release', 'bindings' ]
+ // Legacy from node-waf, node <= 0.4.x
+ , [ 'module_root', 'build', 'default', 'bindings' ]
+ // Production "Release" buildtype binary (meh...)
+ , [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ]
+ ]
+ }
+
+/**
+ * The main `bindings()` function loads the compiled bindings for a given module.
+ * It uses V8's Error API to determine the parent filename that this function is
+ * being invoked from, which is then used to find the root directory.
+ */
+
+function bindings (opts) {
+
+ // Argument surgery
+ if (typeof opts == 'string') {
+ opts = { bindings: opts }
+ } else if (!opts) {
+ opts = {}
+ }
+ opts.__proto__ = defaults
+
+ // Get the module root
+ if (!opts.module_root) {
+ opts.module_root = exports.getRoot(exports.getFileName())
+ }
+
+ // Ensure the given bindings name ends with .node
+ if (path.extname(opts.bindings) != '.node') {
+ opts.bindings += '.node'
+ }
+
+ var tries = []
+ , i = 0
+ , l = opts.try.length
+ , n
+ , b
+ , err
+
+ for (; i<l; i++) {
+ n = join.apply(null, opts.try[i].map(function (p) {
+ return opts[p] || p
+ }))
+ tries.push(n)
+ try {
+ b = opts.path ? require.resolve(n) : require(n)
+ if (!opts.path) {
+ b.path = n
+ }
+ return b
+ } catch (e) {
+ if (!/not find/i.test(e.message)) {
+ throw e
+ }
+ }
+ }
+
+ err = new Error('Could not locate the bindings file. Tried:\n'
+ + tries.map(function (a) { return opts.arrow + a }).join('\n'))
+ err.tries = tries
+ throw err
+}
+module.exports = exports = bindings
+
+
+/**
+ * Gets the filename of the JavaScript file that invokes this function.
+ * Used to help find the root directory of a module.
+ */
+
+exports.getFileName = function getFileName () {
+ var origPST = Error.prepareStackTrace
+ , dummy = {}
+ , fileName
+
+ Error.prepareStackTrace = function (e, st) {
+ for (var i=0, l=st.length; i<l; i++) {
+ fileName = st[i].getFileName()
+ if (fileName !== __filename) {
+ return
+ }
+ }
+ }
+
+ // run the 'prepareStackTrace' function above
+ Error.captureStackTrace(dummy)
+ dummy.stack
+
+ // cleanup
+ Error.prepareStackTrace = origPST
+
+ return fileName
+}
+
+/**
+ * Gets the root directory of a module, given an arbitrary filename
+ * somewhere in the module tree. The "root directory" is the directory
+ * containing the `package.json` file.
+ *
+ * In: /home/nate/node-native-module/lib/index.js
+ * Out: /home/nate/node-native-module
+ */
+
+exports.getRoot = function getRoot (file) {
+ var dir = dirname(file)
+ , prev
+ while (true) {
+ if (dir === '.') {
+ // Avoids an infinite loop in rare cases, like the REPL
+ dir = process.cwd()
+ }
+ if (exists(join(dir, 'package.json')) || exists(join(dir, 'node_modules'))) {
+ // Found the 'package.json' file or 'node_modules' dir; we're done
+ return dir
+ }
+ if (prev === dir) {
+ // Got to the top
+ throw new Error('Could not find module root given file: "' + file
+ + '". Do you have a `package.json` file? ')
+ }
+ // Try the parent dir next
+ prev = dir
+ dir = join(dir, '..')
+ }
+}
+
+})(require("__browserify_process"),"/node_modules/lapack/node_modules/node-ffi/node_modules/bindings/bindings.js")
+},{"fs":42,"path":65,"__browserify_process":43}]},{},[1])
+; \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/upGoerFive.js b/exampleData/ruleSets/language-processing/natural/upGoerFive.js
new file mode 100644
index 0000000..6a074b0
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/upGoerFive.js
@@ -0,0 +1,212 @@
+var natural = require('natural');
+
+exports = {};
+exports.name = "Common words";
+exports.description = "Identifies rare word use (words not in the 1000 most common English word list).";
+
+// var words = require('./1-1000');
+
+words = ['the', 'of', 'to', 'and', 'a', 'in', 'is', 'it',
+'you', 'that', 'he', 'was', 'for', 'on', 'are', 'with', 'as', 'I',
+'his', 'they', 'be', 'at', 'one', 'have', 'this', 'from', 'or', 'had',
+'by', 'hot', 'word', 'but', 'what', 'some', 'we', 'can', 'out',
+'other', 'were', 'all', 'there', 'when', 'up', 'use', 'your', 'how',
+'said', 'an', 'each', 'she', 'which', 'do', 'their', 'time', 'if',
+'will', 'way', 'about', 'many', 'then', 'them', 'write', 'would',
+'like', 'so', 'these', 'her', 'long', 'make', 'thing', 'see', 'him',
+'two', 'has', 'look', 'more', 'day', 'could', 'go', 'come', 'did',
+'number', 'sound', 'no', 'most', 'people', 'my', 'over', 'know',
+'water', 'than', 'call', 'first', 'who', 'may', 'down', 'side',
+'been', 'now', 'find', 'any', 'new', 'work', 'part', 'take', 'get',
+'place', 'made', 'live', 'where', 'after', 'back', 'little', 'only',
+'round', 'man', 'year', 'came', 'show', 'every', 'good', 'me', 'give',
+'our', 'under', 'name', 'very', 'through', 'just', 'form', 'sentence',
+'great', 'think', 'say', 'help', 'low', 'line', 'differ', 'turn',
+'cause', 'much', 'mean', 'before', 'move', 'right', 'boy', 'old',
+'too', 'same', 'tell', 'does', 'set', 'three', 'want', 'air', 'well',
+'also', 'play', 'small', 'end', 'put', 'home', 'read', 'hand', 'port',
+'large', 'spell', 'add', 'even', 'land', 'here', 'must', 'big',
+'high', 'such', 'follow', 'act', 'why', 'ask', 'men', 'change',
+'went', 'light', 'kind', 'off', 'need', 'house', 'picture', 'try',
+'us', 'again', 'animal', 'point', 'mother', 'world', 'near', 'build',
+'self', 'earth', 'father', 'head', 'stand', 'own', 'page', 'should',
+'country', 'found', 'answer', 'school', 'grow', 'study', 'still',
+'learn', 'plant', 'cover', 'food', 'sun', 'four', 'between', 'state',
+'keep', 'eye', 'never', 'last', 'let', 'thought', 'city', 'tree',
+'cross', 'farm', 'hard', 'start', 'might', 'story', 'saw', 'far',
+'sea', 'draw', 'left', 'late', 'run', 'don\'t', 'while', 'press',
+'close', 'night', 'real', 'life', 'few', 'north', 'open', 'seem',
+'together', 'next', 'white', 'children', 'begin', 'got', 'walk',
+'example', 'ease', 'paper', 'group', 'always', 'music', 'those',
+'both', 'mark', 'often', 'letter', 'until', 'mile', 'river', 'car',
+'feet', 'care', 'second', 'book', 'carry', 'took', 'science', 'eat',
+'room', 'friend', 'began', 'idea', 'fish', 'mountain', 'stop', 'once',
+'base', 'hear', 'horse', 'cut', 'sure', 'watch', 'color', 'face',
+'wood', 'main', 'enough', 'plain', 'girl', 'usual', 'young', 'ready',
+'above', 'ever', 'red', 'list', 'though', 'feel', 'talk', 'bird',
+'soon', 'body', 'dog', 'family', 'direct', 'pose', 'leave', 'song',
+'measure', 'door', 'product', 'black', 'short', 'numeral', 'class',
+'wind', 'question', 'happen', 'complete', 'ship', 'area', 'half',
+'rock', 'order', 'fire', 'south', 'problem', 'piece', 'told', 'knew',
+'pass', 'since', 'top', 'whole', 'king', 'space', 'heard', 'best',
+'hour', 'better', 'true .', 'during', 'hundred', 'five', 'remember',
+'step', 'early', 'hold', 'west', 'ground', 'interest', 'reach',
+'fast', 'verb', 'sing', 'listen', 'six', 'table', 'travel', 'less',
+'morning', 'ten', 'simple', 'several', 'vowel', 'toward', 'war',
+'lay', 'against', 'pattern', 'slow', 'center', 'love', 'person',
+'money', 'serve', 'appear', 'road', 'map', 'rain', 'rule', 'govern',
+'pull', 'cold', 'notice', 'voice', 'unit', 'power', 'town', 'fine',
+'certain', 'fly', 'fall', 'lead', 'cry', 'dark', 'machine', 'note',
+'wait', 'plan', 'figure', 'star', 'box', 'noun', 'field', 'rest',
+'correct', 'able', 'pound', 'done', 'beauty', 'drive', 'stood',
+'contain', 'front', 'teach', 'week', 'final', 'gave', 'green', 'oh',
+'quick', 'develop', 'ocean', 'warm', 'free', 'minute', 'strong',
+'special', 'mind', 'behind', 'clear', 'tail', 'produce', 'fact',
+'street', 'inch', 'multiply', 'nothing', 'course', 'stay', 'wheel',
+'full', 'force', 'blue', 'object', 'decide', 'surface', 'deep',
+'moon', 'island', 'foot', 'system', 'busy', 'test', 'record', 'boat',
+'common', 'gold', 'possible', 'plane', 'stead', 'dry', 'wonder',
+'laugh', 'thousand', 'ago', 'ran', 'check', 'game', 'shape', 'equate',
+'miss', 'brought', 'heat', 'snow', 'tire', 'bring', 'yes', 'distant',
+'fill', 'east', 'paint', 'language', 'among', 'grand', 'ball', 'yet',
+'wave', 'drop', 'heart', 'am', 'present', 'heavy', 'dance', 'engine',
+'position', 'arm', 'wide', 'sail', 'material', 'size', 'vary',
+'settle', 'speak', 'weight', 'general', 'ice', 'matter', 'circle',
+'pair', 'include', 'divide', 'syllable', 'felt', 'perhaps', 'pick',
+'sudden', 'count', 'square', 'reason', 'length', 'represent', 'art',
+'subject', 'region', 'energy', 'hunt', 'probable', 'bed', 'brother',
+'egg', 'ride', 'cell', 'believe', 'fraction', 'forest', 'sit', 'race',
+'window', 'store', 'summer', 'train', 'sleep', 'prove', 'lone', 'leg',
+'exercise', 'wall', 'catch', 'mount', 'wish', 'sky', 'board', 'joy',
+'winter', 'sat', 'written', 'wild', 'instrument', 'kept', 'glass',
+'grass', 'cow', 'job', 'edge', 'sign', 'visit', 'past', 'soft', 'fun',
+'bright', 'gas', 'weather', 'month', 'million', 'bear', 'finish',
+'happy', 'hope', 'flower', 'clothe', 'strange', 'gone', 'jump',
+'baby', 'eight', 'village', 'meet', 'root', 'buy', 'raise', 'solve',
+'metal', 'whether', 'push', 'seven', 'paragraph', 'third', 'shall',
+'held', 'hair', 'describe', 'cook', 'floor', 'either', 'result',
+'burn', 'hill', 'safe', 'cat', 'century', 'consider', 'type', 'law',
+'bit', 'coast', 'copy', 'phrase', 'silent', 'tall', 'sand', 'soil',
+'roll', 'temperature', 'finger', 'industry', 'value', 'fight', 'lie',
+'beat', 'excite', 'natural', 'view', 'sense', 'ear', 'else', 'quite',
+'broke', 'case', 'middle', 'kill', 'son', 'lake', 'moment', 'scale',
+'loud', 'spring', 'observe', 'child', 'straight', 'consonant',
+'nation', 'dictionary', 'milk', 'speed', 'method', 'organ', 'pay',
+'age', 'section', 'dress', 'cloud', 'surprise', 'quiet', 'stone',
+'tiny', 'climb', 'cool', 'design', 'poor', 'lot', 'experiment',
+'bottom', 'key', 'iron', 'single', 'stick', 'flat', 'twenty', 'skin',
+'smile', 'crease', 'hole', 'trade', 'melody', 'trip', 'office',
+'receive', 'row', 'mouth', 'exact', 'symbol', 'die', 'least',
+'trouble', 'shout', 'except', 'wrote', 'seed', 'tone', 'join',
+'suggest', 'clean', 'break', 'lady', 'yard', 'rise', 'bad', 'blow',
+'oil', 'blood', 'touch', 'grew', 'cent', 'mix', 'team', 'wire',
+'cost', 'lost', 'brown', 'wear', 'garden', 'equal', 'sent', 'choose',
+'fell', 'fit', 'flow', 'fair', 'bank', 'collect', 'save', 'control',
+'decimal', 'gentle', 'woman', 'captain', 'practice', 'separate',
+'difficult', 'doctor', 'please', 'protect', 'noon', 'whose', 'locate',
+'ring', 'character', 'insect', 'caught', 'period', 'indicate',
+'radio', 'spoke', 'atom', 'human', 'history', 'effect', 'electric',
+'expect', 'crop', 'modern', 'element', 'hit', 'student', 'corner',
+'party', 'supply', 'bone', 'rail', 'imagine', 'provide', 'agree',
+'thus', 'capital', 'won\'t', 'chair', 'danger', 'fruit', 'rich',
+'thick', 'soldier', 'process', 'operate', 'guess', 'necessary',
+'sharp', 'wing', 'create', 'neighbor', 'wash', 'bat', 'rather',
+'crowd', 'corn', 'compare', 'poem', 'string', 'bell', 'depend',
+'meat', 'rub', 'tube', 'famous', 'dollar', 'stream', 'fear', 'sight',
+'thin', 'triangle', 'planet', 'hurry', 'chief', 'colony', 'clock',
+'mine', 'tie', 'enter', 'major', 'fresh', 'search', 'send', 'yellow',
+'gun', 'allow', 'print', 'dead', 'spot', 'desert', 'suit', 'current',
+'lift', 'rose', 'continue', 'block', 'chart', 'hat', 'sell',
+'success', 'company', 'subtract', 'event', 'particular', 'deal',
+'swim', 'term', 'opposite', 'wife', 'shoe', 'shoulder', 'spread',
+'arrange', 'camp', 'invent', 'cotton', 'born', 'determine', 'quart',
+'nine', 'truck', 'noise', 'level', 'chance', 'gather', 'shop',
+'stretch', 'throw', 'shine', 'property', 'column', 'molecule',
+'select', 'wrong', 'gray', 'repeat', 'require', 'broad', 'prepare',
+'salt', 'nose', 'plural', 'anger', 'claim', 'continent', 'oxygen',
+'sugar', 'death', 'pretty', 'skill', 'women', 'season', 'solution',
+'magnet', 'silver', 'thank', 'branch', 'match', 'suffix',
+'especially', 'fig', 'afraid', 'huge', 'sister', 'steel', 'discuss',
+'forward', 'similar', 'guide', 'experience', 'score', 'apple',
+'bought', 'led', 'pitch', 'coat', 'mass', 'card', 'band', 'rope',
+'slip', 'win', 'dream', 'evening', 'condition', 'feed', 'tool',
+']total', 'basic', 'smell', 'valley', 'nor', 'double', 'seat',
+'arrive', 'master', 'track', 'parent', 'shore', 'division', 'sheet',
+'substance', 'favor', 'connect', 'post', 'spend', 'chord', 'fat',
+'glad', 'original', 'share', 'station', 'dad', 'bread', 'charge',
+'proper', 'bar', 'offer', 'segment', 'slave', 'duck', 'instant',
+'market', 'degree', 'populate', 'chick', 'dear', 'enemy', 'reply',
+'drink', 'occur', 'support', 'speech', 'nature', 'range', 'steam',
+'motion', 'path', 'liquid', 'log', 'meant', 'quotient', 'teeth',
+'shell', 'neck' ];
+
+var stemmer = natural.PorterStemmer;
+var tokenizer = new natural.TreebankWordTokenizer();
+
+var getTextNodesIn = function (node, includeWhitespaceNodes) {
+ var textNodes = [], whitespace = /^\s*$/;
+
+ function getTextNodes(node) {
+ if (node.nodeType == 3) {
+ if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {
+ textNodes.push(node);
+ }
+ } else {
+ for (var i = 0, len = node.childNodes.length; i < len; ++i) {
+ getTextNodes(node.childNodes[i]);
+ }
+ }
+ }
+
+ getTextNodes(node);
+ return textNodes;
+};
+
+var isCommonWord = function(word) {
+ return _.contains(words, word);
+};
+
+var isPunctuation = function(str) {
+ return _.contains(['&', '%', '(', ')', ';', ':', '.', ',', '"', "'", '`', '!', '?' ], str);
+};
+
+
+var markWords = function(obj, report) {
+
+ var mergeFn = function(obj, tok) {
+ if (isCommonWord(tok) || isPunctuation(tok) || _.isNumber(tok)) {
+ obj.append(tok + ' ');
+ } else {
+ // var newObj = "<span style='background-color: red'>"+tok+"</span> ");
+ var newObj = $("<span>"+tok+"</span> ");
+ obj.append(newObj);
+ report.error("The word '"+tok+"' is uncommon", newObj);
+ }
+ return obj;
+ };
+
+ var toks = tokenizer.tokenize(obj.text());
+
+ var uncommonWords = _.filter(toks, isCommonWord);
+ _.map(uncommonWords, function(w) {
+ report.error("The word '"+w+"' is uncommon", newObj);
+ });
+
+// var rawObj = $('<p></p>', {id: 'text'});
+// var newObj = _.reduce(toks, mergeFn , rawObj);
+
+// obj.replaceWith(newObj);
+};
+
+exports.rule = function(report) {
+ report.error("bork");
+ console.log("checking for rare words");
+ fiveui.query('body').each(
+ function(i){
+ var nodes = getTextNodesIn($(this));
+ _.map(nodes, function(n){
+ console.log(n);
+ markWords(n, report);
+ });
+ });
+}; \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/natural/upGoerFive.json b/exampleData/ruleSets/language-processing/natural/upGoerFive.json
new file mode 100644
index 0000000..1b893fb
--- /dev/null
+++ b/exampleData/ruleSets/language-processing/natural/upGoerFive.json
@@ -0,0 +1,5 @@
+{
+ "name": "Locate Uncommon Words.",
+ "description": "Searches for words that may be confusing to some readers.",
+ "rules": ["upGoerFive-gen.js"]
+} \ No newline at end of file
diff --git a/exampleData/ruleSets/language-processing/node-browserify b/exampleData/ruleSets/language-processing/node-browserify
new file mode 160000
+Subproject 9c89881862adc6922a5595726b28486bd3f6e0d