From 8b2c23a8030e0f69da6bfb2b6ee18745604a32ad Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 29 Feb 2020 13:10:20 -0500 Subject: [PATCH 01/24] actual 13.1.1 release - remove dry-run flag on github workflow --- .github/workflows/release.yml | 2 +- builds/compromise-tokenize.js | 2 +- builds/compromise.js | 4 ++-- builds/compromise.js.map | 2 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 4 ++-- package.json | 2 +- src/_version.js | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7f2e14a74..88e250039 100755 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,6 +61,6 @@ jobs: - name: publish run: | echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > .npmrc - npm publish --dry-run + npm publish env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 26d1fa17e..7eaea0efe 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},M={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},W={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},M,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=L(this,e)[0]),r}},G=Object.assign({},_,T,z,q,W);function H(){return"undefined"!=typeof window&&window.document}var U=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,G),Object.assign(rt.prototype,et);var nt=rt,it={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ot(o)),!0===t.trim&&(o=o.trim()),o}},at={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ut=/[.?!]\s*$/,ct=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ut.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,r){var n=t.terms(),i=e.terms();ct(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ht=/ /,ft=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ht.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},pt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},dt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return ft(this,t,e),this},delete:function(t){return pt(this,t),this},replace:function(t,e){var r=this.length;lt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,pt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},gt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},vt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},mt=Object.assign({},it,st,at,dt,gt,vt),bt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},yt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=$t(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},Pt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},xt=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,jt=new RegExp(/^<(\S+)>/),Ot=function(t){return t[t.length-1]},Et=function(t){return t[0]},Ct=function(t){return t.substr(1)},_t=function(t){return t.substr(0,t.length-1)},Tt=function(t){return t=Ct(t),t=_t(t)},Ft=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Ot(e)&&(n.end=!0,e=_t(e)),"^"===Et(e)&&(n.start=!0,e=Ct(e)),("["===Et(e)||"]"===Ot(e))&&(n.named=!0,"["===Et(e)?n.groupType="]"===Ot(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Et(e))){var o=jt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Ot(e)&&(n.greedy=!0,e=_t(e)),"*"!==e&&"*"===Ot(e)&&"\\*"!==e&&(n.greedy=!0,e=_t(e)),"?"===Ot(e)&&(n.optional=!0,e=_t(e)),"!"===Et(e)&&(n.negative=!0,e=Ct(e)),"("===Et(e)&&")"===Ot(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Ct(n.choices[0]);var s=n.choices.length-1;n.choices[s]=_t(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Et(e)&&"/"===Ot(e))return e=Tt(e),n.regex=new RegExp(e),n;if("~"===Et(e)&&"~"===Ot(e))return e=Tt(e),n.soft=!0,n.word=e,n}return!0===xt.test(e)&&(e=e.replace(xt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Et(e)?(n.tag=Ct(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Et(e)?(n.method=Ct(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Nt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Ft),r=Nt(r)},St=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Vt(e)),!0===bt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=At(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),Pt(i,e,o)}for(var h=0;hi.length);h+=1){var f=At(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return Pt(i,e,o)}return Pt(i,e,o)},zt=function(t,e){var r={};St(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Bt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=St(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return St(this,t,!0).length>0},not:function(t){var e=this,r=zt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},Dt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Dt.prototype.buildFrom=function(t,e,r){var n=new Dt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Dt.prototype,Bt),Object.assign(Dt.prototype,mt);var qt={term:"terms"};Object.keys(qt).forEach((function(t){return Dt.prototype[t]=Dt.prototype[qt[t]]}));var It=Dt,Lt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Lt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Lt(e)};for(var Mt=Lt,Wt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Gt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Ut=/[ .][A-Z]\.? *$/i,Qt=/(?:\u2026|\.{2,}) *$/,Rt=/((?:\r?\n|\r)+)/,Zt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Jt=/^\s+/,Yt=function(t,e){if(!0===Ut.test(t))return!1;if(!0===Qt.test(t))return!1;if(!1===Zt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Kt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Rt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Kt(t,e);n=n.map((function(t){return se(t)})),r=r||new Mt;var i=n.map((function(t){t=t.map((function(t){var e=new nt(t);return r.add(e),e})),Wt(t);var e=new It(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ue=function(t,e){var r=new Mt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new nt(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Wt(i),new It(i[0].id,i.length,r)}))},ce={},le=["Person","Place","Organization"],he={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},fe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pe={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},de=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ge={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:de},Conjunction:{notA:de},Preposition:{notA:de},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ve={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},me=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ve[e]?t[e].color=ve[e]:t[e].isA.some((function(r){return!!ve[r]&&(t[e].color=ve[r],!0)}))})),t},be=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Se.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},De(t),r)).Gerund&&(r.Gerund=Ie.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Ie.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Ie.PresentTense(t)),r},Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],We=[/ary$/],Ge={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},He=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Ue=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qe=[/ary$/,/ous$/],Re={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ze=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Je={toSuperlative:function(t){if(Ge.hasOwnProperty(t))return Ge[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=tr(t);return null!==n?n:Xe.test(t)?t+"es":t+"s"},rr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],nr=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),br={tag:function(t,e){return t?(mr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(mr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},yr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},$r=function(t){return t.split(/[ -]/g)},wr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=$r(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=xr(s)),o=ae(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},jr=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Cr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Tr=(_r.json,_r.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Vr.alphabetical=Vr.alpha,Vr.wordcount=Vr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},zr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Sr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===tn.test(o)){var a=o.replace(tn,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},nn=function(t){var e=t.termList();return rn(e,t.world),t},on=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},sn=/\./,an=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===sn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},un=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},cn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return nn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();In.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new In(t,this,this.world)},In.prototype.fromText=function(t){var e=ae(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(In.prototype,qn.misc),Object.assign(In.prototype,qn.selections),Dn(In);var Ln={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ln).forEach((function(t){return In.prototype[t]=In.prototype[Ln[t]]}));var Mn=In;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ae(t,r),i=new Mn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ae(t,n),o=new Mn(i,null,n);return e&&nn(o),o},n.extend=function(t){return t(Mn,r,this,It,nt,Mt),this},n.fromJSON=function(t){var e=ue(t,r);return new Mn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.version="13.1.0",n.import=n.load,n}(new fr)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},M={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},W={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},M,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=L(this,e)[0]),r}},G=Object.assign({},_,T,z,q,W);function H(){return"undefined"!=typeof window&&window.document}var U=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,G),Object.assign(rt.prototype,et);var nt=rt,it={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ot(o)),!0===t.trim&&(o=o.trim()),o}},at={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ut=/[.?!]\s*$/,ct=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ut.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,r){var n=t.terms(),i=e.terms();ct(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ht=/ /,ft=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ht.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},pt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},dt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return ft(this,t,e),this},delete:function(t){return pt(this,t),this},replace:function(t,e){var r=this.length;lt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,pt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},gt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},vt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},mt=Object.assign({},it,st,at,dt,gt,vt),bt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},yt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=$t(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},Pt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},xt=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,jt=new RegExp(/^<(\S+)>/),Ot=function(t){return t[t.length-1]},Et=function(t){return t[0]},Ct=function(t){return t.substr(1)},_t=function(t){return t.substr(0,t.length-1)},Tt=function(t){return t=Ct(t),t=_t(t)},Ft=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Ot(e)&&(n.end=!0,e=_t(e)),"^"===Et(e)&&(n.start=!0,e=Ct(e)),("["===Et(e)||"]"===Ot(e))&&(n.named=!0,"["===Et(e)?n.groupType="]"===Ot(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Et(e))){var o=jt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Ot(e)&&(n.greedy=!0,e=_t(e)),"*"!==e&&"*"===Ot(e)&&"\\*"!==e&&(n.greedy=!0,e=_t(e)),"?"===Ot(e)&&(n.optional=!0,e=_t(e)),"!"===Et(e)&&(n.negative=!0,e=Ct(e)),"("===Et(e)&&")"===Ot(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Ct(n.choices[0]);var s=n.choices.length-1;n.choices[s]=_t(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Et(e)&&"/"===Ot(e))return e=Tt(e),n.regex=new RegExp(e),n;if("~"===Et(e)&&"~"===Ot(e))return e=Tt(e),n.soft=!0,n.word=e,n}return!0===xt.test(e)&&(e=e.replace(xt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Et(e)?(n.tag=Ct(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Et(e)?(n.method=Ct(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Nt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Ft),r=Nt(r)},St=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Vt(e)),!0===bt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=At(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),Pt(i,e,o)}for(var h=0;hi.length);h+=1){var f=At(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return Pt(i,e,o)}return Pt(i,e,o)},zt=function(t,e){var r={};St(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Bt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=St(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return St(this,t,!0).length>0},not:function(t){var e=this,r=zt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},Dt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Dt.prototype.buildFrom=function(t,e,r){var n=new Dt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Dt.prototype,Bt),Object.assign(Dt.prototype,mt);var qt={term:"terms"};Object.keys(qt).forEach((function(t){return Dt.prototype[t]=Dt.prototype[qt[t]]}));var It=Dt,Lt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Lt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Lt(e)};for(var Mt=Lt,Wt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Gt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Ut=/[ .][A-Z]\.? *$/i,Qt=/(?:\u2026|\.{2,}) *$/,Rt=/((?:\r?\n|\r)+)/,Zt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Jt=/^\s+/,Yt=function(t,e){if(!0===Ut.test(t))return!1;if(!0===Qt.test(t))return!1;if(!1===Zt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Kt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Rt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Kt(t,e);n=n.map((function(t){return se(t)})),r=r||new Mt;var i=n.map((function(t){t=t.map((function(t){var e=new nt(t);return r.add(e),e})),Wt(t);var e=new It(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ue=function(t,e){var r=new Mt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new nt(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Wt(i),new It(i[0].id,i.length,r)}))},ce={},le=["Person","Place","Organization"],he={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},fe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pe={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},de=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ge={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:de},Conjunction:{notA:de},Preposition:{notA:de},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ve={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},me=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ve[e]?t[e].color=ve[e]:t[e].isA.some((function(r){return!!ve[r]&&(t[e].color=ve[r],!0)}))})),t},be=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Se.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},De(t),r)).Gerund&&(r.Gerund=Ie.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Ie.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Ie.PresentTense(t)),r},Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],We=[/ary$/],Ge={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},He=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Ue=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qe=[/ary$/,/ous$/],Re={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ze=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Je={toSuperlative:function(t){if(Ge.hasOwnProperty(t))return Ge[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=tr(t);return null!==n?n:Xe.test(t)?t+"es":t+"s"},rr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],nr=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),br={tag:function(t,e){return t?(mr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(mr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},yr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},$r=function(t){return t.split(/[ -]/g)},wr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=$r(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=xr(s)),o=ae(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},jr=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Cr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Tr=(_r.json,_r.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Vr.alphabetical=Vr.alpha,Vr.wordcount=Vr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},zr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Sr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===tn.test(o)){var a=o.replace(tn,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},nn=function(t){var e=t.termList();return rn(e,t.world),t},on=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},sn=/\./,an=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===sn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},un=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},cn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return nn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();In.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new In(t,this,this.world)},In.prototype.fromText=function(t){var e=ae(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(In.prototype,qn.misc),Object.assign(In.prototype,qn.selections),Dn(In);var Ln={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ln).forEach((function(t){return In.prototype[t]=In.prototype[Ln[t]]}));var Mn=In;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ae(t,r),i=new Mn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ae(t,n),o=new Mn(i,null,n);return e&&nn(o),o},n.extend=function(t){return t(Mn,r,this,It,nt,Mt),this},n.fromJSON=function(t){var e=ue(t,r);return new Mn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.version="13.1.1",n.import=n.load,n}(new fr)})); diff --git a/builds/compromise.js b/builds/compromise.js index 95e4dd70e..8e8b76381 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -1,4 +1,4 @@ -/* compromise 13.1.0 MIT */ +/* compromise 13.1.1 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -3372,7 +3372,7 @@ var fromJSON_1 = fromJSON; - var _version = '13.1.0'; + var _version = '13.1.1'; var _data = { "Comparative": "true¦better", diff --git a/builds/compromise.js.map b/builds/compromise.js.map index 86c7e8663..25095b92d 100644 --- a/builds/compromise.js.map +++ b/builds/compromise.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/postProcess.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/_linkTerms.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/01-tokenizer/fromJSON.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/match/checkCache.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/_lookup.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/07-cache.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/_offset.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/07-french.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/_unique.js","../src/02-tagger/04-correction/matches/01-misc.js","../src/02-tagger/04-correction/matches/02-dates.js","../src/02-tagger/04-correction/matches/03-noun.js","../src/02-tagger/04-correction/matches/04-adjective.js","../src/02-tagger/04-correction/matches/05-adverb.js","../src/02-tagger/04-correction/matches/06-value.js","../src/02-tagger/04-correction/matches/07-verbs.js","../src/02-tagger/04-correction/matches/08-place.js","../src/02-tagger/04-correction/matches/09-org.js","../src/02-tagger/04-correction/matches/10-people.js","../src/02-tagger/04-correction/matches/index.js","../src/02-tagger/04-correction/runner.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/02-tagger/tiny.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n // support optimized (one|two)\n if (reg.oneOf !== undefined) {\n return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n whitespace: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n if (n === undefined) {\n this.cache.terms = terms\n }\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n let p = this.buildFrom(this.start, this.length)\n p.cache = this.cache\n return p\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n\n/** get the full-sentence this phrase belongs to */\nexports.fullSentence = function() {\n let t = this.terms(0)\n //find first term in sentence\n while (t.prev) {\n t = this.pool.get(t.prev)\n }\n let start = t.id\n let len = 1\n //go to end of sentence\n while (t.next) {\n t = this.pool.get(t.next)\n len += 1\n }\n return this.buildFrom(start, len)\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.terms()\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n before.cache = {}\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n p.cache = {}\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n phrase.cache = {}\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","const makeId = require('../../Term/_id')\n// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n// get or create named group\nconst getOrCreateGroup = function(namedGroups, namedGroupId, terms, startIndex, group) {\n const g = namedGroups[namedGroupId]\n\n if (g) {\n return g\n }\n\n const { id } = terms[startIndex]\n\n namedGroups[namedGroupId] = {\n group: String(group),\n start: id,\n length: 0,\n }\n\n return namedGroups[namedGroupId]\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n const namedGroups = {}\n let previousGroupId = null\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n // Check if this reg has a named capture group\n const isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'\n let namedGroupId = null\n\n // Reuse previous capture group if same\n if (isNamedGroup) {\n const prev = regs[r - 1]\n if (prev && prev.named === reg.named && previousGroupId) {\n namedGroupId = previousGroupId\n } else {\n namedGroupId = makeId(reg.named)\n previousGroupId = namedGroupId\n }\n }\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return [false, null]\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return [false, null]\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n\n if (skipto === null) {\n return [false, null] //couldn't find it\n }\n\n // is it really this easy?....\n if (isNamedGroup) {\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named)\n\n // Update group\n g.length = skipto - t\n }\n\n t = skipto\n\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (\n reg.anything === true ||\n (reg.end === true &&\n reg.greedy === true &&\n index + t < length - 1 &&\n terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) ||\n terms[t].doesMatch(reg, index + t, length) === true\n ) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return [false, null]\n }\n }\n\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return [false, null] //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return [false, null] //greedy didn't reach the end\n }\n }\n if (isNamedGroup) {\n // Get or create capture group\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named)\n\n // Update group - add greedy or increment length\n if (t > 1 && reg.greedy) {\n g.length += t - startAt\n } else {\n g.length++\n }\n }\n\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return [false, null]\n }\n\n //return our result\n return [terms.slice(0, t), namedGroups]\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(({ match: arr }) => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\nconst captureName = new RegExp(/^<(\\S+)>/)\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.named = true\n\n if (start(w) === '[') {\n obj.groupType = end(w) === ']' ? 'single' : 'start'\n } else {\n obj.groupType = 'end'\n }\n\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n\n if (res.length >= 2) {\n obj.named = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const isNamed = function(capture) {\n return typeof capture === 'string' || typeof capture === 'number'\n}\n\nconst fillGroups = function(tokens) {\n let convert = false\n let index = -1\n let current\n\n //'fill in' capture groups between start-end\n for (let i = 0; i < tokens.length; i++) {\n const n = tokens[i]\n\n // Give name to un-named single tokens\n if (n.groupType === 'single' && n.named === true) {\n index += 1\n n.named = index\n continue\n }\n\n // Start converting tokens\n if (n.groupType === 'start') {\n convert = true\n if (isNamed(n.named)) {\n current = n.named\n } else {\n index += 1\n current = index\n }\n }\n\n // Ensure this token has the right name\n if (convert) {\n n.named = current\n }\n\n // Stop converting tokens\n if (n.groupType === 'end') {\n convert = false\n }\n }\n return tokens\n}\n\nconst useOneOf = function(tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // are they all straight non-optional words?\n let shouldPack = token.choices.every(c => c.optional !== true && c.negative !== true && c.word !== undefined)\n if (shouldPack === true) {\n let oneOf = {}\n token.choices.forEach(c => (oneOf[c.word] = true))\n token.oneOf = oneOf\n delete token.choices\n }\n }\n return token\n })\n}\n\nconst postProcess = function(tokens) {\n // ensure all capture groups are filled between start and end\n // give all capture groups names\n let count = tokens.filter(t => t.groupType).length\n if (count > 0) {\n tokens = fillGroups(tokens)\n }\n // convert 'choices' format to 'oneOf' format\n tokens = useOneOf(tokens)\n // console.log(tokens)\n\n return tokens\n}\nmodule.exports = postProcess\n","const parseToken = require('./parseToken')\nconst postProcess = require('./postProcess')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*(?:<\\S+>)?\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\n\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let [match, groups] = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n match = match.filter(m => m)\n matches.push({ match, groups })\n }\n\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let [match, groups] = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push({ match, groups })\n\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(({ match: ts }) => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(regs, justOne = false) {\n let matches = matchAll(this, regs, justOne)\n //make them phrase objects\n matches = matches.map(({ match, groups }) => {\n let p = this.buildFrom(match[0].id, match.length, groups)\n p.cache.terms = match\n return p\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(regs) {\n let matches = matchAll(this, regs, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(regs) {\n let matches = notMatch(this, regs)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n Object.defineProperty(this, 'groups', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length, groups) {\n let p = new Phrase(id, length, this.pool)\n //copy-over or replace capture-groups too\n if (groups && Object.keys(groups).length > 0) {\n p.groups = groups\n } else {\n p.groups = this.groups\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//add forward/backward 'linked-list' prev/next ids\nconst linkTerms = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\nmodule.exports = linkTerms\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n linkTerms(terms)\n\n //return phrase objects\n let p = new Phrase(terms[0].id, terms.length, pool)\n p.cache.terms = terms\n return p\n })\n //return them ready for a Document object\n return phrases\n}\n\nmodule.exports = fromText\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\n\nconst fromJSON = function(json, world) {\n let pool = new Pool()\n let phrases = json.map((p, k) => {\n let terms = p.terms.map((o, i) => {\n let term = new Term(o.text)\n term.pre = o.pre !== undefined ? o.pre : ''\n if (o.post === undefined) {\n o.post = ' '\n //no given space for very last term\n if (i >= p.terms.length - 1) {\n o.post = '. '\n if (k >= p.terms.length - 1) {\n o.post = '.'\n }\n }\n }\n term.post = o.post !== undefined ? o.post : ' '\n\n if (o.tags) {\n o.tags.forEach(tag => term.tag(tag, '', world))\n }\n pool.add(term)\n return term\n })\n //add prev/next links\n linkTerms(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\nmodule.exports = fromJSON\n","module.exports = '13.1.0'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"Date\": \"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n NickName: {\n isA: 'Person',\n notA: ['FirstName', 'LastName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName', 'Value'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n // assigned from plugin, for example\n if (tags[k].color) {\n tags[k].color = tags[k].color\n return\n }\n // defined above\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerms = function() {\n return this.match('^.')\n}\nexports.firstTerm = exports.firstTerms\n\n/** grab the last term for every match */\nexports.lastTerms = function() {\n return this.match('.$')\n}\nexports.lastTerm = exports.lastTerms\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n\n/* grab named capture group terms as object */\nconst getGroups = function(doc) {\n let res = {}\n const allGroups = {}\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n const groups = Object.keys(phrase.groups).map(k => phrase.groups[k])\n for (let j = 0; j < groups.length; j++) {\n const { group, start, length } = groups[j]\n\n if (!allGroups[group]) {\n allGroups[group] = []\n }\n allGroups[group].push(phrase.buildFrom(start, length))\n }\n }\n const keys = Object.keys(allGroups)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n res[key] = doc.buildFrom(allGroups[key])\n }\n return res\n}\n\nconst getOneName = function(doc, name) {\n const arr = []\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n let keys = Object.keys(phrase.groups)\n keys = keys.filter(id => phrase.groups[id].group === name)\n keys.forEach(id => {\n arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length))\n })\n }\n return doc.buildFrom(arr)\n}\n\n/** grab named capture group results */\nexports.groups = function(target) {\n if (target === undefined) {\n return getGroups(this)\n }\n if (typeof target === 'number') {\n target = String(target)\n }\n return getOneName(this, target) || this.buildFrom([])\n}\nexports.group = exports.groups\n\n/** get the full-sentence each phrase belongs to */\nexports.sentences = function(n) {\n let arr = []\n this.list.forEach(p => {\n arr.push(p.fullSentence())\n })\n if (typeof n === 'number') {\n return this.buildFrom([arr[n]])\n }\n return this.buildFrom(arr)\n}\nexports.sentence = exports.sentences\n","// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: needTags, words: needWords }\n}\n\nconst failFast = function(doc, regs) {\n if (doc._cache && doc._cache.set === true) {\n let { words, tags } = cacheRequired(regs)\n //check required words\n for (let i = 0; i < words.length; i++) {\n if (doc._cache.words[words[i]] === undefined) {\n return false\n }\n }\n //check required tags\n for (let i = 0; i < tags.length; i++) {\n if (doc._cache.tags[tags[i]] === undefined) {\n return false\n }\n }\n }\n return true\n}\nmodule.exports = failFast\n","const parseSyntax = require('../match/syntax')\nconst checkCache = require('../match/checkCache')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg, name) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n\n if (name !== undefined && name !== null && name !== '') {\n return this.buildFrom(matches).groups(name)\n }\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0 || checkCache(this, regs) === false) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return false\n }\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n // if its a doc, return one result\n if (res && res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n //remove nulls\n list = list.filter(x => x)\n // return an empty response\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","// const tokenize = require('../../01-tokenizer/02-words')\nconst tokenize = function(str) {\n return str.split(/[ -]/g)\n}\n// take a list of strings\n// look them up in the document\nconst buildTree = function(termList, values = []) {\n let root = {}\n // parse our input\n termList.forEach((str, i) => {\n let val = true\n if (values[i] !== undefined) {\n val = values[i]\n }\n // some rough normalization\n str = (str || '').toLowerCase()\n str = str.replace(/[,;.!?]+$/, '')\n let arr = tokenize(str).map(s => s.trim())\n root[arr[0]] = root[arr[0]] || {}\n if (arr.length === 1) {\n root[arr[0]].value = val\n } else {\n root[arr[0]].more = root[arr[0]].more || []\n root[arr[0]].more.push({\n rest: arr.slice(1),\n value: val,\n })\n }\n })\n // sort by longest-first?\n // console.log(JSON.stringify(root, null, 2))\n return root\n}\n\nconst fastLookup = function(termList, values, doc) {\n let root = buildTree(termList, values)\n let found = []\n // each phrase\n for (let i = 0; i < doc.list.length; i++) {\n const p = doc.list[i]\n let terms = p.terms()\n\n let words = terms.map(t => t.reduced)\n // each word\n for (let w = 0; w < words.length; w++) {\n if (root[words[w]] !== undefined) {\n // is it a multi-word match?\n if (root[words[w]].more !== undefined) {\n root[words[w]].more.forEach(more => {\n // is it too-long?\n if (words[w + more.rest.length] === undefined) {\n return\n }\n // compare each subsequent term\n let everyTerm = more.rest.every((word, r) => {\n return word === words[w + r + 1]\n })\n if (everyTerm === true) {\n found.push({ id: p.terms()[w].id, value: more.value, length: more.rest.length + 1 })\n }\n })\n }\n // is it a single-word match?\n if (root[words[w]].value !== undefined) {\n found.push({ id: p.terms()[w].id, value: root[words[w]].value, length: 1 })\n }\n }\n }\n }\n return found\n}\nmodule.exports = fastLookup\n","const lookup = require('./_lookup')\n\n// compare one term and one match\n// const doesMatch = function(term, str) {\n// if (str === '') {\n// return false\n// }\n// return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n// }\n\nconst isObject = function(obj) {\n return obj && Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n let values = []\n //is it a {key:val} object?\n let isObj = isObject(arr)\n if (isObj === true) {\n arr = Object.keys(arr).map(k => {\n values.push(arr[k])\n return k\n })\n }\n // support .lookup('foo')\n if (typeof arr === 'string') {\n arr = [arr]\n }\n\n //make sure we go fast.\n if (this._cache.set !== true) {\n this.cache()\n }\n\n let found = lookup(arr, values, this)\n let p = this.list[0]\n // make object response\n if (isObj === true) {\n let byVal = {}\n found.forEach(o => {\n byVal[o.value] = byVal[o.value] || []\n byVal[o.value].push(p.buildFrom(o.id, o.length))\n })\n Object.keys(byVal).forEach(k => {\n byVal[k] = this.buildFrom(byVal[k])\n })\n return byVal\n }\n // otherwise, make array response:\n found = found.map(o => p.buildFrom(o.id, o.length))\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n let words = {}\n let tags = {}\n this._cache.words = words\n this._cache.tags = tags\n this._cache.set = true\n this.list.forEach((p, i) => {\n p.cache = p.cache || {}\n //p.terms get cached automatically\n let terms = p.terms()\n // cache all the terms\n terms.forEach(t => {\n if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) {\n return //skip prototype words\n }\n words[t.reduced] = words[t.reduced] || []\n words[t.reduced].push(i)\n\n Object.keys(t.tags).forEach(tag => {\n tags[tag] = tags[tag] || []\n tags[tag].push(i)\n })\n\n // cache root-form on Term, too\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this._cache = {}\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc._cache = {}\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\nconst calcOffset = function(doc, result, options) {\n // calculate offsets for each term\n let offsets = termOffsets(doc.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n // let len = o.terms.reduce((n, t, i) => {\n // n += t.offset.length || 0\n // //add whitespace, too\n // console.log(t.post)\n // return n\n // }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = o.text.length\n })\n }\n}\nmodule.exports = calcOffset\n","const offsets = require('./_offset')\nconst jsonDefaults = { text: true, terms: true, trim: true }\n\n//some options have dependents\nconst setOptions = function(options) {\n options = Object.assign({}, jsonDefaults, options)\n\n if (options.unique) {\n options.reduced = true\n }\n //offset calculation requires these options to be on\n if (options.offset) {\n options.text = true\n if (!options.terms || options.terms === true) {\n options.terms = {}\n }\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n return options\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n\n options = setOptions(options)\n\n // cache root strings beforehand, if necessary\n if (options.root === true) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n offsets(this, result, options)\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n let tagset = doc.world.tags\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags, world) {\n tags = tags.map(tag => {\n if (!world.tags.hasOwnProperty(tag)) {\n return tag\n }\n const c = world.tags[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n main.cache = {}\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n p.cache = {}\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n require('./07-cache'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^woo+a*?h?$/, 'Expression'], //whoaa, wooo\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length <= 3) {\n term.tag('Acronym', 'acronym-org', world)\n }\n if (term.tags.Organization && term.isUpperCase() && term.text.length <= 6) {\n term.tag('Acronym', 'acronym-org-case', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const contraction = /^(l|c|d|j|m|n|qu|s|t)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z\\u00C0-\\u00FF]+)$/i\n// basic support for ungendered french contractions\n// not perfect, but better than nothing, to support matching on french text.\n\nconst french = {\n l: 'le', // l'amour\n c: 'ce', // c'est\n d: 'de', // d'amerique\n j: 'je', // j'aime\n m: 'me', // m'appelle\n n: 'ne', // n'est\n qu: 'que', // qu'il\n s: 'se', // s'appelle\n t: 'tu', // t'aime\n}\n\nconst checkFrench = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null || french.hasOwnProperty(parts[1]) === false) {\n return null\n }\n let arr = [french[parts[1]], parts[2]]\n if (arr[0] && arr[1]) {\n return arr\n }\n return null\n}\nmodule.exports = checkFrench\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst checkFrench = require('./07-french')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n found = found || checkFrench(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n // keep tag NumberRange, if we had it\n if (p.has('#NumberRange') === true) {\n doc.buildFrom([newPhrase]).tag('NumberRange')\n }\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","const hasWord = function(doc, word) {\n let arr = doc._cache.words[word] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\nconst hasTag = function(doc, tag) {\n let arr = doc._cache.tags[tag] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\n\n//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //exactly like\n let m = hasWord(doc, 'like')\n m.match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n\n //the orange.\n m = hasTag(doc, 'Adjective')\n m.match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n\n // Firstname x (dangerous)\n m = hasTag(doc, 'FirstName')\n m.match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#Pronoun')\n .lastTerm()\n .tag('#LastName', 'firstname-noun')\n\n //three trains / one train\n m = hasTag(doc, 'Value')\n m = m.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n\n // well i've been...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n //been walking\n m = hasTag(doc, 'Gerund')\n m.match(`(be|been) (#Adverb|not)+? #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n doc\n .match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n\n //possessives\n //'her match' vs 'let her match'\n m = hasTag(doc, 'Possessive')\n m = m.match('#Possessive [#Infinitive]', 0)\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","const unique = function(arr) {\n let obj = {}\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = true\n }\n return Object.keys(obj)\n}\nmodule.exports = unique\n","// order matters\nconst list = [\n // ==== Mutliple tags ====\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n // u r cool\n { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' },\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', reason: 'thing-doer' },\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n //'u' as pronoun\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n\n // ==== Determiners ====\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n //that car goes\n { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // ==== Propositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //fix for busted-up phrasalVerbs\n { match: '#Noun [#Particle]', group: 0, tag: 'Preposition', reason: 'repair-noPhrasal' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // ==== Questions ====\n //the word 'how'\n { match: '^how', tag: 'QuestionWord', reason: 'how-question' },\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // //the word 'which'\n { match: '^which', tag: 'QuestionWord', reason: 'which-question' },\n { match: '[which] . (#Noun)+ #Pronoun', group: 0, tag: 'QuestionWord', reason: 'which-question2' },\n { match: 'which', tag: 'QuestionWord', reason: 'which-question3' },\n\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n {\n match: '[(who|what|where|why|how|when)] #Noun #Adverb? #Infinitive not? #Gerund',\n group: 0,\n tag: 'Conjunction',\n reason: 'when i go fishing',\n },\n]\n\nmodule.exports = list\n","//Dates: 'june' or 'may'\nconst dates = '(april|june|may|jan|august|eve)'\n\nlet list = [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' }, // the captain who\n\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `this [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `next [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `last [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n // march 5th\n { match: `[(march|may)] the? #Value`, group: 0, tag: 'Month', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? [(march|may)]`, group: 0, tag: 'Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Infinitive', reason: 'quickly-march' },\n //march quickly\n { match: `(march|may) [#Adverb]`, group: 0, tag: 'Infinitive', reason: 'march-quickly' },\n\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n\n // in june\n { match: `in [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `during [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `on [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `by [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `before [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `#Date [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n // june 1992\n { match: `${dates} #Value`, tag: 'Date', reason: 'june-5th' },\n { match: `${dates} #Date`, tag: 'Date', reason: 'june-5th' },\n // June Smith\n { match: `${dates} #ProperNoun`, tag: 'Person', reason: 'june-smith', safe: true },\n // june m. Cooper\n { match: `${dates} #Acronym? (#ProperNoun && !#Month)`, tag: 'Person', reason: 'june-smith-jr' },\n]\n\nmodule.exports = list\n","module.exports = [\n // ==== Plural ====\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n\n //big dreams, critical thinking\n { match: '#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' },\n //his fine\n { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' },\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n //'more' is not always an adverb\n { match: 'more #Noun', tag: 'Noun', reason: 'more-noun' },\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', reason: 'noun-list' }, //3 feet\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' }, // a bit\n { match: 'a [bit]', group: 0, tag: 'Noun', reason: 'bit-2' },\n\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the nice swim\n { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the orange is\n { match: '#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)', group: 0, tag: 'Noun', reason: 'the-adj-2' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //the test string\n { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' },\n //by a bear.\n { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' },\n //the wait to vote\n { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', reason: 'noun-of-noun' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n\n //her polling\n { match: '#Possessive [#Gerund]', group: 0, tag: 'Noun', reason: 'her-polling' },\n //her fines\n { match: '(his|her|its) [#PresentTense]', group: 0, tag: 'Noun', reason: 'its-polling' },\n\n //linear algebra\n {\n match: '(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'technical-noun',\n },\n // walk the walk\n { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' },\n { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' },\n { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' },\n\n //air-flow\n { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //different views than\n { match: '[#Verb] than', group: 0, tag: 'Noun', reason: 'correction' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a great run\n { match: '(a|an) #Adjective [(#Infinitive|#PresentTense)]', tag: 'Noun', reason: 'a|an2' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-noun-inf' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n //is mark hughes\n { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n //\n { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n]\n","const adjectives = '(misty|rusty|dusty|rich|randy)'\nlet list = [\n // all fell apart\n { match: '[all] #Determiner? #Noun', group: 0, tag: 'Adjective', reason: 'all-noun' },\n // very rusty\n { match: `#Adverb [${adjectives}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n // rusty smith\n { match: `${adjectives} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n { match: `${adjectives} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n //a staggering cost\n { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n // is f*ed up\n { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n]\n\nmodule.exports = list\n","module.exports = [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //cheering hard - dropped -ly's\n { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n]\n","module.exports = [\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n // ==== Money ====\n { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' },\n // ==== Unit ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //5 kg.\n { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n // ten grand\n { match: '#Value grand', tag: 'Value', reason: 'value-grand' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n { match: 'a #Value', tag: 'Value', reason: 'a-value' },\n\n // thousand and two\n {\n match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`,\n tag: 'Value',\n reason: 'magnitude-and-value',\n },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n]\n","const verbs = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\n\nlet list = [\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n //this rocks\n { match: '(this|that) [#Plural]', group: 0, tag: 'PresentTense', reason: 'this-verbs' },\n\n // ==== Auxiliary ====\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n // will walk\n { match: '[(do|does|will|have|had)] (not|#Adverb)? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', group: 0, tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', group: 0, tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', group: 0, tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' },\n //fall over\n { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: '[will #Adverb? not? #Adverb? be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|to|toward)', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n //he quickly foo\n { match: '#Noun #Adverb [#Noun]', group: 0, tag: 'Verb', reason: 'quickly-foo' },\n //will secure our\n { match: 'will [#Adjective]', group: 0, tag: 'Verb', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n\n //is eager to go\n { match: '#Copula [#Adjective to] #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n\n // would wade\n { match: `#Modal [${verbs}]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n { match: `#Adverb [${verbs}]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // wade smith\n { match: `${verbs} #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `${verbs} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n]\n\nmodule.exports = list\n","const places = '(paris|alexandria|houston|kobe|salvador|sydney)'\nlet list = [\n // ==== Region ====\n //West Norforlk\n {\n match: '(west|north|south|east|western|northern|southern|eastern)+ #Place',\n\n tag: 'Region',\n reason: 'west-norfolk',\n },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n //Foo District\n {\n match: '#ProperNoun+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)',\n tag: 'Region',\n reason: 'foo-district',\n },\n //District of Foo\n {\n match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun',\n tag: 'Region',\n reason: 'district-of-Foo',\n },\n\n // ==== Address ====\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n\n // in houston\n { match: `in [${places}]`, group: 0, tag: 'Place', reason: 'in-paris' },\n { match: `near [${places}]`, group: 0, tag: 'Place', reason: 'near-paris' },\n { match: `at [${places}]`, group: 0, tag: 'Place', reason: 'at-paris' },\n { match: `from [${places}]`, group: 0, tag: 'Place', reason: 'from-paris' },\n { match: `to [${places}]`, group: 0, tag: 'Place', reason: 'to-paris' },\n { match: `#Place [${places}]`, group: 0, tag: 'Place', reason: 'tokyo-paris' },\n // houston texas\n { match: `[${places}] #Place`, group: 0, tag: 'Place', reason: 'paris-france' },\n]\nmodule.exports = list\n","module.exports = [\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n]\n","const nouns =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\n\nconst months = '(january|april|may|june|jan|sep)' //summer|autumn\n\nlet list = [\n // ==== Honorific ====\n { match: '[(1st|2nd|first|second)] #Honorific', group: 0, tag: 'Honorific', reason: 'ordinal-honorific' },\n {\n match: '[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'ambg-honorifics',\n },\n\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n { match: '(lady|queen|sister) #ProperNoun', tag: 'FemaleName', reason: 'lady-titlecase', safe: true },\n { match: '(king|pope|father) #ProperNoun', tag: 'MaleName', reason: 'pope-titlecase', safe: true },\n //ambiguous-but-common firstnames\n {\n match: '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName',\n group: 0,\n tag: 'FirstName',\n reason: 'maybe-lastname',\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'NickName', reason: 'first-noun-last' },\n\n //my buddy\n { match: '#Possessive [#FirstName]', group: 0, tag: 'Person', reason: 'possessive-name' },\n { match: '#Acronym #ProperNoun', tag: 'Person', reason: 'acronym-titlecase', safe: true }, //ludwig van beethovan\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' }, //peter II\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' }, //'Professor Fink', 'General McCarthy'\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' }, //Doctor john smith jr\n //general pearson\n { match: '#Honorific #Person', tag: 'Person', reason: 'honorific-person' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'von der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of? #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //Foo U Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n //very common-but-ambiguous lastnames\n {\n match: '#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)',\n\n tag: 'Person',\n reason: 'bill-green',\n },\n // faith smith\n { match: `${nouns} #Person`, tag: 'Person', reason: 'ray-smith', safe: true },\n // faith m. Smith\n { match: `${nouns} #Acronym? #ProperNoun`, tag: 'Person', reason: 'ray-a-smith', safe: true },\n //give to april\n {\n match: `#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${months}]`,\n group: 0,\n tag: 'Person',\n reason: 'ambig-person',\n },\n // remind june\n { match: `#Infinitive [${months}]`, group: 0, tag: 'Person', reason: 'infinitive-person' },\n // may waits for\n { match: `[${months}] #PresentTense for`, group: 0, tag: 'Person', reason: 'ambig-active-for' },\n // may waits for\n { match: `[${months}] #PresentTense to`, group: 0, tag: 'Person', reason: 'ambig-active-to' },\n // april will\n { match: `[${months}] #Modal`, group: 0, tag: 'Person', reason: 'ambig-modal' },\n // would april\n { match: `#Modal [${months}]`, group: 0, tag: 'Person', reason: 'modal-ambig' },\n // it is may\n { match: `#Copula [${months}]`, group: 0, tag: 'Person', reason: 'is-may' },\n // may is\n { match: `[${months}] #Copula`, group: 0, tag: 'Person', reason: 'may-is' },\n // with april\n { match: `that [${months}]`, group: 0, tag: 'Person', reason: 'that-month' },\n // with april\n { match: `with [${months}]`, group: 0, tag: 'Person', reason: 'with-month' },\n // for april\n { match: `for [${months}]`, group: 0, tag: 'Person', reason: 'for-month' },\n // this april\n { match: `this [${months}]`, group: 0, tag: 'Month', reason: 'this-may' }, //maybe not 'this'\n // next april\n { match: `next [${months}]`, group: 0, tag: 'Month', reason: 'next-may' },\n // last april\n { match: `last [${months}]`, group: 0, tag: 'Month', reason: 'last-may' },\n // wednesday april\n { match: `#Date [${months}]`, group: 0, tag: 'Month', reason: 'date-may' },\n // may 5th\n { match: `[${months}] the? #Value`, group: 0, tag: 'Month', reason: 'may-5th' },\n // 5th of may\n { match: `#Value of [${months}]`, group: 0, tag: 'Month', reason: '5th-of-may' },\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', reason: 'title-de-title', safe: true },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#Person', reason: 'title-acro-noun', safe: true },\n //John Foo\n { match: '#FirstName (#Noun && #ProperNoun) #ProperNoun?', tag: 'Person', reason: 'firstname-titlecase' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n]\nmodule.exports = list\n","const parseSyntax = require('../../../Doc/match/syntax')\nconst unique = require('../_unique')\nlet matches = []\nmatches = matches.concat(require('./01-misc'))\nmatches = matches.concat(require('./02-dates'))\nmatches = matches.concat(require('./03-noun'))\nmatches = matches.concat(require('./04-adjective'))\nmatches = matches.concat(require('./05-adverb'))\nmatches = matches.concat(require('./06-value'))\nmatches = matches.concat(require('./07-verbs'))\nmatches = matches.concat(require('./08-place'))\nmatches = matches.concat(require('./09-org'))\nmatches = matches.concat(require('./10-people'))\n\n// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: unique(needTags), words: unique(needWords) }\n}\n\nconst allLists = function(m) {\n let more = []\n let lists = m.reg.filter(r => r.oneOf !== undefined)\n if (lists.length === 1) {\n let i = m.reg.findIndex(r => r.oneOf !== undefined)\n Object.keys(m.reg[i].oneOf).forEach(w => {\n let newM = Object.assign({}, m)\n newM.reg = newM.reg.slice(0)\n newM.reg[i] = Object.assign({}, newM.reg[i])\n newM.reg[i].word = w\n delete newM.reg[i].operator\n delete newM.reg[i].oneOf\n newM.reason += '-' + w\n more.push(newM)\n })\n }\n return more\n}\n\n// parse them\nlet all = []\nmatches.forEach(m => {\n m.reg = parseSyntax(m.match)\n let enumerated = allLists(m)\n if (enumerated.length > 0) {\n all = all.concat(enumerated)\n } else {\n all.push(m)\n }\n})\n\nall.forEach(m => {\n m.required = cacheRequired(m.reg)\n return m\n})\n\nmodule.exports = all\n","const matches = require('./matches')\nconst unique = require('./_unique')\n\n// return intersection of array-of-arrays\nconst hasEvery = function(chances) {\n if (chances.length === 0) {\n return []\n }\n let obj = {}\n chances.forEach(arr => {\n arr = unique(arr)\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = obj[arr[i]] || 0\n obj[arr[i]] += 1\n }\n })\n let res = Object.keys(obj)\n res = res.filter(k => obj[k] === chances.length)\n res = res.map(num => Number(num))\n return res\n}\n\nconst runner = function(doc) {\n //find phrases to try for each match\n matches.forEach(m => {\n let allChances = []\n m.required.words.forEach(w => {\n allChances.push(doc._cache.words[w] || [])\n })\n m.required.tags.forEach(tag => {\n allChances.push(doc._cache.tags[tag] || [])\n })\n\n let worthIt = hasEvery(allChances)\n if (worthIt.length === 0) {\n return\n }\n\n let phrases = worthIt.map(index => doc.list[index])\n let tryDoc = doc.buildFrom(phrases)\n // phrases getting tagged\n let match = tryDoc.match(m.reg, m.group)\n if (match.found) {\n if (m.safe === true) {\n match.tagSafe(m.tag, m.reason)\n } else {\n match.tag(m.tag, m.reason)\n }\n }\n })\n}\nmodule.exports = runner\n\n// console.log(hasEvery([[1, 2, 2, 3], [2, 3], []]))\n","const fixMisc = require('./fixMisc')\nconst runner = require('./runner')\n\n// runner: 250ms\n// misc: 40ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n runner(doc)\n fixMisc(doc)\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n // remove our cache, as it's invalidated now\n doc.uncache()\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc\n .splitAfter('@hasComma')\n .splitOn('(and|or) not?')\n .not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)', 0)\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('@hasComma').splitOn('(and|or) not?')\n }\n /** remove the conjunction */\n items() {\n return parse(this).things\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove(match) {\n return this.items()\n .if(match)\n .remove()\n }\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === false) {\n needsComma.post(', ')\n }\n return this\n }\n removeOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === true) {\n needsComma.post(' ')\n }\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m\n .match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')\n .if('#Noun')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]', 0)\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n if (parsed[k] && parsed[k].isA === 'Doc') {\n json.parts[k] = parsed[k].text('normal')\n } else {\n json.parts[k] = parsed[k]\n }\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n Object.defineProperty(this, '_cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const lexiconStep = require('./01-init/01-lexicon')\n\n//for the tokenize-only build, we want to keep\nconst smallTagger = function(doc) {\n let terms = doc.termList()\n lexiconStep(terms, doc.world)\n return doc\n}\nmodule.exports = smallTagger\n","const tokenize = require('./01-tokenizer')\nconst fromJSON = require('./01-tokenizer/fromJSON')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\nconst Phrase = require('./Phrase/Phrase')\nconst Term = require('./Term/Term')\nconst Pool = require('./01-tokenizer/Pool')\nconst tinyTagger = require('./02-tagger/tiny')\n\nfunction instance(worldInstance) {\n //blast-out our word-lists, just once\n let world = worldInstance\n\n /** parse and tag text into a compromise object */\n const nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n }\n\n /** parse text into a compromise object, without running POS-tagging */\n nlp.tokenize = function(text = '', lexicon) {\n let w = world\n if (lexicon) {\n w = w.clone()\n w.words = {}\n w.addWords(lexicon)\n }\n let list = tokenize(text, w)\n let doc = new Doc(list, null, w)\n if (lexicon) {\n tinyTagger(doc)\n }\n return doc\n }\n\n /** mix in a compromise-plugin */\n nlp.extend = function(fn) {\n fn(Doc, world, this, Phrase, Term, Pool)\n return this\n }\n\n /** create a compromise Doc object from .json() results */\n nlp.fromJSON = function(json) {\n let list = fromJSON(json, world)\n return new Doc(list, null, world)\n }\n\n /** make a deep-copy of the library state */\n nlp.clone = function() {\n return instance(world.clone())\n }\n\n /** log our decision-making for debugging */\n nlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n }\n\n /** current version of the library */\n nlp.version = version\n // alias\n nlp.import = nlp.load\n\n return nlp\n}\n\nmodule.exports = instance(new World())\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","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","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","oneOf","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","len","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","getGreedy","until","count","max","min","greedyTo","nextReg","getOrCreateGroup","namedGroups","namedGroupId","startIndex","group","tryHere","previousGroupId","isNamedGroup","named","hasNeeds","remain","greedy","skipto","startAt","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","captureName","RegExp","stripStart","stripEnd","stripBoth","parseToken","groupType","exec","Number","isNamed","capture","fillGroups","tokens","convert","current","useOneOf","token","shouldPack","isArray","byParentheses","byWords","words","byArray","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","groups","notMatch","ts","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","linkTerms","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","fromText","splitTerms","phrases","fromJSON","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","NickName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","JSON","parse","stringify","w2","from","addParent","reverse","doShallow","wordCount","eq","firstTerms","lastTerms","num","getGroups","allGroups","getOneName","target","fullSentence","cacheRequired","needTags","needWords","_cache","parseSyntax","checkCache","not","has","lookAhead","lookBehind","befores","tagTerms","safe","tagList","why","setTag","detachParent","sub","tokenize","buildTree","termList","val","more","rest","fastLookup","everyTerm","isObject","isObj","lookup","byVal","setRoot","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","termOffsets","elapsed","offsets","calcOffset","jsonDefaults","setOptions","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","alpha","left","right","byFreq","counts","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","lookups","afterThisWord","first","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","french","qu","checkFrench","isNumber","createPhrase","firstTerm","hasWord","hasTag","miscCorrection","notIf","ifNo","dates","months","allLists","lists","newM","enumerated","required","hasEvery","chances","runner","allChances","worthIt","tryDoc","corrections","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","needsComma","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","an","lookBefore","adj","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","verb","findNoun","vb","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","advb","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","smallTagger","lexiconStep","instance","worldInstance","nlp","addWords","tinyTagger","verbose","version","load"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/postProcess.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/_linkTerms.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/01-tokenizer/fromJSON.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/match/checkCache.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/_lookup.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/07-cache.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/_offset.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/07-french.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/_unique.js","../src/02-tagger/04-correction/matches/01-misc.js","../src/02-tagger/04-correction/matches/02-dates.js","../src/02-tagger/04-correction/matches/03-noun.js","../src/02-tagger/04-correction/matches/04-adjective.js","../src/02-tagger/04-correction/matches/05-adverb.js","../src/02-tagger/04-correction/matches/06-value.js","../src/02-tagger/04-correction/matches/07-verbs.js","../src/02-tagger/04-correction/matches/08-place.js","../src/02-tagger/04-correction/matches/09-org.js","../src/02-tagger/04-correction/matches/10-people.js","../src/02-tagger/04-correction/matches/index.js","../src/02-tagger/04-correction/runner.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/02-tagger/tiny.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n // support optimized (one|two)\n if (reg.oneOf !== undefined) {\n return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n whitespace: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n if (n === undefined) {\n this.cache.terms = terms\n }\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n let p = this.buildFrom(this.start, this.length)\n p.cache = this.cache\n return p\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n\n/** get the full-sentence this phrase belongs to */\nexports.fullSentence = function() {\n let t = this.terms(0)\n //find first term in sentence\n while (t.prev) {\n t = this.pool.get(t.prev)\n }\n let start = t.id\n let len = 1\n //go to end of sentence\n while (t.next) {\n t = this.pool.get(t.next)\n len += 1\n }\n return this.buildFrom(start, len)\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.terms()\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n before.cache = {}\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n p.cache = {}\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n phrase.cache = {}\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","const makeId = require('../../Term/_id')\n// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n// get or create named group\nconst getOrCreateGroup = function(namedGroups, namedGroupId, terms, startIndex, group) {\n const g = namedGroups[namedGroupId]\n\n if (g) {\n return g\n }\n\n const { id } = terms[startIndex]\n\n namedGroups[namedGroupId] = {\n group: String(group),\n start: id,\n length: 0,\n }\n\n return namedGroups[namedGroupId]\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n const namedGroups = {}\n let previousGroupId = null\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n // Check if this reg has a named capture group\n const isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'\n let namedGroupId = null\n\n // Reuse previous capture group if same\n if (isNamedGroup) {\n const prev = regs[r - 1]\n if (prev && prev.named === reg.named && previousGroupId) {\n namedGroupId = previousGroupId\n } else {\n namedGroupId = makeId(reg.named)\n previousGroupId = namedGroupId\n }\n }\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return [false, null]\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return [false, null]\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n\n if (skipto === null) {\n return [false, null] //couldn't find it\n }\n\n // is it really this easy?....\n if (isNamedGroup) {\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named)\n\n // Update group\n g.length = skipto - t\n }\n\n t = skipto\n\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (\n reg.anything === true ||\n (reg.end === true &&\n reg.greedy === true &&\n index + t < length - 1 &&\n terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) ||\n terms[t].doesMatch(reg, index + t, length) === true\n ) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return [false, null]\n }\n }\n\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return [false, null] //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return [false, null] //greedy didn't reach the end\n }\n }\n if (isNamedGroup) {\n // Get or create capture group\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named)\n\n // Update group - add greedy or increment length\n if (t > 1 && reg.greedy) {\n g.length += t - startAt\n } else {\n g.length++\n }\n }\n\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return [false, null]\n }\n\n //return our result\n return [terms.slice(0, t), namedGroups]\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(({ match: arr }) => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\nconst captureName = new RegExp(/^<(\\S+)>/)\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.named = true\n\n if (start(w) === '[') {\n obj.groupType = end(w) === ']' ? 'single' : 'start'\n } else {\n obj.groupType = 'end'\n }\n\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n\n if (res.length >= 2) {\n obj.named = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const isNamed = function(capture) {\n return typeof capture === 'string' || typeof capture === 'number'\n}\n\nconst fillGroups = function(tokens) {\n let convert = false\n let index = -1\n let current\n\n //'fill in' capture groups between start-end\n for (let i = 0; i < tokens.length; i++) {\n const n = tokens[i]\n\n // Give name to un-named single tokens\n if (n.groupType === 'single' && n.named === true) {\n index += 1\n n.named = index\n continue\n }\n\n // Start converting tokens\n if (n.groupType === 'start') {\n convert = true\n if (isNamed(n.named)) {\n current = n.named\n } else {\n index += 1\n current = index\n }\n }\n\n // Ensure this token has the right name\n if (convert) {\n n.named = current\n }\n\n // Stop converting tokens\n if (n.groupType === 'end') {\n convert = false\n }\n }\n return tokens\n}\n\nconst useOneOf = function(tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // are they all straight non-optional words?\n let shouldPack = token.choices.every(c => c.optional !== true && c.negative !== true && c.word !== undefined)\n if (shouldPack === true) {\n let oneOf = {}\n token.choices.forEach(c => (oneOf[c.word] = true))\n token.oneOf = oneOf\n delete token.choices\n }\n }\n return token\n })\n}\n\nconst postProcess = function(tokens) {\n // ensure all capture groups are filled between start and end\n // give all capture groups names\n let count = tokens.filter(t => t.groupType).length\n if (count > 0) {\n tokens = fillGroups(tokens)\n }\n // convert 'choices' format to 'oneOf' format\n tokens = useOneOf(tokens)\n // console.log(tokens)\n\n return tokens\n}\nmodule.exports = postProcess\n","const parseToken = require('./parseToken')\nconst postProcess = require('./postProcess')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*(?:<\\S+>)?\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\n\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let [match, groups] = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n match = match.filter(m => m)\n matches.push({ match, groups })\n }\n\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let [match, groups] = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push({ match, groups })\n\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(({ match: ts }) => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(regs, justOne = false) {\n let matches = matchAll(this, regs, justOne)\n //make them phrase objects\n matches = matches.map(({ match, groups }) => {\n let p = this.buildFrom(match[0].id, match.length, groups)\n p.cache.terms = match\n return p\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(regs) {\n let matches = matchAll(this, regs, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(regs) {\n let matches = notMatch(this, regs)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n Object.defineProperty(this, 'groups', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length, groups) {\n let p = new Phrase(id, length, this.pool)\n //copy-over or replace capture-groups too\n if (groups && Object.keys(groups).length > 0) {\n p.groups = groups\n } else {\n p.groups = this.groups\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//add forward/backward 'linked-list' prev/next ids\nconst linkTerms = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\nmodule.exports = linkTerms\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n linkTerms(terms)\n\n //return phrase objects\n let p = new Phrase(terms[0].id, terms.length, pool)\n p.cache.terms = terms\n return p\n })\n //return them ready for a Document object\n return phrases\n}\n\nmodule.exports = fromText\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\n\nconst fromJSON = function(json, world) {\n let pool = new Pool()\n let phrases = json.map((p, k) => {\n let terms = p.terms.map((o, i) => {\n let term = new Term(o.text)\n term.pre = o.pre !== undefined ? o.pre : ''\n if (o.post === undefined) {\n o.post = ' '\n //no given space for very last term\n if (i >= p.terms.length - 1) {\n o.post = '. '\n if (k >= p.terms.length - 1) {\n o.post = '.'\n }\n }\n }\n term.post = o.post !== undefined ? o.post : ' '\n\n if (o.tags) {\n o.tags.forEach(tag => term.tag(tag, '', world))\n }\n pool.add(term)\n return term\n })\n //add prev/next links\n linkTerms(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\nmodule.exports = fromJSON\n","module.exports = '13.1.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"Date\": \"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n NickName: {\n isA: 'Person',\n notA: ['FirstName', 'LastName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName', 'Value'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n // assigned from plugin, for example\n if (tags[k].color) {\n tags[k].color = tags[k].color\n return\n }\n // defined above\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerms = function() {\n return this.match('^.')\n}\nexports.firstTerm = exports.firstTerms\n\n/** grab the last term for every match */\nexports.lastTerms = function() {\n return this.match('.$')\n}\nexports.lastTerm = exports.lastTerms\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n\n/* grab named capture group terms as object */\nconst getGroups = function(doc) {\n let res = {}\n const allGroups = {}\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n const groups = Object.keys(phrase.groups).map(k => phrase.groups[k])\n for (let j = 0; j < groups.length; j++) {\n const { group, start, length } = groups[j]\n\n if (!allGroups[group]) {\n allGroups[group] = []\n }\n allGroups[group].push(phrase.buildFrom(start, length))\n }\n }\n const keys = Object.keys(allGroups)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n res[key] = doc.buildFrom(allGroups[key])\n }\n return res\n}\n\nconst getOneName = function(doc, name) {\n const arr = []\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n let keys = Object.keys(phrase.groups)\n keys = keys.filter(id => phrase.groups[id].group === name)\n keys.forEach(id => {\n arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length))\n })\n }\n return doc.buildFrom(arr)\n}\n\n/** grab named capture group results */\nexports.groups = function(target) {\n if (target === undefined) {\n return getGroups(this)\n }\n if (typeof target === 'number') {\n target = String(target)\n }\n return getOneName(this, target) || this.buildFrom([])\n}\nexports.group = exports.groups\n\n/** get the full-sentence each phrase belongs to */\nexports.sentences = function(n) {\n let arr = []\n this.list.forEach(p => {\n arr.push(p.fullSentence())\n })\n if (typeof n === 'number') {\n return this.buildFrom([arr[n]])\n }\n return this.buildFrom(arr)\n}\nexports.sentence = exports.sentences\n","// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: needTags, words: needWords }\n}\n\nconst failFast = function(doc, regs) {\n if (doc._cache && doc._cache.set === true) {\n let { words, tags } = cacheRequired(regs)\n //check required words\n for (let i = 0; i < words.length; i++) {\n if (doc._cache.words[words[i]] === undefined) {\n return false\n }\n }\n //check required tags\n for (let i = 0; i < tags.length; i++) {\n if (doc._cache.tags[tags[i]] === undefined) {\n return false\n }\n }\n }\n return true\n}\nmodule.exports = failFast\n","const parseSyntax = require('../match/syntax')\nconst checkCache = require('../match/checkCache')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg, name) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n\n if (name !== undefined && name !== null && name !== '') {\n return this.buildFrom(matches).groups(name)\n }\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0 || checkCache(this, regs) === false) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return false\n }\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n // if its a doc, return one result\n if (res && res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n //remove nulls\n list = list.filter(x => x)\n // return an empty response\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","// const tokenize = require('../../01-tokenizer/02-words')\nconst tokenize = function(str) {\n return str.split(/[ -]/g)\n}\n// take a list of strings\n// look them up in the document\nconst buildTree = function(termList, values = []) {\n let root = {}\n // parse our input\n termList.forEach((str, i) => {\n let val = true\n if (values[i] !== undefined) {\n val = values[i]\n }\n // some rough normalization\n str = (str || '').toLowerCase()\n str = str.replace(/[,;.!?]+$/, '')\n let arr = tokenize(str).map(s => s.trim())\n root[arr[0]] = root[arr[0]] || {}\n if (arr.length === 1) {\n root[arr[0]].value = val\n } else {\n root[arr[0]].more = root[arr[0]].more || []\n root[arr[0]].more.push({\n rest: arr.slice(1),\n value: val,\n })\n }\n })\n // sort by longest-first?\n // console.log(JSON.stringify(root, null, 2))\n return root\n}\n\nconst fastLookup = function(termList, values, doc) {\n let root = buildTree(termList, values)\n let found = []\n // each phrase\n for (let i = 0; i < doc.list.length; i++) {\n const p = doc.list[i]\n let terms = p.terms()\n\n let words = terms.map(t => t.reduced)\n // each word\n for (let w = 0; w < words.length; w++) {\n if (root[words[w]] !== undefined) {\n // is it a multi-word match?\n if (root[words[w]].more !== undefined) {\n root[words[w]].more.forEach(more => {\n // is it too-long?\n if (words[w + more.rest.length] === undefined) {\n return\n }\n // compare each subsequent term\n let everyTerm = more.rest.every((word, r) => {\n return word === words[w + r + 1]\n })\n if (everyTerm === true) {\n found.push({ id: p.terms()[w].id, value: more.value, length: more.rest.length + 1 })\n }\n })\n }\n // is it a single-word match?\n if (root[words[w]].value !== undefined) {\n found.push({ id: p.terms()[w].id, value: root[words[w]].value, length: 1 })\n }\n }\n }\n }\n return found\n}\nmodule.exports = fastLookup\n","const lookup = require('./_lookup')\n\n// compare one term and one match\n// const doesMatch = function(term, str) {\n// if (str === '') {\n// return false\n// }\n// return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n// }\n\nconst isObject = function(obj) {\n return obj && Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n let values = []\n //is it a {key:val} object?\n let isObj = isObject(arr)\n if (isObj === true) {\n arr = Object.keys(arr).map(k => {\n values.push(arr[k])\n return k\n })\n }\n // support .lookup('foo')\n if (typeof arr === 'string') {\n arr = [arr]\n }\n\n //make sure we go fast.\n if (this._cache.set !== true) {\n this.cache()\n }\n\n let found = lookup(arr, values, this)\n let p = this.list[0]\n // make object response\n if (isObj === true) {\n let byVal = {}\n found.forEach(o => {\n byVal[o.value] = byVal[o.value] || []\n byVal[o.value].push(p.buildFrom(o.id, o.length))\n })\n Object.keys(byVal).forEach(k => {\n byVal[k] = this.buildFrom(byVal[k])\n })\n return byVal\n }\n // otherwise, make array response:\n found = found.map(o => p.buildFrom(o.id, o.length))\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n let words = {}\n let tags = {}\n this._cache.words = words\n this._cache.tags = tags\n this._cache.set = true\n this.list.forEach((p, i) => {\n p.cache = p.cache || {}\n //p.terms get cached automatically\n let terms = p.terms()\n // cache all the terms\n terms.forEach(t => {\n if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) {\n return //skip prototype words\n }\n words[t.reduced] = words[t.reduced] || []\n words[t.reduced].push(i)\n\n Object.keys(t.tags).forEach(tag => {\n tags[tag] = tags[tag] || []\n tags[tag].push(i)\n })\n\n // cache root-form on Term, too\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this._cache = {}\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc._cache = {}\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\nconst calcOffset = function(doc, result, options) {\n // calculate offsets for each term\n let offsets = termOffsets(doc.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n // let len = o.terms.reduce((n, t, i) => {\n // n += t.offset.length || 0\n // //add whitespace, too\n // console.log(t.post)\n // return n\n // }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = o.text.length\n })\n }\n}\nmodule.exports = calcOffset\n","const offsets = require('./_offset')\nconst jsonDefaults = { text: true, terms: true, trim: true }\n\n//some options have dependents\nconst setOptions = function(options) {\n options = Object.assign({}, jsonDefaults, options)\n\n if (options.unique) {\n options.reduced = true\n }\n //offset calculation requires these options to be on\n if (options.offset) {\n options.text = true\n if (!options.terms || options.terms === true) {\n options.terms = {}\n }\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n return options\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n\n options = setOptions(options)\n\n // cache root strings beforehand, if necessary\n if (options.root === true) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n offsets(this, result, options)\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n let tagset = doc.world.tags\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags, world) {\n tags = tags.map(tag => {\n if (!world.tags.hasOwnProperty(tag)) {\n return tag\n }\n const c = world.tags[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n main.cache = {}\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n p.cache = {}\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n require('./07-cache'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^woo+a*?h?$/, 'Expression'], //whoaa, wooo\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length <= 3) {\n term.tag('Acronym', 'acronym-org', world)\n }\n if (term.tags.Organization && term.isUpperCase() && term.text.length <= 6) {\n term.tag('Acronym', 'acronym-org-case', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const contraction = /^(l|c|d|j|m|n|qu|s|t)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z\\u00C0-\\u00FF]+)$/i\n// basic support for ungendered french contractions\n// not perfect, but better than nothing, to support matching on french text.\n\nconst french = {\n l: 'le', // l'amour\n c: 'ce', // c'est\n d: 'de', // d'amerique\n j: 'je', // j'aime\n m: 'me', // m'appelle\n n: 'ne', // n'est\n qu: 'que', // qu'il\n s: 'se', // s'appelle\n t: 'tu', // t'aime\n}\n\nconst checkFrench = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null || french.hasOwnProperty(parts[1]) === false) {\n return null\n }\n let arr = [french[parts[1]], parts[2]]\n if (arr[0] && arr[1]) {\n return arr\n }\n return null\n}\nmodule.exports = checkFrench\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst checkFrench = require('./07-french')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n found = found || checkFrench(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n // keep tag NumberRange, if we had it\n if (p.has('#NumberRange') === true) {\n doc.buildFrom([newPhrase]).tag('NumberRange')\n }\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","const hasWord = function(doc, word) {\n let arr = doc._cache.words[word] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\nconst hasTag = function(doc, tag) {\n let arr = doc._cache.tags[tag] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\n\n//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //exactly like\n let m = hasWord(doc, 'like')\n m.match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n\n //the orange.\n m = hasTag(doc, 'Adjective')\n m.match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n\n // Firstname x (dangerous)\n m = hasTag(doc, 'FirstName')\n m.match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#Pronoun')\n .lastTerm()\n .tag('#LastName', 'firstname-noun')\n\n //three trains / one train\n m = hasTag(doc, 'Value')\n m = m.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n\n // well i've been...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n //been walking\n m = hasTag(doc, 'Gerund')\n m.match(`(be|been) (#Adverb|not)+? #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n doc\n .match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n\n //possessives\n //'her match' vs 'let her match'\n m = hasTag(doc, 'Possessive')\n m = m.match('#Possessive [#Infinitive]', 0)\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","const unique = function(arr) {\n let obj = {}\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = true\n }\n return Object.keys(obj)\n}\nmodule.exports = unique\n","// order matters\nconst list = [\n // ==== Mutliple tags ====\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n // u r cool\n { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' },\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', reason: 'thing-doer' },\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n //'u' as pronoun\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n\n // ==== Determiners ====\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n //that car goes\n { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // ==== Propositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //fix for busted-up phrasalVerbs\n { match: '#Noun [#Particle]', group: 0, tag: 'Preposition', reason: 'repair-noPhrasal' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // ==== Questions ====\n //the word 'how'\n { match: '^how', tag: 'QuestionWord', reason: 'how-question' },\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // //the word 'which'\n { match: '^which', tag: 'QuestionWord', reason: 'which-question' },\n { match: '[which] . (#Noun)+ #Pronoun', group: 0, tag: 'QuestionWord', reason: 'which-question2' },\n { match: 'which', tag: 'QuestionWord', reason: 'which-question3' },\n\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n {\n match: '[(who|what|where|why|how|when)] #Noun #Adverb? #Infinitive not? #Gerund',\n group: 0,\n tag: 'Conjunction',\n reason: 'when i go fishing',\n },\n]\n\nmodule.exports = list\n","//Dates: 'june' or 'may'\nconst dates = '(april|june|may|jan|august|eve)'\n\nlet list = [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' }, // the captain who\n\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `this [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `next [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `last [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n // march 5th\n { match: `[(march|may)] the? #Value`, group: 0, tag: 'Month', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? [(march|may)]`, group: 0, tag: 'Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Infinitive', reason: 'quickly-march' },\n //march quickly\n { match: `(march|may) [#Adverb]`, group: 0, tag: 'Infinitive', reason: 'march-quickly' },\n\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n\n // in june\n { match: `in [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `during [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `on [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `by [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `before [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `#Date [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n // june 1992\n { match: `${dates} #Value`, tag: 'Date', reason: 'june-5th' },\n { match: `${dates} #Date`, tag: 'Date', reason: 'june-5th' },\n // June Smith\n { match: `${dates} #ProperNoun`, tag: 'Person', reason: 'june-smith', safe: true },\n // june m. Cooper\n { match: `${dates} #Acronym? (#ProperNoun && !#Month)`, tag: 'Person', reason: 'june-smith-jr' },\n]\n\nmodule.exports = list\n","module.exports = [\n // ==== Plural ====\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n\n //big dreams, critical thinking\n { match: '#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' },\n //his fine\n { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' },\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n //'more' is not always an adverb\n { match: 'more #Noun', tag: 'Noun', reason: 'more-noun' },\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', reason: 'noun-list' }, //3 feet\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' }, // a bit\n { match: 'a [bit]', group: 0, tag: 'Noun', reason: 'bit-2' },\n\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the nice swim\n { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the orange is\n { match: '#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)', group: 0, tag: 'Noun', reason: 'the-adj-2' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //the test string\n { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' },\n //by a bear.\n { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' },\n //the wait to vote\n { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', reason: 'noun-of-noun' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n\n //her polling\n { match: '#Possessive [#Gerund]', group: 0, tag: 'Noun', reason: 'her-polling' },\n //her fines\n { match: '(his|her|its) [#PresentTense]', group: 0, tag: 'Noun', reason: 'its-polling' },\n\n //linear algebra\n {\n match: '(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'technical-noun',\n },\n // walk the walk\n { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' },\n { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' },\n { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' },\n\n //air-flow\n { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //different views than\n { match: '[#Verb] than', group: 0, tag: 'Noun', reason: 'correction' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a great run\n { match: '(a|an) #Adjective [(#Infinitive|#PresentTense)]', tag: 'Noun', reason: 'a|an2' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-noun-inf' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n //is mark hughes\n { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n //\n { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n]\n","const adjectives = '(misty|rusty|dusty|rich|randy)'\nlet list = [\n // all fell apart\n { match: '[all] #Determiner? #Noun', group: 0, tag: 'Adjective', reason: 'all-noun' },\n // very rusty\n { match: `#Adverb [${adjectives}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n // rusty smith\n { match: `${adjectives} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n { match: `${adjectives} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n //a staggering cost\n { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n // is f*ed up\n { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n]\n\nmodule.exports = list\n","module.exports = [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //cheering hard - dropped -ly's\n { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n]\n","module.exports = [\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n // ==== Money ====\n { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' },\n // ==== Unit ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //5 kg.\n { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n // ten grand\n { match: '#Value grand', tag: 'Value', reason: 'value-grand' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n { match: 'a #Value', tag: 'Value', reason: 'a-value' },\n\n // thousand and two\n {\n match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`,\n tag: 'Value',\n reason: 'magnitude-and-value',\n },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n]\n","const verbs = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\n\nlet list = [\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n //this rocks\n { match: '(this|that) [#Plural]', group: 0, tag: 'PresentTense', reason: 'this-verbs' },\n\n // ==== Auxiliary ====\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n // will walk\n { match: '[(do|does|will|have|had)] (not|#Adverb)? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', group: 0, tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', group: 0, tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', group: 0, tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' },\n //fall over\n { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: '[will #Adverb? not? #Adverb? be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|to|toward)', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n //he quickly foo\n { match: '#Noun #Adverb [#Noun]', group: 0, tag: 'Verb', reason: 'quickly-foo' },\n //will secure our\n { match: 'will [#Adjective]', group: 0, tag: 'Verb', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n\n //is eager to go\n { match: '#Copula [#Adjective to] #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n\n // would wade\n { match: `#Modal [${verbs}]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n { match: `#Adverb [${verbs}]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // wade smith\n { match: `${verbs} #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `${verbs} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n]\n\nmodule.exports = list\n","const places = '(paris|alexandria|houston|kobe|salvador|sydney)'\nlet list = [\n // ==== Region ====\n //West Norforlk\n {\n match: '(west|north|south|east|western|northern|southern|eastern)+ #Place',\n\n tag: 'Region',\n reason: 'west-norfolk',\n },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n //Foo District\n {\n match: '#ProperNoun+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)',\n tag: 'Region',\n reason: 'foo-district',\n },\n //District of Foo\n {\n match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun',\n tag: 'Region',\n reason: 'district-of-Foo',\n },\n\n // ==== Address ====\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n\n // in houston\n { match: `in [${places}]`, group: 0, tag: 'Place', reason: 'in-paris' },\n { match: `near [${places}]`, group: 0, tag: 'Place', reason: 'near-paris' },\n { match: `at [${places}]`, group: 0, tag: 'Place', reason: 'at-paris' },\n { match: `from [${places}]`, group: 0, tag: 'Place', reason: 'from-paris' },\n { match: `to [${places}]`, group: 0, tag: 'Place', reason: 'to-paris' },\n { match: `#Place [${places}]`, group: 0, tag: 'Place', reason: 'tokyo-paris' },\n // houston texas\n { match: `[${places}] #Place`, group: 0, tag: 'Place', reason: 'paris-france' },\n]\nmodule.exports = list\n","module.exports = [\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n]\n","const nouns =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\n\nconst months = '(january|april|may|june|jan|sep)' //summer|autumn\n\nlet list = [\n // ==== Honorific ====\n { match: '[(1st|2nd|first|second)] #Honorific', group: 0, tag: 'Honorific', reason: 'ordinal-honorific' },\n {\n match: '[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'ambg-honorifics',\n },\n\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n { match: '(lady|queen|sister) #ProperNoun', tag: 'FemaleName', reason: 'lady-titlecase', safe: true },\n { match: '(king|pope|father) #ProperNoun', tag: 'MaleName', reason: 'pope-titlecase', safe: true },\n //ambiguous-but-common firstnames\n {\n match: '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName',\n group: 0,\n tag: 'FirstName',\n reason: 'maybe-lastname',\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'NickName', reason: 'first-noun-last' },\n\n //my buddy\n { match: '#Possessive [#FirstName]', group: 0, tag: 'Person', reason: 'possessive-name' },\n { match: '#Acronym #ProperNoun', tag: 'Person', reason: 'acronym-titlecase', safe: true }, //ludwig van beethovan\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' }, //peter II\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' }, //'Professor Fink', 'General McCarthy'\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' }, //Doctor john smith jr\n //general pearson\n { match: '#Honorific #Person', tag: 'Person', reason: 'honorific-person' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'von der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of? #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //Foo U Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n //very common-but-ambiguous lastnames\n {\n match: '#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)',\n\n tag: 'Person',\n reason: 'bill-green',\n },\n // faith smith\n { match: `${nouns} #Person`, tag: 'Person', reason: 'ray-smith', safe: true },\n // faith m. Smith\n { match: `${nouns} #Acronym? #ProperNoun`, tag: 'Person', reason: 'ray-a-smith', safe: true },\n //give to april\n {\n match: `#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${months}]`,\n group: 0,\n tag: 'Person',\n reason: 'ambig-person',\n },\n // remind june\n { match: `#Infinitive [${months}]`, group: 0, tag: 'Person', reason: 'infinitive-person' },\n // may waits for\n { match: `[${months}] #PresentTense for`, group: 0, tag: 'Person', reason: 'ambig-active-for' },\n // may waits for\n { match: `[${months}] #PresentTense to`, group: 0, tag: 'Person', reason: 'ambig-active-to' },\n // april will\n { match: `[${months}] #Modal`, group: 0, tag: 'Person', reason: 'ambig-modal' },\n // would april\n { match: `#Modal [${months}]`, group: 0, tag: 'Person', reason: 'modal-ambig' },\n // it is may\n { match: `#Copula [${months}]`, group: 0, tag: 'Person', reason: 'is-may' },\n // may is\n { match: `[${months}] #Copula`, group: 0, tag: 'Person', reason: 'may-is' },\n // with april\n { match: `that [${months}]`, group: 0, tag: 'Person', reason: 'that-month' },\n // with april\n { match: `with [${months}]`, group: 0, tag: 'Person', reason: 'with-month' },\n // for april\n { match: `for [${months}]`, group: 0, tag: 'Person', reason: 'for-month' },\n // this april\n { match: `this [${months}]`, group: 0, tag: 'Month', reason: 'this-may' }, //maybe not 'this'\n // next april\n { match: `next [${months}]`, group: 0, tag: 'Month', reason: 'next-may' },\n // last april\n { match: `last [${months}]`, group: 0, tag: 'Month', reason: 'last-may' },\n // wednesday april\n { match: `#Date [${months}]`, group: 0, tag: 'Month', reason: 'date-may' },\n // may 5th\n { match: `[${months}] the? #Value`, group: 0, tag: 'Month', reason: 'may-5th' },\n // 5th of may\n { match: `#Value of [${months}]`, group: 0, tag: 'Month', reason: '5th-of-may' },\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', reason: 'title-de-title', safe: true },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#Person', reason: 'title-acro-noun', safe: true },\n //John Foo\n { match: '#FirstName (#Noun && #ProperNoun) #ProperNoun?', tag: 'Person', reason: 'firstname-titlecase' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n]\nmodule.exports = list\n","const parseSyntax = require('../../../Doc/match/syntax')\nconst unique = require('../_unique')\nlet matches = []\nmatches = matches.concat(require('./01-misc'))\nmatches = matches.concat(require('./02-dates'))\nmatches = matches.concat(require('./03-noun'))\nmatches = matches.concat(require('./04-adjective'))\nmatches = matches.concat(require('./05-adverb'))\nmatches = matches.concat(require('./06-value'))\nmatches = matches.concat(require('./07-verbs'))\nmatches = matches.concat(require('./08-place'))\nmatches = matches.concat(require('./09-org'))\nmatches = matches.concat(require('./10-people'))\n\n// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: unique(needTags), words: unique(needWords) }\n}\n\nconst allLists = function(m) {\n let more = []\n let lists = m.reg.filter(r => r.oneOf !== undefined)\n if (lists.length === 1) {\n let i = m.reg.findIndex(r => r.oneOf !== undefined)\n Object.keys(m.reg[i].oneOf).forEach(w => {\n let newM = Object.assign({}, m)\n newM.reg = newM.reg.slice(0)\n newM.reg[i] = Object.assign({}, newM.reg[i])\n newM.reg[i].word = w\n delete newM.reg[i].operator\n delete newM.reg[i].oneOf\n newM.reason += '-' + w\n more.push(newM)\n })\n }\n return more\n}\n\n// parse them\nlet all = []\nmatches.forEach(m => {\n m.reg = parseSyntax(m.match)\n let enumerated = allLists(m)\n if (enumerated.length > 0) {\n all = all.concat(enumerated)\n } else {\n all.push(m)\n }\n})\n\nall.forEach(m => {\n m.required = cacheRequired(m.reg)\n return m\n})\n\nmodule.exports = all\n","const matches = require('./matches')\nconst unique = require('./_unique')\n\n// return intersection of array-of-arrays\nconst hasEvery = function(chances) {\n if (chances.length === 0) {\n return []\n }\n let obj = {}\n chances.forEach(arr => {\n arr = unique(arr)\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = obj[arr[i]] || 0\n obj[arr[i]] += 1\n }\n })\n let res = Object.keys(obj)\n res = res.filter(k => obj[k] === chances.length)\n res = res.map(num => Number(num))\n return res\n}\n\nconst runner = function(doc) {\n //find phrases to try for each match\n matches.forEach(m => {\n let allChances = []\n m.required.words.forEach(w => {\n allChances.push(doc._cache.words[w] || [])\n })\n m.required.tags.forEach(tag => {\n allChances.push(doc._cache.tags[tag] || [])\n })\n\n let worthIt = hasEvery(allChances)\n if (worthIt.length === 0) {\n return\n }\n\n let phrases = worthIt.map(index => doc.list[index])\n let tryDoc = doc.buildFrom(phrases)\n // phrases getting tagged\n let match = tryDoc.match(m.reg, m.group)\n if (match.found) {\n if (m.safe === true) {\n match.tagSafe(m.tag, m.reason)\n } else {\n match.tag(m.tag, m.reason)\n }\n }\n })\n}\nmodule.exports = runner\n\n// console.log(hasEvery([[1, 2, 2, 3], [2, 3], []]))\n","const fixMisc = require('./fixMisc')\nconst runner = require('./runner')\n\n// runner: 250ms\n// misc: 40ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n runner(doc)\n fixMisc(doc)\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n // remove our cache, as it's invalidated now\n doc.uncache()\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc\n .splitAfter('@hasComma')\n .splitOn('(and|or) not?')\n .not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)', 0)\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('@hasComma').splitOn('(and|or) not?')\n }\n /** remove the conjunction */\n items() {\n return parse(this).things\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove(match) {\n return this.items()\n .if(match)\n .remove()\n }\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === false) {\n needsComma.post(', ')\n }\n return this\n }\n removeOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === true) {\n needsComma.post(' ')\n }\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m\n .match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')\n .if('#Noun')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]', 0)\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n if (parsed[k] && parsed[k].isA === 'Doc') {\n json.parts[k] = parsed[k].text('normal')\n } else {\n json.parts[k] = parsed[k]\n }\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n Object.defineProperty(this, '_cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const lexiconStep = require('./01-init/01-lexicon')\n\n//for the tokenize-only build, we want to keep\nconst smallTagger = function(doc) {\n let terms = doc.termList()\n lexiconStep(terms, doc.world)\n return doc\n}\nmodule.exports = smallTagger\n","const tokenize = require('./01-tokenizer')\nconst fromJSON = require('./01-tokenizer/fromJSON')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\nconst Phrase = require('./Phrase/Phrase')\nconst Term = require('./Term/Term')\nconst Pool = require('./01-tokenizer/Pool')\nconst tinyTagger = require('./02-tagger/tiny')\n\nfunction instance(worldInstance) {\n //blast-out our word-lists, just once\n let world = worldInstance\n\n /** parse and tag text into a compromise object */\n const nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n }\n\n /** parse text into a compromise object, without running POS-tagging */\n nlp.tokenize = function(text = '', lexicon) {\n let w = world\n if (lexicon) {\n w = w.clone()\n w.words = {}\n w.addWords(lexicon)\n }\n let list = tokenize(text, w)\n let doc = new Doc(list, null, w)\n if (lexicon) {\n tinyTagger(doc)\n }\n return doc\n }\n\n /** mix in a compromise-plugin */\n nlp.extend = function(fn) {\n fn(Doc, world, this, Phrase, Term, Pool)\n return this\n }\n\n /** create a compromise Doc object from .json() results */\n nlp.fromJSON = function(json) {\n let list = fromJSON(json, world)\n return new Doc(list, null, world)\n }\n\n /** make a deep-copy of the library state */\n nlp.clone = function() {\n return instance(world.clone())\n }\n\n /** log our decision-making for debugging */\n nlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n }\n\n /** current version of the library */\n nlp.version = version\n // alias\n nlp.import = nlp.load\n\n return nlp\n}\n\nmodule.exports = instance(new World())\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","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","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","oneOf","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","len","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","getGreedy","until","count","max","min","greedyTo","nextReg","getOrCreateGroup","namedGroups","namedGroupId","startIndex","group","tryHere","previousGroupId","isNamedGroup","named","hasNeeds","remain","greedy","skipto","startAt","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","captureName","RegExp","stripStart","stripEnd","stripBoth","parseToken","groupType","exec","Number","isNamed","capture","fillGroups","tokens","convert","current","useOneOf","token","shouldPack","isArray","byParentheses","byWords","words","byArray","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","groups","notMatch","ts","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","linkTerms","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","fromText","splitTerms","phrases","fromJSON","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","NickName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","JSON","parse","stringify","w2","from","addParent","reverse","doShallow","wordCount","eq","firstTerms","lastTerms","num","getGroups","allGroups","getOneName","target","fullSentence","cacheRequired","needTags","needWords","_cache","parseSyntax","checkCache","not","has","lookAhead","lookBehind","befores","tagTerms","safe","tagList","why","setTag","detachParent","sub","tokenize","buildTree","termList","val","more","rest","fastLookup","everyTerm","isObject","isObj","lookup","byVal","setRoot","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","termOffsets","elapsed","offsets","calcOffset","jsonDefaults","setOptions","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","alpha","left","right","byFreq","counts","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","lookups","afterThisWord","first","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","french","qu","checkFrench","isNumber","createPhrase","firstTerm","hasWord","hasTag","miscCorrection","notIf","ifNo","dates","months","allLists","lists","newM","enumerated","required","hasEvery","chances","runner","allChances","worthIt","tryDoc","corrections","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","needsComma","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","an","lookBefore","adj","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","verb","findNoun","vb","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","advb","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","smallTagger","lexiconStep","instance","worldInstance","nlp","addWords","tinyTagger","verbose","version","load"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA,IAAMA,KAAK,GAAG,iEAAiEC,KAAjE,CAAuE,EAAvE,CAAd;;EAGA,SAASC,MAAT,CAAgBC,GAAhB,EAAqB;EACnBA,EAAAA,GAAG,GAAGA,GAAG,IAAI,GAAb;EACA,MAAIC,IAAI,GAAGD,GAAG,GAAG,GAAjB;;EACA,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;EAC1BD,IAAAA,IAAI,IAAIJ,KAAK,CAACM,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgBR,KAAK,CAACS,MAAjC,CAAD,CAAb;EACD;;EACD,SAAOL,IAAP;EACD;;EAED,OAAc,GAAGF,MAAjB;;ECbA;EACA;EACA;EACA;EACA,IAAIQ,OAAO,GAAG;EACZ,OAAK,GADO;EAEZ,OAAK,IAFO;EAGZ,OAAK,OAHO;EAIZ,OAAK,MAJO;EAKZ,OAAK,IALO;EAMZC,EAAAA,CAAC,EAAE,uDANS;EAOZC,EAAAA,CAAC,EAAE,0BAPS;EAQZC,EAAAA,CAAC,EAAE,iCARS;EASZC,EAAAA,CAAC,EAAE,aATS;EAUZC,EAAAA,CAAC,EAAE,6DAVS;EAWZC,EAAAA,CAAC,EAAE,WAXS;EAYZC,EAAAA,CAAC,EAAE,iBAZS;EAaZC,EAAAA,CAAC,EAAE,2BAbS;EAcZC,EAAAA,CAAC,EAAE,MAdS;EAeZd,EAAAA,CAAC,EAAE,gCAfS;EAgBZe,EAAAA,CAAC,EAAE,WAhBS;EAiBZC,EAAAA,CAAC,EAAE,yBAjBS;EAkBZC,EAAAA,CAAC,EAAE,sBAlBS;EAmBZC,EAAAA,CAAC,EAAE,SAnBS;EAoBZC,EAAAA,CAAC,EAAE,2CApBS;EAqBZC,EAAAA,CAAC,EAAE,oEArBS;EAsBZC,EAAAA,CAAC,EAAE,cAtBS;EAuBZC,EAAAA,CAAC,EAAE,IAvBS;EAwBZC,EAAAA,CAAC,EAAE,uBAxBS;EAyBZC,EAAAA,CAAC,EAAE,iBAzBS;EA0BZC,EAAAA,CAAC,EAAE,sBA1BS;EA2BZC,EAAAA,CAAC,EAAE,+CA3BS;EA4BZC,EAAAA,CAAC,EAAE,OA5BS;EA6BZC,EAAAA,CAAC,EAAE,gBA7BS;EA8BZC,EAAAA,CAAC,EAAE,eA9BS;EA+BZC,EAAAA,CAAC,EAAE,uCA/BS;EAgCZC,EAAAA,CAAC,EAAE;EAhCS,CAAd;;EAmCA,IAAIC,OAAO,GAAG,EAAd;EACAC,MAAM,CAACC,IAAP,CAAY7B,OAAZ,EAAqB8B,OAArB,CAA6B,UAASnB,CAAT,EAAY;EACvCX,EAAAA,OAAO,CAACW,CAAD,CAAP,CAAWpB,KAAX,CAAiB,EAAjB,EAAqBuC,OAArB,CAA6B,UAASX,CAAT,EAAY;EACvCQ,IAAAA,OAAO,CAACR,CAAD,CAAP,GAAaR,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMoB,WAAW,GAAG,SAAdA,WAAc,CAAAtC,GAAG,EAAI;EACzB,MAAIH,KAAK,GAAGG,GAAG,CAACF,KAAJ,CAAU,EAAV,CAAZ;EACAD,EAAAA,KAAK,CAACwC,OAAN,CAAc,UAACX,CAAD,EAAIxB,CAAJ,EAAU;EACtB,QAAIgC,OAAO,CAACR,CAAD,CAAX,EAAgB;EACd7B,MAAAA,KAAK,CAACK,CAAD,CAAL,GAAWgC,OAAO,CAACR,CAAD,CAAlB;EACD;EACF,GAJD;EAKA,SAAO7B,KAAK,CAAC0C,IAAN,CAAW,EAAX,CAAP;EACD,CARD;;EASA,aAAc,GAAGD,WAAjB;;ECvDA,IAAME,aAAa,GAAG,qBAAtB;EACA,IAAMC,gBAAgB,GAAG,aAAzB;EACA,IAAMC,eAAe,GAAG,mBAAxB;EACA,IAAMC,gBAAgB,GAAG,wBAAzB;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS5C,GAAT,EAAc;;EAE9B,MAAIwC,aAAa,CAACK,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,WAAO,IAAP;EACD,GAJ6B;;;EAM9B,MAAI2C,gBAAgB,CAACE,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAR6B;;;EAU9B,MAAIyC,gBAAgB,CAACI,IAAjB,CAAsB7C,GAAtB,MAA+B,IAAnC,EAAyC;EACvC,WAAO,IAAP;EACD,GAZ6B;;;EAc9B,MAAI0C,eAAe,CAACG,IAAhB,CAAqB7C,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAlBD;;EAmBA,eAAc,GAAG4C,SAAjB;;ECtBA,IAAME,QAAQ,GAAG,4CAAjB;EAEA;;EACA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAAS/C,GAAT,EAAc;EAC1BA,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;EACAA,EAAAA,GAAG,GAAGA,GAAG,CAACgD,WAAJ,EAAN;EACAhD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN;EACA,MAAIC,QAAQ,GAAGlD,GAAf,CAJ0B;;EAM1BA,EAAAA,GAAG,GAAGsC,SAAW,CAACtC,GAAD,CAAjB,CAN0B;;EAQ1B,MAAI8C,QAAQ,CAACD,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,MAAZ,EAAoB,EAApB,CAAN;EACD,GAVyB;;;EAY1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,EAArB,CAAN,CAZ0B;;EAc1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN,CAd0B;;EAgB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,wEAAZ,EAAsF,GAAtF,CAAN,CAhB0B;;EAkB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CACJ,sGADI,EAEJ,GAFI,CAAN,CAlB0B;;EAuB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,KAAvB,CAAN,CAvB0B;;EAyB1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,SAAZ,EAAuB,GAAvB,CAAN,CAzB0B;;EA2B1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,oBAAZ,EAAkC,OAAlC,CAAN,CA3B0B;;EA6B1B,MAAI,sBAAsBN,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5CA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiB,EAAjB,CAAN;EACD,GA/ByB;;;EAiC1B,MAAI,QAAQN,IAAR,CAAa7C,GAAb,MAAsB,KAA1B,EAAiC;EAC/BA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,UAAZ,EAAwB,EAAxB,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,EAAhC,CAAN;EACAnD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN;EACD,GArCyB;;;EAuC1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACiD,IAAJ,EAAN,CAvC0B;;EAyC1B,MAAIjD,GAAG,KAAK,EAAZ,EAAgB;EACdA,IAAAA,GAAG,GAAGkD,QAAN;EACD,GA3CyB;;;EA6C1B,MAAIN,WAAS,CAAC5C,GAAD,CAAb,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAN;EACD,GA/CyB;;;EAiD1BnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,kBAAZ,EAAgC,MAAhC,CAAN;EACA,SAAOnD,GAAP;EACD,CAnDD;;EAqDA,WAAc,GAAG+C,KAAjB;;EC1DA;EACA,IAAMK,OAAO,GAAG,SAAVA,OAAU,CAASpD,GAAT,EAAc;;EAE5BA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,EAAtB,CAAN;EACAnD,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,QAAZ,EAAsB,GAAtB,CAAN;EACA,SAAOnD,GAAP;EACD,CALD;;EAMA,UAAc,GAAGoD,OAAjB;;ECHA;EACA;;EACA,IAAMC,SAAS,GAAG,sNAAlB;EACA,IAAMC,OAAO,GAAG,uNAAhB;;EAGA,IAAMR,UAAQ,GAAG,IAAjB;EACA,IAAMS,aAAa,GAAG,MAAtB;EACA,IAAMC,UAAU,GAAG,qBAAnB;EACA,IAAMC,WAAW,GAAG,cAApB;EAEA;;;;EAGA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAA1D,GAAG,EAAI;EACvB,MAAIkD,QAAQ,GAAGlD,GAAf;EACA,MAAI2D,GAAG,GAAG,EAAV;EACA,MAAIC,IAAI,GAAG,EAAX;EACA5D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYE,SAAZ,EAAuB,UAAAQ,KAAK,EAAI;EACpCF,IAAAA,GAAG,GAAGE,KAAN,CADoC;;EAGpC,QAAI,CAACF,GAAG,KAAK,GAAR,IAAeA,GAAG,KAAK,GAAvB,IAA8BA,GAAG,KAAK,GAAvC,KAA+CF,WAAW,CAACZ,IAAZ,CAAiB7C,GAAjB,CAAnD,EAA0E;EACxE2D,MAAAA,GAAG,GAAG,EAAN;EACA,aAAOE,KAAP;EACD;;EACD,WAAO,EAAP;EACD,GARK,CAAN;EASA7D,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYG,OAAZ,EAAqB,UAAAO,KAAK,EAAI;EAClCD,IAAAA,IAAI,GAAGC,KAAP,CADkC;;EAGlC,QAAIN,aAAa,CAACV,IAAd,CAAmBgB,KAAnB,KAA6B,YAAYhB,IAAZ,CAAiBK,QAAjB,CAA7B,IAA2DK,aAAa,CAACV,IAAd,CAAmBc,GAAnB,MAA4B,KAA3F,EAAkG;EAChGC,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAaI,aAAb,EAA4B,EAA5B,CAAP;EACA;EACD,KANiC;;;EAQlC,QAAIC,UAAU,CAACX,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC4D,MAAAA,IAAI,GAAGA,IAAI,CAACT,OAAL,CAAa,IAAb,EAAmB,EAAnB,CAAP;EACA,aAAO,GAAP;EACD;;EACD,WAAO,EAAP;EACD,GAbK,CAAN,CAbuB;;EA4BvB,MAAInD,GAAG,KAAK,EAAZ,EAAgB;;EAEdkD,IAAAA,QAAQ,GAAGA,QAAQ,CAACC,OAAT,CAAiB,KAAjB,EAAwB,UAAAW,KAAK,EAAI;EAC1CF,MAAAA,IAAI,GAAGE,KAAK,IAAI,EAAhB;EACA,aAAO,EAAP;EACD,KAHU,CAAX;EAIA9D,IAAAA,GAAG,GAAGkD,QAAN;EACAS,IAAAA,GAAG,GAAG,EAAN;EACAC,IAAAA,IAAI,GAAGA,IAAP;EACD,GArCsB;;;EAuCvB,MAAIb,KAAK,GAAGgB,OAAS,CAAC/D,GAAD,CAArB;EACA,MAAMgE,MAAM,GAAG;EACb/D,IAAAA,IAAI,EAAED,GADO;EAEb+C,IAAAA,KAAK,EAAEA,KAFM;EAGbK,IAAAA,OAAO,EAAEa,MAAM,CAAClB,KAAD,CAHF;EAIbY,IAAAA,GAAG,EAAEA,GAJQ;EAKbC,IAAAA,IAAI,EAAEA;EALO,GAAf,CAxCuB;;EAgDvB,MAAId,UAAQ,CAACD,IAAT,CAAc7C,GAAd,CAAJ,EAAwB;EACtBA,IAAAA,GAAG,CAACF,KAAJ,CAAUgD,UAAV,EAAoBT,OAApB,CAA4B,UAAA6B,IAAI,EAAI;EAClCF,MAAAA,MAAM,CAACG,KAAP,GAAeH,MAAM,CAACG,KAAP,IAAgB,EAA/B;EACAH,MAAAA,MAAM,CAACG,KAAP,CAAaD,IAAI,CAACjB,IAAL,EAAb,IAA4B,IAA5B;EACD,KAHD;EAID;;EACD,SAAOe,MAAP;EACD,CAvDD;;EAwDA,SAAc,GAAGN,SAAjB;;;;;;;EC1EA,MAAMU,SAAS,GAAG,2BAAlB;EACA,MAAMC,SAAS,GAAG,YAAlB;EAEA;;EACAC,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUsE,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAU+C,WAAV,EAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;;;EAGAsB,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,SAAKrE,IAAL,GAAY,KAAKA,IAAL,CAAUkD,OAAV,CAAkB,uBAAlB,EAA2C,UAAApB,CAAC;EAAA,aAAIA,CAAC,CAACwC,WAAF,EAAJ;EAAA,KAA5C,CAAZ,CAD+B;;EAE/B,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAD,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOD,SAAS,CAACxB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;EAGA;;;EACAqE,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAOF,SAAS,CAACvB,IAAV,CAAe,KAAK5C,IAApB,CAAP;EACD,GAFD;;EAGAqE,EAAAA,iBAAA,GAAoBA,OAAO,CAACE,WAA5B;;;;;;;;;;EC/BA;EACA;EACA,MAAMC,UAAU,GAAG,iIAAnB;EACA,MAAMC,QAAQ,GAAG,iIAAjB;EAEA;;EACAJ,EAAAA,eAAA,GAAkB,UAASK,KAAT,EAAgB;EAChC,WAAO,KAAKf,IAAL,CAAUgB,OAAV,CAAkBD,KAAlB,MAA6B,CAAC,CAArC;EACD,GAFD;EAGA;;;EACAL,EAAAA,cAAA,GAAiB,UAASK,KAAT,EAAgB;EAC/B,WAAO,KAAKhB,GAAL,CAASiB,OAAT,CAAiBD,KAAjB,MAA4B,CAAC,CAApC;EACD,GAFD;EAIA;;;EACAL,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAOG,UAAU,CAAC5B,IAAX,CAAgB,KAAKc,GAArB,KAA6Be,QAAQ,CAAC7B,IAAT,CAAc,KAAKe,IAAnB,CAApC;EACD,GAFD;;EAGAU,EAAAA,oBAAA,GAAuBA,OAAO,CAACO,QAA/B;EAEA;;EACAP,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKQ,OAAL,CAAa,GAAb,MAAsB,IAAtB,IAA8B,KAAKA,OAAL,CAAa,KAAb,MAAwB,KAA7D;EACD,GAFD;EAIA;;;EACAR,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,uBAAA,GAA0B,YAAW;EACnC,WAAO,KAAKQ,OAAL,CAAa,GAAb,KAAqB,KAAKA,OAAL,CAAa,GAAb,CAA5B;EACD,GAFD;EAIA;;;EACAR,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,WAAO,KAAKQ,OAAL,CAAa,IAAb,KAAsB,KAAKA,OAAL,CAAa,GAAb,CAAtB,IAA2C,KAAKC,MAAL,CAAY,IAAZ,CAA3C,IAAgE,KAAKA,MAAL,CAAY,GAAZ,CAAvE;EACD,GAFD;EAIA;;;EACAT,EAAAA,oBAAA,GAAuB,YAAW;EAChC,WAAO,KAAKQ,OAAL,CAAa,GAAb,CAAP;EACD,GAFD;EAIA;;;EACAR,EAAAA,gBAAA,GAAmB,YAAW;EAC5B,WAAO,KAAKzB,IAAL,CAAU,KAAK5C,IAAf,CAAP;EACD,GAFD;EAIA;;;EACAqE,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,QAAMU,MAAM,GAAG,SAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;EAIA;;;EACAW,EAAAA,eAAA,GAAkB,YAAW;EAC3B,QAAMU,MAAM,GAAG,WAAf;EACA,WAAOA,MAAM,CAACnC,IAAP,CAAY,KAAKe,IAAjB,KAA0BoB,MAAM,CAACnC,IAAP,CAAY,KAAKc,GAAjB,CAAjC;EACD,GAHD;EAKA;;;EACAW,EAAAA,sBAAA,GAAyB,YAAW;EAClC,WAAOW,OAAO,CAAC,KAAKC,QAAN,CAAd;EACD,GAFD;EAIA;;;EACAZ,EAAAA,sBAAA,GAAyB,UAASK,KAAT,EAAgB;;EAEvC,QAAIA,KAAK,KAAK,GAAV,IAAiBA,KAAK,KAAK,GAA/B,EAAoC;EAClC,WAAKf,IAAL,GAAY,KAAKA,IAAL,CAAUT,OAAV,CAAkBwB,KAAlB,EAAyB,EAAzB,CAAZ;EACD;;EACD,SAAKf,IAAL,GAAYe,KAAK,GAAG,KAAKf,IAAzB;EACA,WAAO,IAAP;KANF;;;;;;;;;;;;;;;;;;ECxEA;EACA,IAAIuB,SAAS,GAAG,qBAAW,EAA3B;EAEA;;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASzD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;;EAEhD,MAAI+E,GAAG,CAACE,EAAJ,KAAW5D,CAAC,CAAC4D,EAAjB,EAAqB;EACnB,WAAO,IAAP;EACD,GAJ+C;;;EAMhD,MAAIF,GAAG,CAACG,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,IAAP;EACD,GAR+C;;;EAUhD,MAAIH,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBH,KAAK,KAAK,CAApC,EAAuC;EACrC,WAAO,KAAP;EACD,GAZ+C;;;EAchD,MAAID,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,KAAKhF,MAAM,GAAG,CAA3C,EAA8C;EAC5C,WAAO,KAAP;EACD,GAhB+C;;;EAkBhD,MAAI+E,GAAG,CAACnB,IAAJ,KAAayB,SAAjB,EAA4B;;EAE1B,QAAIhE,CAAC,CAACuD,QAAF,KAAe,IAAf,IAAuBvD,CAAC,CAACuD,QAAF,KAAeG,GAAG,CAACnB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD,KAJyB;;;EAM1B,QAAIvC,CAAC,CAACwC,KAAF,KAAYwB,SAAZ,IAAyBhE,CAAC,CAACwC,KAAF,CAAQyB,cAAR,CAAuBP,GAAG,CAACnB,IAA3B,CAA7B,EAA+D;EAC7D,aAAO,IAAP;EACD,KARyB;;;EAU1B,QAAImB,GAAG,CAACQ,IAAJ,KAAa,IAAb,IAAqBR,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACmE,IAAxC,EAA8C;EAC5C,aAAO,IAAP;EACD,KAZyB;;;EAc1B,WAAOT,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACoB,KAAf,IAAwBsC,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAAC1B,IAAvC,IAA+CoF,GAAG,CAACnB,IAAJ,KAAavC,CAAC,CAACyB,OAArE;EACD,GAjC+C;;;EAmChD,MAAIiC,GAAG,CAACU,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB,WAAOhE,CAAC,CAACqE,IAAF,CAAOX,GAAG,CAACU,GAAX,MAAoB,IAA3B;EACD,GArC+C;;;EAuChD,MAAIV,GAAG,CAACY,MAAJ,KAAeN,SAAnB,EAA8B;EAC5B,QAAI,OAAOhE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAR,KAAyB,UAAzB,IAAuCtE,CAAC,CAAC0D,GAAG,CAACY,MAAL,CAAD,OAAoB,IAA/D,EAAqE;EACnE,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5C+C;;;EA8ChD,MAAIZ,GAAG,CAACa,KAAJ,KAAcP,SAAlB,EAA6B;EAC3B,WAAON,GAAG,CAACa,KAAJ,CAAUrD,IAAV,CAAelB,CAAC,CAACoB,KAAjB,CAAP;EACD,GAhD+C;;;EAkDhD,MAAIsC,GAAG,CAACc,KAAJ,KAAcR,SAAlB,EAA6B;EAC3B,WAAON,GAAG,CAACc,KAAJ,CAAUP,cAAV,CAAyBjE,CAAC,CAACyB,OAA3B,KAAuCiC,GAAG,CAACc,KAAJ,CAAUP,cAAV,CAAyBjE,CAAC,CAAC1B,IAA3B,CAA9C;EACD,GApD+C;;;EAsDhD,MAAIoF,GAAG,CAACe,OAAJ,KAAgBT,SAApB,EAA+B;;EAE7B,QAAIN,GAAG,CAACgB,QAAJ,KAAiB,KAArB,EAA4B;;EAE1B,aAAOhB,GAAG,CAACe,OAAJ,CAAYE,KAAZ,CAAkB,UAAA7E,CAAC;EAAA,eAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,OAAnB,CAAP;EACD,KAL4B;;;EAO7B,WAAO+E,GAAG,CAACe,OAAJ,CAAYG,IAAZ,CAAiB,UAAA9E,CAAC;EAAA,aAAI0D,SAAS,CAACxD,CAAD,EAAIF,CAAJ,EAAO6D,KAAP,EAAchF,MAAd,CAAb;EAAA,KAAlB,CAAP;EACD;;EACD,SAAO,KAAP;EACD,CAhED;;;EAmEA6E,SAAS,GAAG,mBAASxD,CAAT,EAAY0D,GAAZ,EAAiBC,KAAjB,EAAwBhF,MAAxB,EAAgC;EAC1C,MAAIkG,MAAM,GAAGpB,SAAS,CAACzD,CAAD,EAAI0D,GAAJ,EAASC,KAAT,EAAgBhF,MAAhB,CAAtB;;EACA,MAAI+E,GAAG,CAACoB,QAAJ,KAAiB,IAArB,EAA2B;EACzB,WAAO,CAACD,MAAR;EACD;;EACD,SAAOA,MAAP;EACD,CAND;;EAQA,cAAc,GAAGrB,SAAjB;;EC3EA,IAAMuB,MAAM,GAAG,EAAf;EAEA;;EACA,eAAiB,GAAG,oBAAA,CAASrB,GAAT,EAAcC,KAAd,EAAqBhF,MAArB,EAA6B;EAC/C,SAAO8E,UAAS,CAAC,IAAD,EAAOC,GAAP,EAAYC,KAAZ,EAAmBhF,MAAnB,CAAhB;EACD,CAFD;EAIA;;;EACA,iBAAiB,GAAG,sBAAA,GAAW;EAC7B,SAAOsC,WAAS,CAAC,KAAK3C,IAAN,CAAhB;EACD,CAFD;EAIA;;;EACA,cAAkB,GAAG,mBAAA,GAAW;EAC9B,SAAO,KAAKA,IAAL,KAAc,EAAd,IAAoBgF,OAAO,CAAC,KAAKC,QAAN,CAAlC;EACD,CAFD;EAIA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,SAAO/C,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,EAAuBO,IAAvB,CAA4B,UAAA5E,CAAC;EAAA,WAAI+E,MAAM,CAAC/E,CAAD,CAAN,KAAc,IAAlB;EAAA,GAA7B,CAAP;EACD,CAFD;EAIA;;;EACA,WAAe,GAAG,gBAAA,CAASgF,KAAT,EAAgB;EAChC,MAAIC,SAAS,GAAGD,KAAK,CAACE,UAAtB;EACA,MAAI7G,GAAG,GAAG,KAAKkF,QAAL,IAAiB,KAAKnC,KAAhC;;EACA,MAAI,KAAKiD,IAAL,CAAUc,MAAd,EAAsB;EACpB9G,IAAAA,GAAG,GAAG4G,SAAS,CAACG,UAAV,CAAqB/G,GAArB,EAA0B2G,KAA1B,CAAN;EACD;;EACD,MAAI,KAAKX,IAAL,CAAUgB,IAAV,IAAkB,CAAC,KAAKhB,IAAL,CAAUiB,QAA7B,IAAyC,CAAC,KAAKjB,IAAL,CAAUkB,UAAxD,EAAoE;EAClE,QAAIC,KAAK,GAAG,IAAZ;;EACA,QAAI,KAAKnB,IAAL,CAAUoB,SAAd,EAAyB;EACvBD,MAAAA,KAAK,GAAG,WAAR;EACD,KAFD,MAEO,IAAI,KAAKnB,IAAL,CAAUqB,MAAd,EAAsB;EAC3BF,MAAAA,KAAK,GAAG,QAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUsB,YAAd,EAA4B;EACjCH,MAAAA,KAAK,GAAG,cAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUuB,UAAd,EAA0B;EAC/BJ,MAAAA,KAAK,GAAG,YAAR;EACD,KAFM,MAEA,IAAI,KAAKnB,IAAL,CAAUwB,KAAd,EAAqB;EAC1BL,MAAAA,KAAK,GAAG,OAAR;EACD;;EACDnH,IAAAA,GAAG,GAAG4G,SAAS,CAACa,YAAV,CAAuBzH,GAAvB,EAA4B2G,KAA5B,EAAmCQ,KAAnC,CAAN;EACD;;EACD,OAAKrB,IAAL,GAAY9F,GAAZ;GArBF;;;;;;;;;;EC1BA,IAAM0H,QAAQ,GAAG,OAAjB;EACA,IAAMC,WAAW,GAAG,WAApB;EAGA;EACA;;EAEA;;EACA,WAAe,GAAG,gBAAA,CAASC,OAAT,EAAkBC,OAAlB,EAA2BC,QAA3B,EAAqC;EACrDF,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,MAAI1D,IAAI,GAAG,KAAKjE,IAAhB;EACA,MAAI8H,MAAM,GAAG,KAAKpE,GAAlB;EACA,MAAIG,KAAK,GAAG,KAAKF,IAAjB,CAJqD;;EAOrD,MAAIgE,OAAO,CAACxE,OAAR,KAAoB,IAAxB,EAA8B;EAC5Bc,IAAAA,IAAI,GAAG,KAAKd,OAAL,IAAgB,EAAvB;EACD;;EACD,MAAIwE,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,EAApB;EACD;;EACD,MAAI8B,OAAO,CAAC1C,QAAR,KAAqB,IAArB,IAA6B,KAAKA,QAAtC,EAAgD;EAC9ChB,IAAAA,IAAI,GAAG,KAAKgB,QAAL,IAAiB,EAAxB;EACD;;EACD,MAAI0C,OAAO,CAACI,MAAR,KAAmB,IAAvB,EAA6B;EAC3B9D,IAAAA,IAAI,GAAG,KAAKnB,KAAL,IAAc,KAAK9C,IAAnB,IAA2B,EAAlC;EACD;;EACD,MAAI2H,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB5B,IAAAA,IAAI,GAAG,KAAK4B,IAAL,IAAa,KAAK1C,OAAlB,IAA6B,EAApC;EACD;;EACD,MAAIwE,OAAO,CAAC1F,OAAR,KAAoB,IAAxB,EAA8B;EAC5BgC,IAAAA,IAAI,GAAG5B,SAAW,CAAC4B,IAAD,CAAlB;EACD,GAxBoD;;;EA0BrD,MAAI0D,OAAO,CAACK,SAAR,KAAsB,IAA1B,EAAgC;EAC9B,QAAI,KAAKjC,IAAL,CAAUkC,UAAV,IAAwB,CAAC,KAAK9D,SAAL,EAA7B,EAA+C,CAA/C,MAEO,IAAI,KAAK4B,IAAL,CAAUmC,OAAd,EAAuB;EAC5BjE,MAAAA,IAAI,GAAGA,IAAI,CAACK,WAAL,EAAP,CAD4B;EAE7B,KAFM,MAEA,IAAIoD,WAAW,CAAC9E,IAAZ,CAAiBqB,IAAjB,KAA0B,CAAC,KAAK8B,IAAL,CAAUmC,OAAzC,EAAkD;;EAEvDjE,MAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD;EACF;;EACD,MAAI4E,OAAO,CAACQ,SAAR,KAAsB,IAA1B,EAAgC;EAC9BlE,IAAAA,IAAI,GAAGA,IAAI,CAAClB,WAAL,EAAP;EACD,GAtCoD;;;EAwCrD,MAAI4E,OAAO,CAACS,QAAR,KAAqB,IAArB,IAA6B,KAAKrC,IAAL,CAAUmC,OAA3C,EAAoD;EAClDjE,IAAAA,IAAI,GAAGA,IAAI,CAACf,OAAL,CAAa,KAAb,EAAoB,EAApB,CAAP;EACD,GA1CoD;;;EA6CrD,MAAIyE,OAAO,CAACU,UAAR,KAAuB,IAAvB,IAA+BV,OAAO,CAAC9B,IAAR,KAAiB,IAApD,EAA0D;EACxDiC,IAAAA,MAAM,GAAG,EAAT;EACAjE,IAAAA,KAAK,GAAG,GAAR;;EACA,QAAI,CAAC4D,QAAQ,CAAC7E,IAAT,CAAc,KAAKe,IAAnB,MAA6B,KAA7B,IAAsCgE,OAAO,CAACW,IAA/C,KAAwD,CAAC,KAAKrD,QAAlE,EAA4E;EAC1EpB,MAAAA,KAAK,GAAG,EAAR;EACD;EACF;;EACD,MAAI8D,OAAO,CAACY,WAAR,KAAwB,IAAxB,IAAgC,CAACZ,OAAO,CAAC9B,IAA7C,EAAmD;;EAEjD,QAAI,KAAKhB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EAC9BhB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFD,MAEO,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAKgB,OAAL,CAAa,GAAb,MAAsB,IAA1B,EAAgC;EACrChB,MAAAA,KAAK,GAAG,MAAMA,KAAd;EACD,KAFM,MAEA,IAAI,KAAK2E,WAAL,OAAuB,IAA3B,EAAiC;EACtC3E,MAAAA,KAAK,GAAG,QAAQA,KAAhB;EACD;EACF;;EACD,MAAI+D,OAAO,KAAK,IAAhB,EAAsB;EACpBE,IAAAA,MAAM,GAAG,EAAT;EACD;;EACD,MAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErBhE,IAAAA,KAAK,GAAG,EAAR,CAFqB;EAGtB,GAxEoD;;;EA0ErD,MAAI8D,OAAO,CAACc,aAAR,KAA0B,IAA1B,IAAkC,KAAK1C,IAAL,CAAU2C,YAAhD,EAA8D;EAC5D7E,IAAAA,KAAK,GAAGA,KAAK,CAACX,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACD;;EACD,SAAO4E,MAAM,GAAG7D,IAAT,GAAgBJ,KAAvB;GA7EF;;;;;;ECTA,IAAM8E,UAAU,GAAG;EACjBC,EAAAA,SAAS,EAAE,CADM;EAEjBC,EAAAA,UAAU,EAAE;EAFK,CAAnB;EAKA;;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAASC,IAAT,EAAerC,KAAf,EAAsB;EACrC,MAAIX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY4G,IAAI,CAAChD,IAAjB,CAAX;EACA,MAAMiD,MAAM,GAAGtC,KAAK,CAACX,IAArB;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACkD,IAAL,CAAU,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;;EAEzB,QAAImI,UAAU,CAACnI,CAAD,CAAV,IAAiB,CAACwI,MAAM,CAACxI,CAAD,CAA5B,EAAiC;EAC/B,aAAO,CAAC,CAAR;EACD,KAJwB;;;EAMzB,QAAI,CAACwI,MAAM,CAACxI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD;;EACD,QAAI,CAACwI,MAAM,CAACzI,CAAD,CAAX,EAAgB;EACd,aAAO,CAAP;EACD,KAXwB;;;EAazB,QAAIyI,MAAM,CAACzI,CAAD,CAAN,CAAU2I,OAAV,CAAkB7I,MAAlB,GAA2B2I,MAAM,CAACxI,CAAD,CAAN,CAAU0I,OAAV,CAAkB7I,MAAjD,EAAyD;EACvD,aAAO,CAAP;EACD;;EACD,QAAI2I,MAAM,CAACzI,CAAD,CAAN,CAAU4I,GAAV,CAAc9I,MAAd,GAAuB2I,MAAM,CAACxI,CAAD,CAAN,CAAU2I,GAAV,CAAc9I,MAAzC,EAAiD;EAC/C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GApBM,CAAP;EAqBA,SAAO0F,IAAP;EACD,CAzBD;;EA0BA,YAAc,GAAG+C,QAAjB;;EC9BA,IAAMM,WAAW,GAAG;EAClBpJ,EAAAA,IAAI,EAAE,IADY;EAElB+F,EAAAA,IAAI,EAAE,IAFY;EAGlBd,EAAAA,QAAQ,EAAE,IAHQ;EAIlBoD,EAAAA,UAAU,EAAE,IAJM;EAMlBvF,EAAAA,KAAK,EAAE,KANW;EAOlBwC,EAAAA,EAAE,EAAE,KAPc;EAQlBD,EAAAA,KAAK,EAAE,KARW;EASlBgE,EAAAA,MAAM,EAAE,KATU;EAUlBC,EAAAA,OAAO,EAAE;EAVS,CAApB;EAaA;;EACA,QAAY,GAAG,aAAA,CAAS3B,OAAT,EAAkBjB,KAAlB,EAAyB;EACtCiB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACAA,EAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBH,WAAlB,EAA+BzB,OAA/B,CAAV;EACA,MAAIpB,MAAM,GAAG,EAAb,CAHsC;;EAMtC,MAAIoB,OAAO,CAAC3H,IAAZ,EAAkB;EAChBuG,IAAAA,MAAM,CAACvG,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAI2H,OAAO,CAACI,MAAZ,EAAoB;EAClBxB,IAAAA,MAAM,CAACwB,MAAP,GAAgB,KAAKA,MAArB;EACD;;EAED,MAAIJ,OAAO,CAAC5B,IAAZ,EAAkB;EAChBQ,IAAAA,MAAM,CAACR,IAAP,GAAc7D,MAAM,CAACC,IAAP,CAAY,KAAK4D,IAAjB,CAAd;EACD,GAfqC;;;EAkBtC,MAAI4B,OAAO,CAAC7E,KAAZ,EAAmB;EACjByD,IAAAA,MAAM,CAACzD,KAAP,GAAe,KAAKA,KAApB;EACD;;EACD,MAAI6E,OAAO,CAACrC,EAAR,IAAcqC,OAAO,CAAC0B,MAA1B,EAAkC;EAChC9C,IAAAA,MAAM,CAACjB,EAAP,GAAY,KAAKA,EAAjB;EACD;;EACD,MAAIqC,OAAO,CAAC1C,QAAR,IAAoB,KAAKA,QAAL,KAAkB,IAA1C,EAAgD;EAC9CsB,IAAAA,MAAM,CAACtB,QAAP,GAAkB,KAAKA,QAAvB;EACD;;EACD,MAAI0C,OAAO,CAACU,UAAZ,EAAwB;EACtB9B,IAAAA,MAAM,CAAC7C,GAAP,GAAa,KAAKA,GAAlB;EACA6C,IAAAA,MAAM,CAAC5C,IAAP,GAAc,KAAKA,IAAnB;EACD;;EACD,MAAIgE,OAAO,CAAC2B,OAAZ,EAAqB;EACnB/C,IAAAA,MAAM,CAAC+C,OAAP,GAAiBR,QAAQ,CAAC,IAAD,EAAOpC,KAAP,CAAR,CAAsB,CAAtB,CAAjB;EACD;;EAED,SAAOH,MAAP;GAnCF;;;;;;EChBA,WAAc,GAAGrE,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,OAFe,EAGfC,cAHe,EAIfC,OAJe,EAKfC,OALe,EAMfC,OANe,CAAjB;;ECAA,SAASC,YAAT,GAAwB;EACtB,SAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;EAED;;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASjK,GAAT,EAAckK,KAAd,EAAqB;EAClClK,EAAAA,GAAG,GAAGA,GAAG,CAACmK,QAAJ,EAAN;;EACA,SAAOnK,GAAG,CAACM,MAAJ,GAAa4J,KAApB,EAA2B;EACzBlK,IAAAA,GAAG,IAAI,GAAP;EACD;;EACD,SAAOA,GAAP;EACD,CAND;EAQA;;;EACA,UAAc,GAAG,eAAA,CAAS2B,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyB;EACxC,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJuC;;;EAMxC,MAAIuE,GAAG,GAAG,aAAaL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,EAAV,CAAnB,GAAmC,oBAAnC,GAA0DgD,GAA1D,GAAgE,UAA1E;;EACA,MAAIqE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAAxB,GAAiC,EAAvC;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;EAaA;;;EACA,YAAgB,GAAG,iBAAA,CAAS3I,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyB;EAC1C,MAAIN,YAAY,EAAhB,EAAoB;EAClBO,IAAAA,OAAO,CAACC,GAAR,CAAY,OAAOL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAb,GAA4B,MAA5B,GAAqCgD,GAArC,GAA2C,GAAvD,EAA4D,iBAA5D;EACA;EACD,GAJyC;;;EAM1C,MAAIuE,GAAG,GAAG,aAAaL,MAAM,CAACtI,CAAC,CAACoB,KAAH,EAAU,CAAV,CAAnB,GAAkC,eAAlC,GAAoDgD,GAApD,GAA0D,UAApE;;EACA,MAAIqE,MAAJ,EAAY;EACVE,IAAAA,GAAG,GAAGL,MAAM,CAACK,GAAD,EAAM,EAAN,CAAN,GAAkB,GAAlB,GAAwBF,MAA9B;EACD;;EACDC,EAAAA,OAAO,CAACC,GAAR,CAAYA,GAAZ;EACD,CAXD;;EAaA,WAAe,GAAG,gBAAA,CAASC,GAAT,EAAc;EAC9B,SAAOpI,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;EAIA,aAAiB,GAAG,kBAAA,CAAAvK,GAAG,EAAI;EACzB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;GADF;;;;;;;;;EC3CA;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASjJ,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC7C,MAAIkE,MAAM,GAAGlE,KAAK,CAACX,IAAnB,CAD6C;;EAG7C,MAAID,GAAG,KAAK,EAAR,IAAcA,GAAG,KAAK,GAAtB,IAA6BA,GAAG,KAAK,GAAzC,EAA8C;EAC5C;EACD;;EACD,MAAIA,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD;;EACD4C,EAAAA,GAAG,GAAG+E,GAAG,CAAC1G,SAAJ,CAAc2B,GAAd,CAAN,CAT6C;;EAW7C,MAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB;EACD,GAb4C;;;EAe7C,MAAMgF,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB;;EACA,MAAIA,SAAS,KAAK,IAAlB,EAAwB;EACtBD,IAAAA,GAAG,CAACE,MAAJ,CAAWrJ,CAAX,EAAcoE,GAAd,EAAmBqE,MAAnB;EACD,GAlB4C;;;EAoB7CzI,EAAAA,CAAC,CAACqE,IAAF,CAAOD,GAAP,IAAc,IAAd,CApB6C;;;EAuB7C,MAAI8E,MAAM,CAACjF,cAAP,CAAsBG,GAAtB,MAA+B,IAAnC,EAAyC;;EAEvC8E,IAAAA,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAZ,CAAgB/G,OAAhB,CAAwB,UAAA4I,IAAI,EAAI;EAC9BtJ,MAAAA,CAAC,CAACqE,IAAF,CAAOiF,IAAP,IAAe,IAAf;;EACA,UAAIF,SAAS,KAAK,IAAlB,EAAwB;EACtBD,QAAAA,GAAG,CAACE,MAAJ,CAAWrJ,CAAX,EAAc,OAAOsJ,IAArB;EACD;EACF,KALD,EAFuC;;EASvCtJ,IAAAA,CAAC,CAACuJ,KAAF,CAAQL,MAAM,CAAC9E,GAAD,CAAN,CAAYoF,IAApB,EAA0B,GAA1B,EAA+BxE,KAA/B;EACD;EACF,CAlCD;EAoCA;;;EACA,IAAMyE,OAAO,GAAG,SAAVA,OAAU,CAASpC,IAAT,EAAehD,IAAf,EAAqBoE,MAArB,EAA6BzD,KAA7B,EAAoC;EAClD,MAAI,OAAOX,IAAP,KAAgB,QAApB,EAA8B;EAC5B,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC0K,MAAAA,MAAM,CAAC5B,IAAD,EAAOhD,IAAI,CAAC9F,CAAD,CAAX,EAAgBkK,MAAhB,EAAwBzD,KAAxB,CAAN;EACD,KAH2B;;EAK7B,GALD,MAKO;EACLiE,IAAAA,MAAM,CAAC5B,IAAD,EAAOhD,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAN;EACD;EACF,CATD;;EAUA,OAAc,GAAGyE,OAAjB;;EChDA;;EACA,IAAMF,KAAK,GAAG,SAARA,KAAQ,CAASvJ,CAAT,EAAYoE,GAAZ,EAAiBqE,MAAjB,EAAyBzD,KAAzB,EAAgC;EAC5C,MAAMoE,SAAS,GAAGpE,KAAK,CAACoE,SAAN,EAAlB,CAD4C;;EAG5C,MAAIhF,GAAG,KAAK,GAAZ,EAAiB;EACfpE,IAAAA,CAAC,CAACqE,IAAF,GAAS,EAAT;EACA,WAAOrE,CAAP;EACD,GAN2C;;;EAQ5C,MAAIA,CAAC,CAACqE,IAAF,CAAOD,GAAP,MAAgB,IAApB,EAA0B;EACxB,WAAOpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAP,CADwB;;EAGxB,QAAIgF,SAAS,KAAK,IAAlB,EAAwB;EACtBD,MAAAA,GAAG,CAACO,QAAJ,CAAa1J,CAAb,EAAgBoE,GAAhB,EAAqBqE,MAArB;EACD;EACF,GAd2C;;;EAgB5C,MAAMS,MAAM,GAAGlE,KAAK,CAACX,IAArB;;EACA,MAAI6E,MAAM,CAAC9E,GAAD,CAAV,EAAiB;EACf,QAAIoD,OAAO,GAAG0B,MAAM,CAAC9E,GAAD,CAAN,CAAYoD,OAA1B;;EACA,SAAK,IAAIjJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,OAAO,CAAC7I,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,UAAIyB,CAAC,CAACqE,IAAF,CAAOmD,OAAO,CAACjJ,CAAD,CAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOyB,CAAC,CAACqE,IAAF,CAAOmD,OAAO,CAACjJ,CAAD,CAAd,CAAP;;EACA,YAAI6K,SAAS,KAAK,IAAlB,EAAwB;EACtBD,UAAAA,GAAG,CAACO,QAAJ,CAAa1J,CAAb,EAAgB,QAAQwH,OAAO,CAACjJ,CAAD,CAA/B;EACD;EACF;EACF;EACF;;EACD,SAAOyB,CAAP;EACD,CA7BD;;;EAgCA,IAAM2J,QAAQ,GAAG,SAAXA,QAAW,CAAStC,IAAT,EAAehD,IAAf,EAAqBoE,MAArB,EAA6BzD,KAA7B,EAAoC;EACnD,MAAI,OAAOX,IAAP,KAAgB,QAAhB,IAA4BA,IAAhC,EAAsC;EACpC,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpCgL,MAAAA,KAAK,CAAClC,IAAD,EAAOhD,IAAI,CAAC9F,CAAD,CAAX,EAAgBkK,MAAhB,EAAwBzD,KAAxB,CAAL;EACD;;EACD;EACD;;EACDuE,EAAAA,KAAK,CAAClC,IAAD,EAAOhD,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAL;EACD,CARD;;EASA,WAAc,GAAG2E,QAAjB;;ECzCA,IAAMC,KAAK,GAAG,SAARA,KAAQ,CAASvC,IAAT,EAAejD,GAAf,EAAoBY,KAApB,EAA2B;EACvC,MAAMkE,MAAM,GAAGlE,KAAK,CAACX,IAArB,CADuC;;EAGvC,MAAID,GAAG,CAAC,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClBA,IAAAA,GAAG,GAAGA,GAAG,CAAC5C,OAAJ,CAAY,IAAZ,EAAkB,EAAlB,CAAN;EACD,GALsC;;;EAOvC,MAAI0H,MAAM,CAAC9E,GAAD,CAAN,KAAgBJ,SAApB,EAA+B;EAC7B,WAAO,IAAP;EACD,GATsC;;;EAWvC,MAAI6F,OAAO,GAAGX,MAAM,CAAC9E,GAAD,CAAN,CAAYoF,IAAZ,IAAoB,EAAlC;;EACA,OAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsL,OAAO,CAAClL,MAA5B,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAI8I,IAAI,CAAChD,IAAL,CAAUwF,OAAO,CAACtL,CAAD,CAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAO,KAAP;EACD;EACF;;EACD,MAAI2K,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAZ,KAAoBzD,SAAxB,EAAmC;EACjC,WAAO4F,KAAK,CAACvC,IAAD,EAAO6B,MAAM,CAAC9E,GAAD,CAAN,CAAYqD,GAAnB,EAAwBzC,KAAxB,CAAZ,CADiC;EAElC;;EACD,SAAO,IAAP;EACD,CArBD;;EAuBA,WAAc,GAAG4E,KAAjB;;ECtBA;;;;;EAIA,SAAW,GAAG,cAAA,CAASvF,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC1C8E,EAAAA,GAAG,CAAC,IAAD,EAAOzF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAH;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,WAAe,GAAG,gBAAA,CAASX,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC9C,MAAI4E,OAAK,CAAC,IAAD,EAAOvF,IAAP,EAAaW,KAAb,CAAT,EAA8B;EAC5B8E,IAAAA,GAAG,CAAC,IAAD,EAAOzF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAH;EACD;;EACD,SAAO,IAAP;EACD,CALD;EAOA;;;;;;EAIA,aAAa,GAAG,kBAAA,CAASX,IAAT,EAAeoE,MAAf,EAAuBzD,KAAvB,EAA8B;EAC5CuE,EAAAA,OAAK,CAAC,IAAD,EAAOlF,IAAP,EAAaoE,MAAb,EAAqBzD,KAArB,CAAL;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;;;;EAIA,aAAa,GAAG,kBAAA,CAASX,IAAT,EAAeW,KAAf,EAAsB;EACpC,SAAO4E,OAAK,CAAC,IAAD,EAAOvF,IAAP,EAAaW,KAAb,CAAZ;GADF;;;;;;;;;MC7BM+E;;;EACJ,kBAAuB;EAAA,QAAXzL,IAAW,uEAAJ,EAAI;;EAAA;;EACrBA,IAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACA,QAAI2L,GAAG,GAAGlI,KAAS,CAACzD,IAAD,CAAnB,CAFqB;;EAIrB,SAAKA,IAAL,GAAY2L,GAAG,CAAC3L,IAAJ,IAAY,EAAxB;EACA,SAAK8C,KAAL,GAAa6I,GAAG,CAAC7I,KAAjB;EACA,SAAKK,OAAL,GAAewI,GAAG,CAACxI,OAAnB;EACA,SAAK0C,IAAL,GAAY8F,CAAY,IAAxB;EACA,SAAK1G,QAAL,GAAgB0G,CAAgB,IAAhC;EAEA,SAAKjI,GAAL,GAAWiI,GAAG,CAACjI,GAAJ,IAAW,EAAtB;EACA,SAAKC,IAAL,GAAYgI,GAAG,CAAChI,IAAJ,IAAY,EAAxB;EACA,SAAKoC,IAAL,GAAY,EAAZ;EACA,SAAK6F,IAAL,GAAY,IAAZ;EACA,SAAKC,IAAL,GAAY,IAAZ;EACA,SAAKvG,EAAL,GAAUxF,GAAM,CAAC6L,GAAG,CAAC7I,KAAL,CAAhB;EACA,SAAKqG,GAAL,GAAW,MAAX,CAhBqB;;;EAkBrB,QAAIwC,GAAG,CAACzH,KAAR,EAAe;EACb,WAAKA,KAAL,GAAayH,GAAG,CAACzH,KAAjB;EACD;EACF;;;;;;0BAEGnE,KAAK;EACP,UAAI4L,GAAG,GAAGlI,KAAS,CAAC1D,GAAD,CAAnB;EAEA,WAAKC,IAAL,GAAY2L,GAAG,CAAC3L,IAAhB;EACA,WAAK8C,KAAL,GAAa6I,GAAG,CAAC7I,KAAjB;EACA,aAAO,IAAP;EACD;;;;;EAGH;;;EACA2I,IAAI,CAAClB,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAChC,MAAI/C,IAAI,GAAG,IAAI0C,IAAJ,CAAS,KAAKzL,IAAd,CAAX;EACA+I,EAAAA,IAAI,CAACrF,GAAL,GAAW,KAAKA,GAAhB;EACAqF,EAAAA,IAAI,CAACpF,IAAL,GAAY,KAAKA,IAAjB;EACAoF,EAAAA,IAAI,CAAChD,IAAL,GAAY7D,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAKxD,IAAvB,CAAZ,CAJgC;;;EAOhC,SAAOgD,IAAP;EACD,CARD;;EAUA7G,MAAM,CAACqH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8BwB,OAA9B;EACA7J,MAAM,CAACqH,MAAP,CAAckC,IAAI,CAAClB,SAAnB,EAA8ByB,GAA9B;EAEA,UAAc,GAAGP,IAAjB;;ECpDA;EACA,SAAa,GAAG,eAASrK,CAAT,EAAY;EAC1B,MAAI,KAAKf,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,EAAP;EACD,GAHyB;;;EAK1B,MAAI,KAAK4L,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAI9K,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAKuG,KAAL,CAAWC,KAAX,CAAiB9K,CAAjB,CAAP;EACD;;EACD,WAAO,KAAK6K,KAAL,CAAWC,KAAlB;EACD;;EACD,MAAIA,KAAK,GAAG,CAAC,KAAKC,IAAL,CAAUC,GAAV,CAAc,KAAK5G,KAAnB,CAAD,CAAZ;;EACA,OAAK,IAAIvF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAIqF,EAAE,GAAG4G,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAjC;;EACA,QAAIvG,EAAE,KAAK,IAAX,EAAiB;;EAEf8E,MAAAA,OAAO,CAACiC,KAAR,CAAc,qDAAqD,KAAK7G,KAA1D,GAAkE,GAAhF;EACA;EACD;;EACD,QAAIuD,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAc9G,EAAd,CAAX;EACA4G,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX,EAR2C;;EAU3C,QAAI3H,CAAC,KAAKsE,SAAN,IAAmBtE,CAAC,KAAKnB,CAA7B,EAAgC;EAC9B,aAAOiM,KAAK,CAAC9K,CAAD,CAAZ;EACD;EACF;;EACD,MAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,SAAKuG,KAAL,CAAWC,KAAX,GAAmBA,KAAnB;EACD;;EACD,MAAI9K,CAAC,KAAKsE,SAAV,EAAqB;EACnB,WAAOwG,KAAK,CAAC9K,CAAD,CAAZ;EACD;;EACD,SAAO8K,KAAP;EACD,CAjCD;EAmCA;;;EACA,SAAa,GAAG,cAAA,CAASK,SAAT,EAAoB;EAAA;;EAClC,MAAIA,SAAJ,EAAe;EACb,QAAIjL,CAAC,GAAG,KAAKkL,SAAL,CAAe,KAAKhH,KAApB,EAA2B,KAAKnF,MAAhC,CAAR;EACAiB,IAAAA,CAAC,CAAC2K,KAAF,GAAU,KAAKA,KAAf;EACA,WAAO3K,CAAP;EACD,GALiC;;;EAOlC,MAAI4K,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAIO,QAAQ,GAAGP,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,WAAIA,CAAC,CAACoK,KAAF,EAAJ;EAAA,GAAX,CAAf,CARkC;;EAUlCW,EAAAA,QAAQ,CAACrK,OAAT,CAAiB,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEzB,IAAA,KAAI,CAACkM,IAAL,CAAUX,GAAV,CAAc9J,CAAd;;EACA,QAAI+K,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACmK,IAAF,GAASY,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;;EACD,QAAImH,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAZ,EAAqB;EACnByB,MAAAA,CAAC,CAACkK,IAAF,GAASa,QAAQ,CAACxM,CAAC,GAAG,CAAL,CAAR,CAAgBqF,EAAzB;EACD;EACF,GATD;EAUA,SAAO,KAAKkH,SAAL,CAAeC,QAAQ,CAAC,CAAD,CAAR,CAAYnH,EAA3B,EAA+BmH,QAAQ,CAACpM,MAAxC,CAAP;EACD,CArBD;EAuBA;;;EACA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAI6L,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,SAAOA,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAZ;EACD,CAHD;EAKA;;;EACA,SAAa,GAAG,cAAA,CAASsM,MAAT,EAAiB;EAC/B,MAAI,KAAKtM,MAAL,KAAgB,CAAhB,IAAqB,CAACsM,MAA1B,EAAkC;EAChC,WAAO,KAAP;EACD;;EACD,MAAI,KAAKnH,KAAL,KAAemH,MAAnB,EAA2B;EACzB,WAAO,IAAP;EACD,GAN8B;;;EAQ/B,MAAI,KAAKV,KAAL,CAAWC,KAAf,EAAsB;EACpB,QAAIA,MAAK,GAAG,KAAKD,KAAL,CAAWC,KAAvB;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,MAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIiM,MAAK,CAACjM,CAAD,CAAL,CAASqF,EAAT,KAAgBqH,MAApB,EAA4B;EAC1B,eAAO,IAAP;EACD;EACF;;EACD,WAAO,KAAP;EACD,GAhB8B;;;EAkB/B,MAAIC,MAAM,GAAG,KAAKpH,KAAlB;;EACA,OAAK,IAAIvF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG,KAAKI,MAAL,GAAc,CAAlC,EAAqCJ,EAAC,IAAI,CAA1C,EAA6C;EAC3C,QAAI8I,IAAI,GAAG,KAAKoD,IAAL,CAAUC,GAAV,CAAcQ,MAAd,CAAX;;EACA,QAAI7D,IAAI,KAAKrD,SAAb,EAAwB;EACtB0E,MAAAA,OAAO,CAACiC,KAAR,+DAAqEO,MAArE,0BAA2F,KAAKpH,KAAhG,UADsB;;EAGtB,aAAO,KAAP;EACD;;EACD,QAAIuD,IAAI,CAAC8C,IAAL,KAAcc,MAAlB,EAA0B;EACxB,aAAO,IAAP;EACD;;EACDC,IAAAA,MAAM,GAAG7D,IAAI,CAAC8C,IAAd;EACD;;EACD,SAAO,KAAP;EACD,CAhCD;EAkCA;;;EACA,aAAiB,GAAG,kBAAA,GAAW;EAC7B,SAAO,KAAKK,KAAL,GAAaW,MAAb,CAAoB,UAAAnL,CAAC;EAAA,WAAIA,CAAC,CAAC1B,IAAF,KAAW,EAAf;EAAA,GAArB,EAAwCK,MAA/C;EACD,CAFD;EAIA;;;EACA,gBAAoB,GAAG,qBAAA,GAAW;EAChC,MAAIqB,CAAC,GAAG,KAAKwK,KAAL,CAAW,CAAX,CAAR,CADgC;;EAGhC,SAAOxK,CAAC,CAACkK,IAAT,EAAe;EACblK,IAAAA,CAAC,GAAG,KAAKyK,IAAL,CAAUC,GAAV,CAAc1K,CAAC,CAACkK,IAAhB,CAAJ;EACD;;EACD,MAAIpG,KAAK,GAAG9D,CAAC,CAAC4D,EAAd;EACA,MAAIwH,GAAG,GAAG,CAAV,CAPgC;;EAShC,SAAOpL,CAAC,CAACmK,IAAT,EAAe;EACbnK,IAAAA,CAAC,GAAG,KAAKyK,IAAL,CAAUC,GAAV,CAAc1K,CAAC,CAACmK,IAAhB,CAAJ;EACAiB,IAAAA,GAAG,IAAI,CAAP;EACD;;EACD,SAAO,KAAKN,SAAL,CAAehH,KAAf,EAAsBsH,GAAtB,CAAP;GAbF;;;;;;;;;;;EC3GA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAAShN,GAAT,EAAc;EAC5B,SAAOA,GAAG,CAACmD,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAP;EACD,CAFD;EAIA;;;EACA,QAAY,GAAG,gBAAwC;EAAA,MAA/ByE,OAA+B,uEAArB,EAAqB;EAAA,MAAjBqF,OAAiB;EAAA,MAARC,MAAQ;;EACrD,MAAI,OAAOtF,OAAP,KAAmB,QAAvB,EAAiC;EAC/B,QAAIA,OAAO,KAAK,QAAhB,EAA0B;EACxBA,MAAAA,OAAO,GAAG;EACRU,QAAAA,UAAU,EAAE,IADJ;EAERpG,QAAAA,OAAO,EAAE,IAFD;EAGRkG,QAAAA,SAAS,EAAE,IAHH;EAIRI,QAAAA,WAAW,EAAE,IAJL;EAKRH,QAAAA,QAAQ,EAAE,IALF;EAMRK,QAAAA,aAAa,EAAE,IANP;EAORxD,QAAAA,QAAQ,EAAE,IAPF;EAQR8C,QAAAA,MAAM,EAAE;EARA,OAAV;EAUD,KAXD,MAWO,IAAIJ,OAAO,KAAK,OAAhB,EAAyB;EAC9BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE;EANF,OAAV;EAQD,KATM,MASA,IAAI0C,OAAO,KAAK,SAAhB,EAA2B;EAChCA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,KAHL;;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAOR9B,QAAAA,OAAO,EAAE;EAPD,OAAV;EASD,KAVM,MAUA,IAAIwE,OAAO,KAAK,MAAhB,EAAwB;EAC7BA,MAAAA,OAAO,GAAG;EACRK,QAAAA,SAAS,EAAE,KADH;EAERG,QAAAA,SAAS,EAAE,IAFH;EAGRI,QAAAA,WAAW,EAAE,IAHL;EAIRF,QAAAA,UAAU,EAAE,IAJJ;EAKRpG,QAAAA,OAAO,EAAE,IALD;EAMRgD,QAAAA,QAAQ,EAAE,IANF;EAORY,QAAAA,IAAI,EAAE;EAPE,OAAV;EASD,KAVM,MAUA;EACL8B,MAAAA,OAAO,GAAG,EAAV;EACD;EACF;;EACD,MAAIuE,KAAK,GAAG,KAAKA,KAAL,EAAZ,CA9CqD;;EAgDrD,MAAIgB,MAAM,GAAG,KAAb;;EACA,MAAIhB,KAAK,CAAC,CAAD,CAAL,IAAYA,KAAK,CAAC,CAAD,CAAL,CAASN,IAAT,KAAkB,IAA9B,IAAsCM,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAxB,KAAiC,IAA3E,EAAiF;EAC/EqB,IAAAA,MAAM,GAAG,IAAT;EACD;;EACD,MAAIlN,IAAI,GAAGkM,KAAK,CAAClI,MAAN,CAAa,UAACjE,GAAD,EAAM2B,CAAN,EAASzB,CAAT,EAAe;EACrC0H,IAAAA,OAAO,CAACW,IAAR,GAAe2E,MAAM,IAAIhN,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAA9C;EACA,QAAIuH,OAAO,GAAG,IAAd;EACA,QAAIC,QAAQ,GAAG,IAAf;;EACA,QAAIqF,MAAM,KAAK,KAAf,EAAsB;;EAEpB,UAAIjN,CAAC,KAAK,CAAN,IAAW+M,OAAf,EAAwB;EACtBpF,QAAAA,OAAO,GAAG,KAAV;EACD,OAJmB;;;EAMpB,UAAI3H,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAArB,IAA0B4M,MAA9B,EAAsC;EACpCpF,QAAAA,QAAQ,GAAG,KAAX;EACD;EACF;;EACD,QAAIsF,GAAG,GAAGzL,CAAC,CAAC0L,OAAF,CAAUzF,OAAV,EAAmBC,OAAnB,EAA4BC,QAA5B,CAAV,CAdqC;;;;EAkBrC,WAAO9H,GAAG,GAAGoN,GAAb;EACD,GAnBU,EAmBR,EAnBQ,CAAX,CApDqD;;EAyErD,MAAID,MAAM,KAAK,IAAX,IAAmBD,MAAvB,EAA+B;EAC7BjN,IAAAA,IAAI,GAAG+M,OAAO,CAAC/M,IAAD,CAAd;EACD;;EACD,MAAI2H,OAAO,CAAC3E,IAAR,KAAiB,IAArB,EAA2B;EACzBhD,IAAAA,IAAI,GAAGA,IAAI,CAACgD,IAAL,EAAP;EACD;;EACD,SAAOhD,IAAP;GA/EF;;;;;;ECLA;EACA,QAAY,GAAG,aAAA,GAAW;EACxB,MAAIkM,KAAK,GAAG,KAAKA,KAAL,EAAZ;;EACA,MAAIA,KAAK,CAAC7L,MAAN,GAAe,CAAnB,EAAsB;;EAEpB6L,IAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAewI,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,CAAaR,OAAb,CAAqB,MAArB,EAA6B,EAA7B,CAAf,CAFoB;;EAIpB,QAAImK,QAAQ,GAAGnB,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAApB;EACAgN,IAAAA,QAAQ,CAAC1J,IAAT,GAAgB0J,QAAQ,CAAC1J,IAAT,CAAcT,OAAd,CAAsB,MAAtB,EAA8B,EAA9B,CAAhB;EACD;;EACD,SAAO,IAAP;GATF;;;;;;ECDA,IAAMoK,aAAa,GAAG,WAAtB;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASzF,MAAT,EAAiBjE,KAAjB,EAAwB;;EAE1C,MAAIyJ,aAAa,CAAC1K,IAAd,CAAmBiB,KAAnB,CAAJ,EAA+B;EAC7B,QAAIwE,UAAU,GAAGP,MAAM,CAAC0F,KAAP,CAAa,MAAb,CAAjB;EACA,WAAO3J,KAAK,GAAGwE,UAAf;EACD;;EACD,SAAOP,MAAP;EACD,CAPD;;;EAUA,IAAM2F,aAAa,GAAG,SAAhBA,aAAgB,CAASC,WAAT,EAAsBjB,QAAtB,EAAgC;;EAEpDA,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAY/I,GAAZ,GAAkBgK,WAAW,CAAC,CAAD,CAAX,CAAehK,GAAjC;EACA,MAAI2J,QAAQ,GAAGK,WAAW,CAACA,WAAW,CAACrN,MAAZ,GAAqB,CAAtB,CAA1B,CAHoD;;EAMpD,MAAIsN,OAAO,GAAGlB,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAtB;EACAsN,EAAAA,OAAO,CAAChK,IAAR,GAAe4J,WAAW,CAACF,QAAQ,CAAC1J,IAAV,EAAgBgK,OAAO,CAAChK,IAAxB,CAA1B,CAPoD;;EASpD0J,EAAAA,QAAQ,CAAC1J,IAAT,GAAgB,EAAhB,CAToD;;EAYpD,MAAI0J,QAAQ,CAAC1J,IAAT,KAAkB,EAAtB,EAA0B;EACxB0J,IAAAA,QAAQ,CAAC1J,IAAT,IAAiB,GAAjB;EACD;EACF,CAfD;;;EAkBA,IAAMiK,QAAQ,GAAG,SAAXA,QAAW,CAASF,WAAT,EAAsBjB,QAAtB,EAAgCN,IAAhC,EAAsC;EACrD,MAAI0B,UAAU,GAAGH,WAAW,CAACA,WAAW,CAACrN,MAAZ,GAAqB,CAAtB,CAA5B;EACA,MAAIyN,OAAO,GAAGrB,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAtB;EACA,MAAI0N,OAAO,GAAGF,UAAU,CAAChC,IAAzB,CAHqD;;EAKrDgC,EAAAA,UAAU,CAAChC,IAAX,GAAkBY,QAAQ,CAAC,CAAD,CAAR,CAAYnH,EAA9B,CALqD;;EAOrDwI,EAAAA,OAAO,CAACjC,IAAR,GAAekC,OAAf,CAPqD;;EASrD,MAAIA,OAAJ,EAAa;;EAEX,QAAIC,SAAS,GAAG7B,IAAI,CAACC,GAAL,CAAS2B,OAAT,CAAhB;EACAC,IAAAA,SAAS,CAACpC,IAAV,GAAiBkC,OAAO,CAACxI,EAAzB;EACD,GAboD;;;EAerD,MAAI2I,QAAQ,GAAGP,WAAW,CAAC,CAAD,CAAX,CAAepI,EAA9B;;EACA,MAAI2I,QAAJ,EAAc;EACZ,QAAIN,OAAO,GAAGlB,QAAQ,CAAC,CAAD,CAAtB;EACAkB,IAAAA,OAAO,CAAC/B,IAAR,GAAeqC,QAAf;EACD;EACF,CApBD;;;EAuBA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACtB,MAAL,CAAY,UAACxL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOkO,IAAI,CAACxJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAMmO,YAAY,GAAG,SAAfA,YAAe,CAAStG,MAAT,EAAiBuG,SAAjB,EAA4BC,GAA5B,EAAiC;EACpD,MAAIZ,WAAW,GAAG5F,MAAM,CAACoE,KAAP,EAAlB;EACA,MAAIO,QAAQ,GAAG4B,SAAS,CAACnC,KAAV,EAAf,CAFoD;;EAIpDuB,EAAAA,aAAa,CAACC,WAAD,EAAcjB,QAAd,CAAb,CAJoD;;EAMpDmB,EAAAA,QAAQ,CAACF,WAAD,EAAcjB,QAAd,EAAwB3E,MAAM,CAACqE,IAA/B,CAAR,CANoD;;;EAUpD,MAAIoC,SAAS,GAAG,CAACzG,MAAD,CAAhB;EACA,MAAI0G,KAAK,GAAG1G,MAAM,CAACtC,KAAnB;EACA,MAAIiJ,IAAI,GAAG,CAACH,GAAD,CAAX;EAEAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP,CAdoD;;EAgBpDF,EAAAA,IAAI,CAACrM,OAAL,CAAa,UAAAwM,MAAM,EAAI;;EAErB,QAAIC,YAAY,GAAGD,MAAM,CAACT,IAAP,CAAYtB,MAAZ,CAAmB,UAAAvL,CAAC,EAAI;EACzC,aAAOA,CAAC,CAACkN,KAAF,CAAQA,KAAR,CAAP;EACD,KAFkB,CAAnB;EAGAD,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAhBoD;;EAwBpDN,EAAAA,SAAS,GAAGL,MAAM,CAACK,SAAD,CAAlB;EACAA,EAAAA,SAAS,CAACnM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAYgO,SAAS,CAAChO,MAAtB;EACD,GAFD;EAGAyH,EAAAA,MAAM,CAACmE,KAAP,GAAe,EAAf;EACA,SAAOnE,MAAP;EACD,CA9BD;;EA+BA,UAAc,GAAGsG,YAAjB;;EC5FA,IAAM3G,UAAQ,GAAG,GAAjB;EAGA;;EACA,IAAMgG,eAAa,GAAG,SAAhBA,aAAgB,CAAShB,QAAT,EAAmB;;;EAGvC,MAAIY,QAAQ,GAAGZ,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAvB;;EACA,MAAIoH,UAAQ,CAAC7E,IAAT,CAAcyK,QAAQ,CAAC1J,IAAvB,MAAiC,KAArC,EAA4C;EAC1C0J,IAAAA,QAAQ,CAAC1J,IAAT,IAAiB,GAAjB;EACD;;EACD;EACD,CARD;;;EAWA,IAAMiK,UAAQ,GAAG,SAAXA,QAAW,CAASkB,IAAT,EAAeT,SAAf,EAA0B5B,QAA1B,EAAoC;;EAEnD,MAAIY,QAAQ,GAAGZ,QAAQ,CAACA,QAAQ,CAACpM,MAAT,GAAkB,CAAnB,CAAvB;EACAgN,EAAAA,QAAQ,CAACxB,IAAT,GAAgBiD,IAAI,CAACtJ,KAArB,CAHmD;;EAKnD,MAAI2G,IAAI,GAAG2C,IAAI,CAAC3C,IAAhB;EACA,MAAI3G,KAAK,GAAG2G,IAAI,CAACC,GAAL,CAAS0C,IAAI,CAACtJ,KAAd,CAAZ;;EACA,MAAIA,KAAK,CAACoG,IAAV,EAAgB;EACd,QAAI9D,MAAM,GAAGqE,IAAI,CAACC,GAAL,CAAS5G,KAAK,CAACoG,IAAf,CAAb;EACA9D,IAAAA,MAAM,CAAC+D,IAAP,GAAcwC,SAAS,CAAC7I,KAAxB;EACD,GAVkD;;;;EAanDiH,EAAAA,QAAQ,CAAC,CAAD,CAAR,CAAYb,IAAZ,GAAmBkD,IAAI,CAAC5C,KAAL,CAAW,CAAX,EAAcN,IAAjC,CAbmD;;EAenDkD,EAAAA,IAAI,CAAC5C,KAAL,CAAW,CAAX,EAAcN,IAAd,GAAqByB,QAAQ,CAAC/H,EAA9B;EACD,CAhBD;;EAkBA,IAAM4I,QAAM,GAAG,SAATA,MAAS,CAASC,IAAT,EAAe;EAC5B,SAAOA,IAAI,CAACtB,MAAL,CAAY,UAACxL,CAAD,EAAIpB,CAAJ,EAAU;EAC3B,WAAOkO,IAAI,CAACxJ,OAAL,CAAatD,CAAb,MAAoBpB,CAA3B;EACD,GAFM,CAAP;EAGD,CAJD;;;EAOA,IAAM8O,UAAU,GAAG,SAAbA,UAAa,CAAS9L,QAAT,EAAmBoL,SAAnB,EAA8BC,GAA9B,EAAmC;EACpD,MAAMU,SAAS,GAAG/L,QAAQ,CAACuC,KAA3B;EACA,MAAIiH,QAAQ,GAAG4B,SAAS,CAACnC,KAAV,EAAf,CAFoD;;EAIpDuB,EAAAA,eAAa,CAAChB,QAAD,AAAA,CAAb,CAJoD;;EAMpDmB,EAAAA,UAAQ,CAAC3K,QAAD,EAAWoL,SAAX,EAAsB5B,QAAtB,CAAR,CANoD;;EAQpD,MAAI8B,SAAS,GAAG,CAACtL,QAAD,CAAhB;EACA,MAAIwL,IAAI,GAAG,CAACH,GAAD,CAAX;EACAG,EAAAA,IAAI,GAAGA,IAAI,CAACC,MAAL,CAAYJ,GAAG,CAACK,OAAJ,EAAZ,CAAP;EACAF,EAAAA,IAAI,CAACrM,OAAL,CAAa,UAAA1B,CAAC,EAAI;;EAEhB,QAAImO,YAAY,GAAGnO,CAAC,CAACyN,IAAF,CAAOtB,MAAP,CAAc,UAAAvL,CAAC,EAAI;EACpC,aAAOA,CAAC,CAACkN,KAAF,CAAQQ,SAAR,KAAsB1N,CAAC,CAACkN,KAAF,CAAQH,SAAS,CAAC7I,KAAlB,CAA7B;EACD,KAFkB,CAAnB;EAGA+I,IAAAA,SAAS,GAAGA,SAAS,CAACG,MAAV,CAAiBG,YAAjB,CAAZ;EACD,GAND,EAXoD;;EAmBpDN,EAAAA,SAAS,GAAGL,QAAM,CAACK,SAAD,CAAlB,CAnBoD;;EAqBpDA,EAAAA,SAAS,CAACnM,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAACjB,MAAF,IAAYgO,SAAS,CAAChO,MAAtB,CADqB;;EAGrB,QAAIiB,CAAC,CAACkE,KAAF,KAAYwJ,SAAhB,EAA2B;EACzB1N,MAAAA,CAAC,CAACkE,KAAF,GAAU6I,SAAS,CAAC7I,KAApB;EACD;;EACDlE,IAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,GAPD;EAQA,SAAOhJ,QAAP;EACD,CA9BD;;EA+BA,WAAc,GAAG8L,UAAjB;;ECvEA;EACA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAASX,GAAT,EAAchJ,EAAd,EAAkB4J,YAAlB,EAAgCrL,KAAhC,EAAuC;EACvD,MAAIyG,GAAG,GAAGgE,GAAG,CAACK,OAAJ,EAAV;EACArE,EAAAA,GAAG,CAACgC,IAAJ,CAASgC,GAAT;EAEAhE,EAAAA,GAAG,CAAClI,OAAJ,CAAY,UAAA1B,CAAC,EAAI;;EAEf,QAAIyO,MAAM,GAAGzO,CAAC,CAACyN,IAAF,CAAOiB,IAAP,CAAY,UAAA9N,CAAC;EAAA,aAAIA,CAAC,CAACkN,KAAF,CAAQlJ,EAAR,CAAJ;EAAA,KAAb,CAAb;;EACA,QAAI,CAAC6J,MAAL,EAAa;EACX;EACD;;EACDA,IAAAA,MAAM,CAAC9O,MAAP,IAAiB6O,YAAjB,CANe;;EAQf,QAAIC,MAAM,CAAC3J,KAAP,KAAiBF,EAArB,EAAyB;EACvB6J,MAAAA,MAAM,CAAC3J,KAAP,GAAe3B,KAAK,CAACyB,EAArB;EACD;;EACD6J,IAAAA,MAAM,CAAClD,KAAP,GAAe,EAAf;EACD,GAZD,EAJuD;;EAkBvDqC,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAAStB,MAAT,CAAgB,UAAAvL,CAAC,EAAI;EAC9B,QAAI,CAACA,CAAC,CAACkE,KAAH,IAAY,CAAClE,CAAC,CAACjB,MAAnB,EAA2B;EACzB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD,GALU,CAAX;EAMD,CAxBD;EA0BA;;;;;EAGA,IAAMgP,YAAY,GAAG,SAAfA,YAAe,CAASF,MAAT,EAAiBb,GAAjB,EAAsB;EACzC,MAAInC,IAAI,GAAGmC,GAAG,CAACnC,IAAJ,EAAX;EACA,MAAID,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ,CAFyC;;EAKzC,MAAIN,IAAI,GAAGO,IAAI,CAACC,GAAL,CAASF,KAAK,CAAC,CAAD,CAAL,CAASN,IAAlB,KAA2B,EAAtC;EACA,MAAI/H,KAAK,GAAGsI,IAAI,CAACC,GAAL,CAASF,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBwL,IAAjC,KAA0C,EAAtD;;EAEA,MAAIK,KAAK,CAAC,CAAD,CAAL,CAASjH,QAAT,IAAqB2G,IAAI,CAAC3G,QAA9B,EAAwC;EACtC2G,IAAAA,IAAI,CAAC0D,GAAL,CAAS1D,IAAI,CAAC3G,QAAd;EACA2G,IAAAA,IAAI,CAACjI,IAAL,IAAa,GAAb;EACD,GAXwC;;;EAczCsL,EAAAA,SAAS,CAACX,GAAD,EAAMa,MAAM,CAAC3J,KAAb,EAAoB2J,MAAM,CAAC9O,MAA3B,EAAmCwD,KAAnC,CAAT,CAdyC;;EAiBzC,MAAI+H,IAAJ,EAAU;EACRA,IAAAA,IAAI,CAACC,IAAL,GAAYhI,KAAK,CAACyB,EAAlB;EACD,GAnBwC;;;EAqBzC,MAAIzB,KAAJ,EAAW;EACTA,IAAAA,KAAK,CAAC+H,IAAN,GAAaA,IAAI,CAACtG,EAAlB;EACD,GAvBwC;;;;;EA6B1C,CA7BD;;EA8BA,WAAc,GAAG+J,YAAjB;;ECvDA;;EACA,YAAc,GAAG,iBAAA,CAAShB,SAAT,EAAoBC,GAApB,EAAyB;EACxCiB,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,aAAe,GAAG,kBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;EACzCkB,EAAAA,OAAO,CAAC,IAAD,EAAOnB,SAAP,EAAkBC,GAAlB,CAAP;EACA,SAAO,IAAP;EACD,CAHD;;EAKA,YAAc,GAAG,iBAAA,CAASA,GAAT,EAAc;EAC7Be,EAAAA,OAAY,CAAC,IAAD,EAAOf,GAAP,CAAZ;EACA,SAAO,IAAP;EACD,CAHD;;;EAMA,WAAe,GAAG,gBAAA,CAASD,SAAT,EAAoBC,GAApB,EAAyB;;EAEzC,MAAImB,WAAW,GAAG,KAAKpP,MAAvB;EACAkP,EAAAA,MAAM,CAAC,IAAD,EAAOlB,SAAP,EAAkBC,GAAlB,CAAN,CAHyC;;EAMzC,MAAIoB,GAAG,GAAG,KAAKlD,SAAL,CAAe,KAAKhH,KAApB,EAA2B,KAAKnF,MAAhC,CAAV;EACAqP,EAAAA,GAAG,CAACrP,MAAJ,GAAaoP,WAAb;EACAJ,EAAAA,OAAY,CAACK,GAAD,EAAMpB,GAAN,CAAZ;EACD,CATD;EAWA;;;;;EAGA,WAAe,GAAG,gBAAA,CAAShN,CAAT,EAAY;EAC5B,MAAI4K,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAI3F,MAAM,GAAG;EACXuB,IAAAA,MAAM,EAAE,IADG;EAEX0F,IAAAA,KAAK,EAAE,IAFI;EAGX3J,IAAAA,KAAK,EAAE;EAHI,GAAb;EAKA,MAAIwB,KAAK,GAAG6G,KAAK,CAACyD,SAAN,CAAgB,UAAAjO,CAAC;EAAA,WAAIA,CAAC,CAAC4D,EAAF,KAAShE,CAAC,CAACkE,KAAf;EAAA,GAAjB,CAAZ;;EACA,MAAIH,KAAK,KAAK,CAAC,CAAf,EAAkB;EAChB,WAAOkB,MAAP;EACD,GAV2B;;;EAY5B,MAAIf,KAAK,GAAG0G,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAevK,KAAf,CAAZ;;EACA,MAAIG,KAAK,CAACnF,MAAN,GAAe,CAAnB,EAAsB;EACpBkG,IAAAA,MAAM,CAACuB,MAAP,GAAgB,KAAK0E,SAAL,CAAehH,KAAK,CAAC,CAAD,CAAL,CAASF,EAAxB,EAA4BE,KAAK,CAACnF,MAAlC,CAAhB;EACD;;EACD,MAAImN,KAAK,GAAGtB,KAAK,CAAC0D,KAAN,CAAYvK,KAAZ,EAAmBA,KAAK,GAAG/D,CAAC,CAACjB,MAA7B,CAAZ;;EACA,MAAImN,KAAK,CAACnN,MAAN,GAAe,CAAnB,EAAsB;EACpBkG,IAAAA,MAAM,CAACiH,KAAP,GAAe,KAAKhB,SAAL,CAAegB,KAAK,CAAC,CAAD,CAAL,CAASlI,EAAxB,EAA4BkI,KAAK,CAACnN,MAAlC,CAAf;EACD;;EACD,MAAIoF,GAAG,GAAGyG,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG/D,CAAC,CAACjB,MAAtB,EAA8B6L,KAAK,CAAC7L,MAApC,CAAV;;EACA,MAAIoF,GAAG,CAACpF,MAAJ,GAAa,CAAjB,EAAoB;EAClBkG,IAAAA,MAAM,CAAC1C,KAAP,GAAe,KAAK2I,SAAL,CAAe/G,GAAG,CAAC,CAAD,CAAH,CAAOH,EAAtB,EAA0BG,GAAG,CAACpF,MAA9B,EAAsC,KAAK8L,IAA3C,CAAf;EACD;;EACD,SAAO5F,MAAP;GAxBF;;;;;;;;;;ECrCA;EACA,UAAY,GAAG,aAAA,GAA8B;EAAA,MAArBoB,OAAqB,uEAAX,EAAW;EAAA,MAAPjB,KAAO;EAC3C,MAAImJ,GAAG,GAAG,EAAV,CAD2C;;EAG3C,MAAIlI,OAAO,CAAC3H,IAAZ,EAAkB;EAChB6P,IAAAA,GAAG,CAAC7P,IAAJ,GAAW,KAAKA,IAAL,EAAX;EACD;;EACD,MAAI2H,OAAO,CAACI,MAAZ,EAAoB;EAClB8H,IAAAA,GAAG,CAAC9H,MAAJ,GAAa,KAAK/H,IAAL,CAAU,QAAV,CAAb;EACD;;EACD,MAAI2H,OAAO,CAAC7E,KAAZ,EAAmB;EACjB+M,IAAAA,GAAG,CAAC/M,KAAJ,GAAY,KAAK9C,IAAL,CAAU,OAAV,CAAZ;EACD;;EACD,MAAI2H,OAAO,CAACxE,OAAZ,EAAqB;EACnB0M,IAAAA,GAAG,CAAC1M,OAAJ,GAAc,KAAKnD,IAAL,CAAU,SAAV,CAAd;EACD;;EACD,MAAI2H,OAAO,CAAC9B,IAAZ,EAAkB;EAChBgK,IAAAA,GAAG,CAAChK,IAAJ,GAAW,KAAK7F,IAAL,CAAU,MAAV,CAAX;EACD;;EACD,MAAI2H,OAAO,CAAC3E,IAAZ,EAAkB;EAChB,QAAI6M,GAAG,CAAC7P,IAAR,EAAc;EACZ6P,MAAAA,GAAG,CAAC7P,IAAJ,GAAW6P,GAAG,CAAC7P,IAAJ,CAASgD,IAAT,EAAX;EACD;;EACD,QAAI6M,GAAG,CAAC9H,MAAR,EAAgB;EACd8H,MAAAA,GAAG,CAAC9H,MAAJ,GAAa8H,GAAG,CAAC9H,MAAJ,CAAW/E,IAAX,EAAb;EACD;;EACD,QAAI6M,GAAG,CAAC1M,OAAR,EAAiB;EACf0M,MAAAA,GAAG,CAAC1M,OAAJ,GAAc0M,GAAG,CAAC1M,OAAJ,CAAYH,IAAZ,EAAd;EACD;EACF,GA5B0C;;;EA8B3C,MAAI2E,OAAO,CAACuE,KAAZ,EAAmB;EACjB,QAAIvE,OAAO,CAACuE,KAAR,KAAkB,IAAtB,EAA4B;EAC1BvE,MAAAA,OAAO,CAACuE,KAAR,GAAgB,EAAhB;EACD;;EACD2D,IAAAA,GAAG,CAAC3D,KAAJ,GAAY,KAAKA,KAAL,GAAaQ,GAAb,CAAiB,UAAAhL,CAAC;EAAA,aAAIA,CAAC,CAACoO,IAAF,CAAOnI,OAAO,CAACuE,KAAf,EAAsBxF,KAAtB,CAAJ;EAAA,KAAlB,CAAZ;EACD;;EACD,SAAOmJ,GAAP;GApCF;;;;;;ECDA;EACA,aAAiB,GAAG,kBAAA,CAASE,IAAT,EAAe;;EAEjC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI5D,IAAI,GAAG,KAAKA,IAAhB,CALiC;;EAOjC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAM8D,QAAQ,GAAG,SAAXA,QAAW,CAAS1K,EAAT,EAAa;EAC5B,QAAIyD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS9G,EAAT,CAAX;;EACA,QAAI,CAACyD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACboE,MAAAA,QAAQ,CAACjH,IAAI,CAAC8C,IAAN,CAAR,CADa;EAEd;EACF,GATD;;EAUA,MAAIoE,GAAG,GAAG,KAAK/D,KAAL,EAAV;EACA,MAAImB,QAAQ,GAAG4C,GAAG,CAACA,GAAG,CAAC5P,MAAJ,GAAa,CAAd,CAAlB;EACA2P,EAAAA,QAAQ,CAAC3C,QAAQ,CAACxB,IAAV,CAAR;;EACA,MAAIK,KAAK,CAAC7L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAvBgC;;;EAyBjC,MAAIiB,CAAC,GAAG,KAAKkL,SAAL,CAAeN,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAAxB,EAA4B4G,KAAK,CAAC7L,MAAlC,CAAR;EACA,SAAOiB,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAP;EACD,CA3BD;EA6BA;;;EACA,cAAkB,GAAG,mBAAA,CAASA,IAAT,EAAe;;EAElC,MAAI,CAACA,IAAL,EAAW;EACTA,IAAAA,IAAI,GAAG,IAAP;EACD;;EACD,MAAI5D,IAAI,GAAG,KAAKA,IAAhB,CALkC;;EAOlC,MAAID,KAAK,GAAG,EAAZ;;EACA,MAAMgE,SAAS,GAAG,SAAZA,SAAY,CAAS5K,EAAT,EAAa;EAC7B,QAAIyD,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS9G,EAAT,CAAX;;EACA,QAAI,CAACyD,IAAL,EAAW;EACT;EACD;;EACDmD,IAAAA,KAAK,CAACI,IAAN,CAAWvD,IAAX;;EACA,QAAIA,IAAI,CAAC6C,IAAT,EAAe;EACbsE,MAAAA,SAAS,CAACnH,IAAI,CAAC6C,IAAN,CAAT,CADa;EAEd;EACF,GATD;;EAUA,MAAI7C,IAAI,GAAGoD,IAAI,CAACC,GAAL,CAAS,KAAK5G,KAAd,CAAX;EACA0K,EAAAA,SAAS,CAACnH,IAAI,CAAC6C,IAAN,CAAT;;EACA,MAAIM,KAAK,CAAC7L,MAAN,KAAiB,CAArB,EAAwB;EACtB,WAAO,EAAP;EACD,GAtBiC;;;EAwBlC,MAAIiB,CAAC,GAAG,KAAKkL,SAAL,CAAeN,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAL,CAAwBiF,EAAvC,EAA2C4G,KAAK,CAAC7L,MAAjD,CAAR;EACA,SAAOiB,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAP;GAzBF;;;;;;;EC/BA,aAAc,GAAG7N,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,SAJe,EAKfC,SALe,EAMfC,SANe,EAOfuG,YAPe,CAAjB;;ECAA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAS9O,CAAT,EAAYyO,IAAZ,EAAkB;EACjC,MAAIA,IAAI,CAAC1P,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,IAAP;EACD;;EACD,OAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8P,IAAI,CAAC1P,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAImF,GAAG,GAAG2K,IAAI,CAAC9P,CAAD,CAAd,CADuC;;EAGvC,QAAImF,GAAG,CAACiL,QAAJ,KAAiB,IAAjB,IAAyBjL,GAAG,CAACoB,QAAJ,KAAiB,IAA9C,EAAoD;;EAElD,UAAIpB,GAAG,CAACI,KAAJ,KAAc,IAAd,IAAsBvF,CAAC,GAAG,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD;EACF,KARsC;;;EAUvC,QAAImF,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAACoB,QAAJ,KAAiB,IAA9C,EAAoD;EAClD,aAAO,IAAP;EACD;EACF;;EACD,SAAO,KAAP;EACD,CAnBD;;EAoBA,eAAc,GAAG4J,QAAjB;;EClBA;;EACA,IAAME,SAAS,GAAG,SAAZA,SAAY,CAASpE,KAAT,EAAgBxK,CAAhB,EAAmB0D,GAAnB,EAAwBmL,KAAxB,EAA+BlL,KAA/B,EAAsChF,MAAtC,EAA8C;EAC9D,MAAImF,KAAK,GAAG9D,CAAZ;;EACA,SAAOA,CAAC,GAAGwK,KAAK,CAAC7L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;;EAE/B,QAAI6O,KAAK,IAAIrE,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBoL,KAAnB,EAA0BlL,KAAK,GAAG3D,CAAlC,EAAqCrB,MAArC,CAAb,EAA2D;EACzD,aAAOqB,CAAP;EACD;;EACD,QAAI8O,KAAK,GAAG9O,CAAC,GAAG8D,KAAJ,GAAY,CAAxB,CAL+B;;EAO/B,QAAIJ,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyB8K,KAAK,KAAKpL,GAAG,CAACqL,GAA3C,EAAgD;EAC9C,aAAO/O,CAAP;EACD,KAT8B;;;EAW/B,QAAIwK,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,KAAnD,EAA0D;;EAExD,UAAI+E,GAAG,CAACsL,GAAJ,KAAYhL,SAAZ,IAAyB8K,KAAK,GAAGpL,GAAG,CAACsL,GAAzC,EAA8C;EAC5C,eAAO,IAAP;EACD;;EACD,aAAOhP,CAAP;EACD;EACF;;EACD,SAAOA,CAAP;EACD,CAtBD;;;EAyBA,IAAMiP,QAAQ,GAAG,SAAXA,QAAW,CAASzE,KAAT,EAAgBxK,CAAhB,EAAmBkP,OAAnB,EAA4BvL,KAA5B,EAAmChF,MAAnC,EAA2C;;EAE1D,MAAI,CAACuQ,OAAL,EAAc;EACZ,WAAO1E,KAAK,CAAC7L,MAAb;EACD,GAJyD;;;EAM1D,SAAOqB,CAAC,GAAGwK,KAAK,CAAC7L,MAAjB,EAAyBqB,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIwK,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmByL,OAAnB,EAA4BvL,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,MAAmD,IAAvD,EAA6D;EAC3D,aAAOqB,CAAP;EACD;EACF,GAVyD;;;EAY1D,SAAO,IAAP;EACD,CAbD;;;EAgBA,IAAMmP,gBAAgB,GAAG,SAAnBA,gBAAmB,CAASC,WAAT,EAAsBC,YAAtB,EAAoC7E,KAApC,EAA2C8E,UAA3C,EAAuDC,KAAvD,EAA8D;EACrF,MAAMpQ,CAAC,GAAGiQ,WAAW,CAACC,YAAD,CAArB;;EAEA,MAAIlQ,CAAJ,EAAO;EACL,WAAOA,CAAP;EACD;;EALoF,MAO7EyE,EAP6E,GAOtE4G,KAAK,CAAC8E,UAAD,CAPiE,CAO7E1L,EAP6E;EASrFwL,EAAAA,WAAW,CAACC,YAAD,CAAX,GAA4B;EAC1BE,IAAAA,KAAK,EAAEvF,MAAM,CAACuF,KAAD,CADa;EAE1BzL,IAAAA,KAAK,EAAEF,EAFmB;EAG1BjF,IAAAA,MAAM,EAAE;EAHkB,GAA5B;EAMA,SAAOyQ,WAAW,CAACC,YAAD,CAAlB;EACD,CAhBD;EAkBA;;;EACA,IAAMG,OAAO,GAAG,SAAVA,OAAU,CAAShF,KAAT,EAAgB6D,IAAhB,EAAsB1K,KAAtB,EAA6BhF,MAA7B,EAAqC;EACnD,MAAMyQ,WAAW,GAAG,EAApB;EACA,MAAIK,eAAe,GAAG,IAAtB;EACA,MAAIzP,CAAC,GAAG,CAAR,CAHmD;;EAKnD,OAAK,IAAIF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuO,IAAI,CAAC1P,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAI4D,GAAG,GAAG2K,IAAI,CAACvO,CAAD,CAAd,CADuC;;EAIvC,QAAM4P,YAAY,GAAG,OAAOhM,GAAG,CAACiM,KAAX,KAAqB,QAArB,IAAiC,OAAOjM,GAAG,CAACiM,KAAX,KAAqB,QAA3E;EACA,QAAIN,YAAY,GAAG,IAAnB,CALuC;;EAQvC,QAAIK,YAAJ,EAAkB;EAChB,UAAMxF,IAAI,GAAGmE,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAjB;;EACA,UAAIoK,IAAI,IAAIA,IAAI,CAACyF,KAAL,KAAejM,GAAG,CAACiM,KAA3B,IAAoCF,eAAxC,EAAyD;EACvDJ,QAAAA,YAAY,GAAGI,eAAf;EACD,OAFD,MAEO;EACLJ,QAAAA,YAAY,GAAGjR,GAAM,CAACsF,GAAG,CAACiM,KAAL,CAArB;EACAF,QAAAA,eAAe,GAAGJ,YAAlB;EACD;EACF,KAhBsC;;;EAmBvC,QAAI,CAAC7E,KAAK,CAACxK,CAAD,CAAV,EAAe;;EAEb,UAAM4P,QAAQ,GAAGvB,IAAI,CAACH,KAAL,CAAWpO,CAAX,EAAc8E,IAAd,CAAmB,UAAAiL,MAAM;EAAA,eAAI,CAACA,MAAM,CAAClB,QAAZ;EAAA,OAAzB,CAAjB;;EACA,UAAIiB,QAAQ,KAAK,KAAjB,EAAwB;EACtB;EACD,OALY;;;EAOb,aAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,KA3BsC;;;EA8BvC,QAAIlM,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IAAyBH,GAAG,CAACoM,MAAJ,KAAe,IAA5C,EAAkD;EAChD,UAAIC,MAAM,GAAGd,QAAQ,CAACzE,KAAD,EAAQxK,CAAR,EAAWqO,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAf,EAAwB4D,GAAxB,EAA6BC,KAA7B,AAAA,CAArB,CADgD;;EAGhD,UAAID,GAAG,CAACsL,GAAJ,KAAYhL,SAAZ,IAAyB+L,MAAM,GAAG/P,CAAT,GAAa0D,GAAG,CAACsL,GAA9C,EAAmD;EACjD,eAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,OAL+C;;;EAOhD,UAAItL,GAAG,CAACqL,GAAJ,KAAY/K,SAAZ,IAAyB+L,MAAM,GAAG/P,CAAT,GAAa0D,GAAG,CAACqL,GAA9C,EAAmD;EACjD/O,QAAAA,CAAC,GAAGA,CAAC,GAAG0D,GAAG,CAACqL,GAAZ;EACA;EACD;;EAED,UAAIgB,MAAM,KAAK,IAAf,EAAqB;EACnB,eAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CADmB;EAEpB,OAd+C;;;EAiBhD,UAAIL,YAAJ,EAAkB;EAChB,YAAMvQ,CAAC,GAAGgQ,gBAAgB,CAACC,WAAD,EAAcC,YAAd,EAA4B7E,KAA5B,EAAmCxK,CAAnC,EAAsC0D,GAAG,CAACiM,KAA1C,CAA1B,CADgB;;EAIhBxQ,QAAAA,CAAC,CAACR,MAAF,GAAWoR,MAAM,GAAG/P,CAApB;EACD;;EAEDA,MAAAA,CAAC,GAAG+P,MAAJ;EAEA;EACD,KAzDsC;;;;;;;EAgEvC,QACErM,GAAG,CAACG,QAAJ,KAAiB,IAAjB,IACCH,GAAG,CAACK,GAAJ,KAAY,IAAZ,IACCL,GAAG,CAACoM,MAAJ,KAAe,IADhB,IAECnM,KAAK,GAAG3D,CAAR,GAAYrB,MAAM,GAAG,CAFtB,IAGC6L,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBjD,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBnE,GAAlB,EAAuB;EAAEK,MAAAA,GAAG,EAAE;EAAP,KAAvB,CAAnB,EAA2DJ,KAAK,GAAG3D,CAAnE,EAAsErB,MAAtE,MAAkF,IAJpF,IAKA6L,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmBC,GAAnB,EAAwBC,KAAK,GAAG3D,CAAhC,EAAmCrB,MAAnC,MAA+C,IANjD,EAOE;EACA,UAAIqR,OAAO,GAAGhQ,CAAd,CADA;;;EAIA,UAAI0D,GAAG,CAACiL,QAAJ,IAAgBN,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAxB,EAAiC;;EAE/B,YAAI0K,KAAK,CAACxK,CAAD,CAAL,CAASyD,SAAT,CAAmB4K,IAAI,CAACvO,CAAC,GAAG,CAAL,CAAvB,EAAgC6D,KAAK,GAAG3D,CAAxC,EAA2CrB,MAA3C,MAAuD,IAA3D,EAAiE;;;EAG/D,cAAI,CAAC6L,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAN,IAAiBwK,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuB4K,IAAI,CAACvO,CAAC,GAAG,CAAL,CAA3B,EAAoC6D,KAAK,GAAG3D,CAA5C,EAA+CrB,MAA/C,MAA2D,KAAhF,EAAuF;EACrFmB,YAAAA,CAAC,IAAI,CAAL;EACD;EACF;EACF,OAbD;;;EAeAE,MAAAA,CAAC,IAAI,CAAL,CAfA;;EAiBA,UAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAhB,EAAsB;;EAEpB,YAAI/D,CAAC,KAAKwK,KAAK,CAAC7L,MAAZ,IAAsB+E,GAAG,CAACoM,MAAJ,KAAe,IAAzC,EAA+C;EAC7C,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD;EACF,OAtBD;;;EAyBA,UAAIpM,GAAG,CAACoM,MAAJ,KAAe,IAAnB,EAAyB;;;;;EAKvB9P,QAAAA,CAAC,GAAG4O,SAAS,CAACpE,KAAD,EAAQxK,CAAR,EAAWQ,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBnE,GAAlB,EAAuB;EAAEI,UAAAA,KAAK,EAAE,KAAT;EAAgBC,UAAAA,GAAG,EAAE;EAArB,SAAvB,CAAX,EAAiEsK,IAAI,CAACvO,CAAC,GAAG,CAAL,CAArE,EAA8E6D,KAA9E,EAAqFhF,MAArF,CAAb;;EACA,YAAIqB,CAAC,KAAK,IAAV,EAAgB;EACd,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CADc;EAEf,SARsB;;;;EAWvB,YAAI0D,GAAG,CAACK,GAAJ,KAAY,IAAZ,IAAoBJ,KAAK,GAAG3D,CAAR,KAAcrB,MAAtC,EAA8C;EAC5C,iBAAO,CAAC,KAAD,EAAQ,IAAR,CAAP,CAD4C;EAE7C;EACF;;EACD,UAAI+Q,YAAJ,EAAkB;;EAEhB,YAAMvQ,EAAC,GAAGgQ,gBAAgB,CAACC,WAAD,EAAcC,YAAd,EAA4B7E,KAA5B,EAAmCwF,OAAnC,EAA4CtM,GAAG,CAACiM,KAAhD,CAA1B,CAFgB;;;EAKhB,YAAI3P,CAAC,GAAG,CAAJ,IAAS0D,GAAG,CAACoM,MAAjB,EAAyB;EACvB3Q,UAAAA,EAAC,CAACR,MAAF,IAAYqB,CAAC,GAAGgQ,OAAhB;EACD,SAFD,MAEO;EACL7Q,UAAAA,EAAC,CAACR,MAAF;EACD;EACF;;EAED;EACD,KA5HsC;;;EA+HvC,QAAI+E,GAAG,CAACiL,QAAJ,KAAiB,IAArB,EAA2B;EACzB;EACD,KAjIsC;;;EAmIvC,QAAInE,KAAK,CAACxK,CAAD,CAAL,CAASiQ,UAAT,MAAyB5B,IAAI,CAACvO,CAAC,GAAG,CAAL,CAA7B,IAAwC0K,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAjD,EAA0D;;EAExD,UAAIwK,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayD,SAAb,CAAuBC,GAAvB,EAA4BC,KAAK,GAAG3D,CAApC,EAAuCrB,MAAvC,CAAJ,EAAoD;EAClDqB,QAAAA,CAAC,IAAI,CAAL;EACA;EACD;EACF,KAzIsC;;;EA2IvC,WAAO,CAAC,KAAD,EAAQ,IAAR,CAAP;EACD,GAjJkD;;;EAoJnD,SAAO,CAACwK,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAelO,CAAf,CAAD,EAAoBoP,WAApB,CAAP;EACD,CArJD;;EAsJA,eAAc,GAAGI,OAAjB;;ECtNA,IAAMU,WAAW,GAAG,SAAdA,WAAc,CAAS1F,KAAT,EAAgB6D,IAAhB,EAAsB8B,OAAtB,EAA+B;EACjD,MAAI,CAACA,OAAD,IAAYA,OAAO,CAACxR,MAAR,KAAmB,CAAnC,EAAsC;EACpC,WAAOwR,OAAP;EACD,GAHgD;;;EAKjD,MAAIC,KAAK,GAAG/B,IAAI,CAACzJ,IAAL,CAAU,UAAA9E,CAAC;EAAA,WAAIA,CAAC,CAACiE,GAAN;EAAA,GAAX,CAAZ;;EACA,MAAIqM,KAAJ,EAAW;EACT,QAAIzE,QAAQ,GAAGnB,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAApB;EACAwR,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe;EAAA,UAAUvC,GAAV,QAAGkD,KAAH;EAAA,aAAoBlD,GAAG,CAAC3F,OAAJ,CAAY0I,QAAZ,MAA0B,CAAC,CAA/C;EAAA,KAAf,CAAV;EACD;;EACD,SAAOwE,OAAP;EACD,CAXD;;EAYA,kBAAc,GAAGD,WAAjB;;ECZA;;;;;;;;;;;;;;;;;EAiBA,IAAMG,SAAS,GAAG,sBAAlB;EACA,IAAMC,OAAO,GAAG,IAAhB;EACA,IAAMC,WAAW,GAAG,IAAIC,MAAJ,CAAW,UAAX,CAApB;;EAEA,IAAM/N,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;;EAIA,IAAMjF,GAAG,GAAG,SAANA,GAAM,CAAS1F,GAAT,EAAc;EACxB,SAAOA,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAV;EACD,CAFD;;EAGA,IAAMmF,KAAK,GAAG,SAARA,KAAQ,CAASzF,GAAT,EAAc;EAC1B,SAAOA,GAAG,CAAC,CAAD,CAAV;EACD,CAFD;;EAGA,IAAMoS,UAAU,GAAG,SAAbA,UAAa,CAASpS,GAAT,EAAc;EAC/B,SAAOA,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAAP;EACD,CAFD;;EAGA,IAAM0H,QAAQ,GAAG,SAAXA,QAAW,CAASrS,GAAT,EAAc;EAC7B,SAAOA,GAAG,CAAC2K,MAAJ,CAAW,CAAX,EAAc3K,GAAG,CAACM,MAAJ,GAAa,CAA3B,CAAP;EACD,CAFD;;EAGA,IAAMgS,SAAS,GAAG,SAAZA,SAAY,CAAStS,GAAT,EAAc;EAC9BA,EAAAA,GAAG,GAAGoS,UAAU,CAACpS,GAAD,CAAhB;EACAA,EAAAA,GAAG,GAAGqS,QAAQ,CAACrS,GAAD,CAAd;EACA,SAAOA,GAAP;EACD,CAJD;;;EAOA,IAAMuS,UAAU,GAAG,SAAbA,UAAa,CAASzQ,CAAT,EAAY;EAC7B,MAAI8J,GAAG,GAAG,EAAV,CAD6B;;EAG7B,OAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,IAAI,CAA5B,EAA+B;;EAE7B,QAAIwF,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAClG,GAAJ,GAAU,IAAV;EACA5D,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD,KAL4B;;;EAO7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,MAAAA,GAAG,CAACnG,KAAJ,GAAY,IAAZ;EACA3D,MAAAA,CAAC,GAAGsQ,UAAU,CAACtQ,CAAD,CAAd;EACD,KAV4B;;;EAY7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtC8J,MAAAA,GAAG,CAAC0F,KAAJ,GAAY,IAAZ;;EAEA,UAAI7L,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,QAAAA,GAAG,CAAC4G,SAAJ,GAAgB9M,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAX,GAAiB,QAAjB,GAA4B,OAA5C;EACD,OAFD,MAEO;EACL8J,QAAAA,GAAG,CAAC4G,SAAJ,GAAgB,KAAhB;EACD;;EAED1Q,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ;EACArB,MAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,EAAjB,CAAJ,CAVsC;;EAatC,UAAIsC,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB,YAAMgO,GAAG,GAAGoC,WAAW,CAACO,IAAZ,CAAiB3Q,CAAjB,CAAZ;;EAEA,YAAIgO,GAAG,CAACxP,MAAJ,IAAc,CAAlB,EAAqB;EACnBsL,UAAAA,GAAG,CAAC0F,KAAJ,GAAYxB,GAAG,CAAC,CAAD,CAAf;EACAhO,UAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU2M,GAAG,CAAC,CAAD,CAAb,EAAkB,EAAlB,CAAJ;EACD;EACF;EACF,KAjC4B;;;EAmC7B,QAAIpK,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA3P,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EACD,QAAIA,CAAC,KAAK,GAAN,IAAa4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAxB,IAA+BA,CAAC,KAAK,KAAzC,EAAgD;EAC9C8J,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA3P,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EACD,QAAI4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAf,EAAoB;EAClB8J,MAAAA,GAAG,CAAC0E,QAAJ,GAAe,IAAf;EACAxO,MAAAA,CAAC,GAAGuQ,QAAQ,CAACvQ,CAAD,CAAZ;EACD;;EAED,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,MAAAA,GAAG,CAACnF,QAAJ,GAAe,IAAf;EACA3E,MAAAA,CAAC,GAAGsQ,UAAU,CAACtQ,CAAD,CAAd;EACD,KAnD4B;;;EAqD7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;;EAEtC,UAAImQ,OAAO,CAACpP,IAAR,CAAaf,CAAb,CAAJ,EAAqB;EACnB8J,QAAAA,GAAG,CAACxF,OAAJ,GAActE,CAAC,CAAChC,KAAF,CAAQmS,OAAR,CAAd;EACArG,QAAAA,GAAG,CAACvF,QAAJ,GAAe,KAAf;EACD,OAHD,MAGO;EACLuF,QAAAA,GAAG,CAACxF,OAAJ,GAActE,CAAC,CAAChC,KAAF,CAAQ,GAAR,CAAd;EACA8L,QAAAA,GAAG,CAACvF,QAAJ,GAAe,IAAf;EACD,OARqC;;;EAUtCuF,MAAAA,GAAG,CAACxF,OAAJ,CAAY,CAAZ,IAAiBgM,UAAU,CAACxG,GAAG,CAACxF,OAAJ,CAAY,CAAZ,CAAD,CAA3B;EACA,UAAImC,IAAI,GAAGqD,GAAG,CAACxF,OAAJ,CAAY9F,MAAZ,GAAqB,CAAhC;EACAsL,MAAAA,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,IAAoB8J,QAAQ,CAACzG,GAAG,CAACxF,OAAJ,CAAYmC,IAAZ,CAAD,CAA5B,CAZsC;;EActCqD,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgB,UAAAjL,CAAC;EAAA,eAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,OAAjB,CAAd;EACA2I,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAY0G,MAAZ,CAAmB,UAAApL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAApB,CAAd,CAfsC;;EAiBtCkK,MAAAA,GAAG,CAACxF,OAAJ,GAAcwF,GAAG,CAACxF,OAAJ,CAAYuG,GAAZ,CAAgB4F,UAAhB,CAAd;EACAzQ,MAAAA,CAAC,GAAG,EAAJ;EACD,KAxE4B;;;EA2E7B,QAAI2D,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAGwQ,SAAS,CAACxQ,CAAD,CAAb;EACA8J,MAAAA,GAAG,CAAC1F,KAAJ,GAAY,IAAIiM,MAAJ,CAAWrQ,CAAX,CAAZ,CAFsC;;EAGtC,aAAO8J,GAAP;EACD,KA/E4B;;;EAiF7B,QAAInG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAb,IAAoB4D,GAAG,CAAC5D,CAAD,CAAH,KAAW,GAAnC,EAAwC;EACtCA,MAAAA,CAAC,GAAGwQ,SAAS,CAACxQ,CAAD,CAAb;EACA8J,MAAAA,GAAG,CAAC/F,IAAJ,GAAW,IAAX;EACA+F,MAAAA,GAAG,CAAC1H,IAAJ,GAAWpC,CAAX;EACA,aAAO8J,GAAP;EACD;EACF,GA1F4B;;;EA4F7B,MAAIoG,SAAS,CAACnP,IAAV,CAAef,CAAf,MAAsB,IAA1B,EAAgC;EAC9BA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU6O,SAAV,EAAqB,UAACxR,CAAD,EAAIC,CAAJ,EAAU;EACjC,UAAI8J,GAAG,GAAG9J,CAAC,CAACX,KAAF,CAAQ,IAAR,CAAV;;EACA,UAAIyK,GAAG,CAACjK,MAAJ,KAAe,CAAnB,EAAsB;;EAEpBsL,QAAAA,GAAG,CAAC+E,GAAJ,GAAU+B,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUgC,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACD,OAJD,MAIO;;;EAGLqB,QAAAA,GAAG,CAAC+E,GAAJ,GAAU+B,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAJ,CAAhB;EACAqB,QAAAA,GAAG,CAAC8E,GAAJ,GAAUgC,MAAM,CAACnI,GAAG,CAAC,CAAD,CAAH,IAAU,GAAX,CAAhB;EACD;;EACDqB,MAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA,aAAO,EAAP;EACD,KAdG,CAAJ;EAeD,GA5G4B;;;EA+G7B,MAAIhM,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,IAAAA,GAAG,CAAC7F,GAAJ,GAAUqM,UAAU,CAACtQ,CAAD,CAApB;EACA8J,IAAAA,GAAG,CAAC7F,GAAJ,GAAU3B,WAAS,CAACwH,GAAG,CAAC7F,GAAL,CAAnB;EACA,WAAO6F,GAAP;EACD,GAnH4B;;;EAqH7B,MAAInG,KAAK,CAAC3D,CAAD,CAAL,KAAa,GAAjB,EAAsB;EACpB8J,IAAAA,GAAG,CAAC3F,MAAJ,GAAamM,UAAU,CAACtQ,CAAD,CAAvB;EACA,WAAO8J,GAAP;EACD;;EACD,MAAI9J,CAAC,KAAK,GAAV,EAAe;EACb8J,IAAAA,GAAG,CAACpG,QAAJ,GAAe,IAAf;EACA,WAAOoG,GAAP;EACD,GA5H4B;;;EA8H7B,MAAI9J,CAAC,KAAK,GAAV,EAAe;EACb8J,IAAAA,GAAG,CAACpG,QAAJ,GAAe,IAAf;EACAoG,IAAAA,GAAG,CAAC6F,MAAJ,GAAa,IAAb;EACA7F,IAAAA,GAAG,CAAC0E,QAAJ,GAAe,IAAf;EACA,WAAO1E,GAAP;EACD;;EACD,MAAI9J,CAAJ,EAAO;;EAELA,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACArB,IAAAA,CAAC,GAAGA,CAAC,CAACqB,OAAF,CAAU,KAAV,EAAiB,GAAjB,CAAJ;EACAyI,IAAAA,GAAG,CAAC1H,IAAJ,GAAWpC,CAAC,CAACkB,WAAF,EAAX;EACD;;EACD,SAAO4I,GAAP;EACD,CA3ID;;EA4IA,gBAAc,GAAG2G,UAAjB;;ECxLA,IAAMI,OAAO,GAAG,SAAVA,OAAU,CAASC,OAAT,EAAkB;EAChC,SAAO,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,OAAOA,OAAP,KAAmB,QAAzD;EACD,CAFD;;EAIA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAASC,MAAT,EAAiB;EAClC,MAAIC,OAAO,GAAG,KAAd;EACA,MAAIzN,KAAK,GAAG,CAAC,CAAb;EACA,MAAI0N,OAAJ,CAHkC;;EAMlC,OAAK,IAAI9S,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4S,MAAM,CAACxS,MAA3B,EAAmCJ,CAAC,EAApC,EAAwC;EACtC,QAAMmB,CAAC,GAAGyR,MAAM,CAAC5S,CAAD,CAAhB,CADsC;;EAItC,QAAImB,CAAC,CAACmR,SAAF,KAAgB,QAAhB,IAA4BnR,CAAC,CAACiQ,KAAF,KAAY,IAA5C,EAAkD;EAChDhM,MAAAA,KAAK,IAAI,CAAT;EACAjE,MAAAA,CAAC,CAACiQ,KAAF,GAAUhM,KAAV;EACA;EACD,KARqC;;;EAWtC,QAAIjE,CAAC,CAACmR,SAAF,KAAgB,OAApB,EAA6B;EAC3BO,MAAAA,OAAO,GAAG,IAAV;;EACA,UAAIJ,OAAO,CAACtR,CAAC,CAACiQ,KAAH,CAAX,EAAsB;EACpB0B,QAAAA,OAAO,GAAG3R,CAAC,CAACiQ,KAAZ;EACD,OAFD,MAEO;EACLhM,QAAAA,KAAK,IAAI,CAAT;EACA0N,QAAAA,OAAO,GAAG1N,KAAV;EACD;EACF,KAnBqC;;;EAsBtC,QAAIyN,OAAJ,EAAa;EACX1R,MAAAA,CAAC,CAACiQ,KAAF,GAAU0B,OAAV;EACD,KAxBqC;;;EA2BtC,QAAI3R,CAAC,CAACmR,SAAF,KAAgB,KAApB,EAA2B;EACzBO,MAAAA,OAAO,GAAG,KAAV;EACD;EACF;;EACD,SAAOD,MAAP;EACD,CAtCD;;EAwCA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAASH,MAAT,EAAiB;EAChC,SAAOA,MAAM,CAACnG,GAAP,CAAW,UAAAuG,KAAK,EAAI;EACzB,QAAIA,KAAK,CAAC9M,OAAN,KAAkBT,SAAtB,EAAiC;;EAE/B,UAAIwN,UAAU,GAAGD,KAAK,CAAC9M,OAAN,CAAcE,KAAd,CAAoB,UAAA5F,CAAC;EAAA,eAAIA,CAAC,CAAC4P,QAAF,KAAe,IAAf,IAAuB5P,CAAC,CAAC+F,QAAF,KAAe,IAAtC,IAA8C/F,CAAC,CAACwD,IAAF,KAAWyB,SAA7D;EAAA,OAArB,CAAjB;;EACA,UAAIwN,UAAU,KAAK,IAAnB,EAAyB;EACvB,YAAIhN,KAAK,GAAG,EAAZ;EACA+M,QAAAA,KAAK,CAAC9M,OAAN,CAAc/D,OAAd,CAAsB,UAAA3B,CAAC;EAAA,iBAAKyF,KAAK,CAACzF,CAAC,CAACwD,IAAH,CAAL,GAAgB,IAArB;EAAA,SAAvB;EACAgP,QAAAA,KAAK,CAAC/M,KAAN,GAAcA,KAAd;EACA,eAAO+M,KAAK,CAAC9M,OAAb;EACD;EACF;;EACD,WAAO8M,KAAP;EACD,GAZM,CAAP;EAaD,CAdD;;EAgBA,IAAMrB,aAAW,GAAG,SAAdA,WAAc,CAASiB,MAAT,EAAiB;;;EAGnC,MAAIrC,KAAK,GAAGqC,MAAM,CAAChG,MAAP,CAAc,UAAAnL,CAAC;EAAA,WAAIA,CAAC,CAAC6Q,SAAN;EAAA,GAAf,EAAgClS,MAA5C;;EACA,MAAImQ,KAAK,GAAG,CAAZ,EAAe;EACbqC,IAAAA,MAAM,GAAGD,UAAU,CAACC,MAAD,CAAnB;EACD,GANkC;;;EAQnCA,EAAAA,MAAM,GAAGG,QAAQ,CAACH,MAAD,CAAjB,CARmC;;EAWnC,SAAOA,MAAP;EACD,CAZD;;EAaA,iBAAc,GAAGjB,aAAjB;;ECtEA,IAAMuB,SAAO,GAAG,SAAVA,OAAU,CAAS7I,GAAT,EAAc;EAC5B,SAAOpI,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BF,GAA/B,MAAwC,gBAA/C;EACD,CAFD;;;EAKA,IAAM8I,aAAa,GAAG,SAAhBA,aAAgB,CAASrT,GAAT,EAAc;EAClC,MAAIuK,GAAG,GAAGvK,GAAG,CAACF,KAAJ,CAAU,0CAAV,CAAV;EACAyK,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAjL,CAAC;EAAA,WAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,GAAT,CAAN;EACA,SAAOsH,GAAP;EACD,CAJD;;EAMA,IAAM+I,OAAO,GAAG,SAAVA,OAAU,CAAS/I,GAAT,EAAc;EAC5B,MAAIgJ,KAAK,GAAG,EAAZ;EACAhJ,EAAAA,GAAG,CAAClI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;;EAEf,QAAI,aAAaqC,IAAb,CAAkBrC,CAAC,CAAC,CAAD,CAAnB,CAAJ,EAA6B;EAC3B+S,MAAAA,KAAK,CAAChH,IAAN,CAAW/L,CAAX;EACA;EACD;;EACD,QAAI4N,IAAI,GAAG5N,CAAC,CAACV,KAAF,CAAQ,GAAR,CAAX;EACAsO,IAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAAhL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAb,CAAP;EACAyR,IAAAA,KAAK,GAAGA,KAAK,CAAC5E,MAAN,CAAaP,IAAb,CAAR;EACD,GATD;EAUA,SAAOmF,KAAP;EACD,CAbD;;;EAgBA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAASjJ,GAAT,EAAc;EAC5B,SAAO,CACL;EACEnE,IAAAA,OAAO,EAAEmE,GAAG,CAACoC,GAAJ,CAAQ,UAAAjL,CAAC,EAAI;EACpB,aAAO;EACLwC,QAAAA,IAAI,EAAExC;EADD,OAAP;EAGD,KAJQ;EADX,GADK,CAAP;EASD,CAVD;;EAYA,IAAM+R,OAAO,GAAG,SAAVA,OAAU,CAASlF,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAD,IAAQ,CAACA,GAAG,CAACH,IAAb,IAAqB,CAACG,GAAG,CAACH,IAAJ,CAAS,CAAT,CAA1B,EAAuC;EACrC,WAAO,EAAP;EACD;;EACD,MAAIsF,GAAG,GAAG,EAAV;EACAnF,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB+R,MAAAA,GAAG,CAACnH,IAAJ,CAAS;EAAEhH,QAAAA,EAAE,EAAE5D,CAAC,CAAC4D;EAAR,OAAT;EACD,KAFD;EAGD,GAJD;EAKA,SAAO,CAAC;EAAEa,IAAAA,OAAO,EAAEsN,GAAX;EAAgBjC,IAAAA,MAAM,EAAE;EAAxB,GAAD,CAAP;EACD,CAXD;EAaA;;;EACA,IAAMkC,MAAM,GAAG,SAATA,MAAS,CAASC,KAAT,EAAgB;;EAE7B,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKjO,SAA5B,IAAyCiO,KAAK,KAAK,EAAvD,EAA2D;EACzD,WAAO,EAAP;EACD,GAJ4B;;;EAM7B,MAAI,QAAOA,KAAP,MAAiB,QAArB,EAA+B;EAC7B,QAAIR,SAAO,CAACQ,KAAD,CAAX,EAAoB;EAClB,UAAIA,KAAK,CAACtT,MAAN,KAAiB,CAAjB,IAAsB,CAACsT,KAAK,CAAC,CAAD,CAAhC,EAAqC;EACnC,eAAO,EAAP;EACD,OAHiB;;;EAMlB,UAAI,QAAOA,KAAK,CAAC,CAAD,CAAZ,MAAoB,QAAxB,EAAkC;EAChC,eAAOA,KAAP;EACD,OARiB;;;EAUlB,UAAI,OAAOA,KAAK,CAAC,CAAD,CAAZ,KAAoB,QAAxB,EAAkC;EAChC,eAAOJ,OAAO,CAACI,KAAD,CAAd;EACD;EACF,KAd4B;;;EAgB7B,QAAIA,KAAK,IAAIA,KAAK,CAACxK,GAAN,KAAc,KAA3B,EAAkC;EAChC,aAAOqK,OAAO,CAACG,KAAD,CAAd;EACD;;EACD,WAAO,EAAP;EACD;;EACD,MAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7BA,IAAAA,KAAK,GAAGjI,MAAM,CAACiI,KAAD,CAAd,CAD6B;EAE9B;;EACD,MAAId,MAAM,GAAGO,aAAa,CAACO,KAAD,CAA1B;EACAd,EAAAA,MAAM,GAAGQ,OAAO,CAACR,MAAD,CAAhB;EACAA,EAAAA,MAAM,GAAGA,MAAM,CAACnG,GAAP,CAAW4F,YAAX,CAAT,CAhC6B;;EAkC7BO,EAAAA,MAAM,GAAGjB,aAAW,CAACiB,MAAD,CAApB,CAlC6B;;EAoC7B,SAAOA,MAAP;EACD,CArCD;;EAuCA,YAAc,GAAGa,MAAjB;;EC1FA;;EACA,IAAME,QAAQ,GAAG,SAAXA,QAAW,CAAStS,CAAT,EAAYyO,IAAZ,EAAoC;EAAA,MAAlB8D,QAAkB,uEAAP,KAAO;;;EAEnD,MAAI,OAAO9D,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,IAAAA,IAAI,GAAG2D,QAAM,CAAC3D,IAAD,CAAb;EACD,GAJkD;;;EAMnD,MAAIK,WAAQ,CAAC9O,CAAD,EAAIyO,IAAJ,CAAR,KAAsB,IAA1B,EAAgC;EAC9B,WAAO,EAAP;EACD,GARkD;;;EAWnD,MAAM+D,SAAS,GAAG/D,IAAI,CAAClD,MAAL,CAAY,UAAArL,CAAC;EAAA,WAAIA,CAAC,CAAC6O,QAAF,KAAe,IAAnB;EAAA,GAAb,EAAsChQ,MAAxD;EACA,MAAI6L,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,MAAI2F,OAAO,GAAG,EAAd,CAbmD;;EAgBnD,MAAI9B,IAAI,CAAC,CAAD,CAAJ,CAAQvK,KAAR,KAAkB,IAAtB,EAA4B;EAAA,oBACJuO,WAAQ,CAAC7H,KAAD,EAAQ6D,IAAR,EAAc,CAAd,EAAiB7D,KAAK,CAAC7L,MAAvB,CADJ;EAAA;EAAA,QACrBmN,KADqB;EAAA,QACdwG,MADc;;EAE1B,QAAIxG,KAAK,KAAK,KAAV,IAAmBA,KAAK,CAACnN,MAAN,GAAe,CAAtC,EAAyC;EACvCmN,MAAAA,KAAK,GAAGA,KAAK,CAACX,MAAN,CAAa,UAAA1L,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACA0Q,MAAAA,OAAO,CAACvF,IAAR,CAAa;EAAEkB,QAAAA,KAAK,EAALA,KAAF;EAASwG,QAAAA,MAAM,EAANA;EAAT,OAAb;EACD;;EAED,WAAOpC,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD,GAxBkD;;;EA0BnD,OAAK,IAAI5R,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;;EAExC,QAAIA,CAAC,GAAG6T,SAAJ,GAAgB5H,KAAK,CAAC7L,MAA1B,EAAkC;EAChC;EACD,KAJuC;;;EAAA,qBAMlB0T,WAAQ,CAAC7H,KAAK,CAAC0D,KAAN,CAAY3P,CAAZ,CAAD,EAAiB8P,IAAjB,EAAuB9P,CAAvB,EAA0BiM,KAAK,CAAC7L,MAAhC,CANU;EAAA;EAAA,QAMnCmN,MANmC;EAAA,QAM5BwG,OAN4B;;EAOxC,QAAIxG,MAAK,KAAK,KAAV,IAAmBA,MAAK,CAACnN,MAAN,GAAe,CAAtC,EAAyC;;EAEvCJ,MAAAA,CAAC,IAAIuN,MAAK,CAACnN,MAAN,GAAe,CAApB,CAFuC;;EAIvCmN,MAAAA,MAAK,GAAGA,MAAK,CAACX,MAAN,CAAa,UAAA1L,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACA0Q,MAAAA,OAAO,CAACvF,IAAR,CAAa;EAAEkB,QAAAA,KAAK,EAALA,MAAF;EAASwG,QAAAA,MAAM,EAANA;EAAT,OAAb,EALuC;;EAQvC,UAAIH,QAAQ,KAAK,IAAjB,EAAuB;EACrB,eAAOjC,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD;EACF;EACF;;EACD,SAAOD,cAAW,CAAC1F,KAAD,EAAQ6D,IAAR,EAAc8B,OAAd,CAAlB;EACD,CA/CD;;EAgDA,eAAc,GAAG+B,QAAjB;;ECpDA;;;;EAGA,IAAMK,QAAQ,GAAG,SAAXA,QAAW,CAAS3S,CAAT,EAAYyO,IAAZ,EAAkB;EACjC,MAAInM,KAAK,GAAG,EAAZ;EACA,MAAI0G,GAAG,GAAGsJ,WAAQ,CAACtS,CAAD,EAAIyO,IAAJ,CAAlB;EACAzF,EAAAA,GAAG,CAAClI,OAAJ,CAAY,gBAAmB;EAAA,QAAT8R,EAAS,QAAhB1G,KAAgB;EAC7B0G,IAAAA,EAAE,CAAC9R,OAAH,CAAW,UAAAV,CAAC,EAAI;EACdkC,MAAAA,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,GAAc,IAAd;EACD,KAFD;EAGD,GAJD,EAHiC;;EASjC,MAAI4G,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,MAAI3F,MAAM,GAAG,EAAb;EACA,MAAIwM,OAAO,GAAG,EAAd;EACA7G,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIkC,KAAK,CAAClC,CAAC,CAAC4D,EAAH,CAAL,KAAgB,IAApB,EAA0B;EACxB,UAAIyN,OAAO,CAAC1S,MAAR,GAAiB,CAArB,EAAwB;EACtBkG,QAAAA,MAAM,CAAC+F,IAAP,CAAYyG,OAAZ;EACAA,QAAAA,OAAO,GAAG,EAAV;EACD;;EACD;EACD;;EACDA,IAAAA,OAAO,CAACzG,IAAR,CAAa5K,CAAb;EACD,GATD;;EAUA,MAAIqR,OAAO,CAAC1S,MAAR,GAAiB,CAArB,EAAwB;EACtBkG,IAAAA,MAAM,CAAC+F,IAAP,CAAYyG,OAAZ;EACD;;EACD,SAAOxM,MAAP;EACD,CA1BD;;EA2BA,OAAc,GAAG0N,QAAjB;;EC7BA;;EACA,WAAa,GAAG,gBAAA,CAASlE,IAAT,EAAgC;EAAA;;EAAA,MAAjBoE,OAAiB,uEAAP,KAAO;EAC9C,MAAItC,OAAO,GAAG+B,WAAQ,CAAC,IAAD,EAAO7D,IAAP,EAAaoE,OAAb,CAAtB,CAD8C;;EAG9CtC,EAAAA,OAAO,GAAGA,OAAO,CAACnF,GAAR,CAAY,gBAAuB;EAAA,QAApBc,KAAoB,QAApBA,KAAoB;EAAA,QAAbwG,MAAa,QAAbA,MAAa;;EAC3C,QAAI1S,CAAC,GAAG,KAAI,CAACkL,SAAL,CAAegB,KAAK,CAAC,CAAD,CAAL,CAASlI,EAAxB,EAA4BkI,KAAK,CAACnN,MAAlC,EAA0C2T,MAA1C,CAAR;;EACA1S,IAAAA,CAAC,CAAC2K,KAAF,CAAQC,KAAR,GAAgBsB,KAAhB;EACA,WAAOlM,CAAP;EACD,GAJS,CAAV;EAKA,SAAOuQ,OAAP;EACD,CATD;EAWA;;;EACA,OAAW,GAAG,YAAA,CAAS9B,IAAT,EAAe;EAC3B,MAAI8B,OAAO,GAAG+B,WAAQ,CAAC,IAAD,EAAO7D,IAAP,EAAa,IAAb,CAAtB;EACA,SAAO8B,OAAO,CAACxR,MAAR,GAAiB,CAAxB;EACD,CAHD;EAKA;;;EACA,SAAW,GAAG,cAAA,CAAS0P,IAAT,EAAe;EAAA;;EAC3B,MAAI8B,OAAO,GAAGoC,GAAQ,CAAC,IAAD,EAAOlE,IAAP,CAAtB,CAD2B;;EAG3B8B,EAAAA,OAAO,GAAGA,OAAO,CAACnF,GAAR,CAAY,UAAAyB,IAAI,EAAI;EAC5B,WAAO,MAAI,CAAC3B,SAAL,CAAe2B,IAAI,CAAC,CAAD,CAAJ,CAAQ7I,EAAvB,EAA2B6I,IAAI,CAAC9N,MAAhC,CAAP;EACD,GAFS,CAAV;EAGA,SAAOwR,OAAP;EACD,CAPD;EASA;;;EACA,WAAa,GAAG,cAAA,CAAS/L,GAAT,EAAcY,KAAd,EAAqB;EAAA;;EACnC,MAAI0N,OAAO,GAAG,EAAd;EACA,MAAIlI,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,MAAImI,QAAQ,GAAG,KAAf;;EACA,OAAK,IAAIpU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIqU,GAAG,GAAGpI,KAAK,CAACjM,CAAD,CAAL,CAASqL,KAAT,CAAexF,GAAf,EAAoBY,KAApB,CAAV;;EACA,QAAI4N,GAAG,KAAK,IAAZ,EAAkB;EAChB,UAAID,QAAQ,KAAK,IAAjB,EAAuB;;EAErBD,QAAAA,OAAO,CAACA,OAAO,CAAC/T,MAAR,GAAiB,CAAlB,CAAP,CAA4BiM,IAA5B,CAAiCJ,KAAK,CAACjM,CAAD,CAAtC;EACD,OAHD,MAGO;EACLmU,QAAAA,OAAO,CAAC9H,IAAR,CAAa,CAACJ,KAAK,CAACjM,CAAD,CAAN,CAAb,EADK;EAEN;;EACDoU,MAAAA,QAAQ,GAAGC,GAAX;EACD;EACF,GAfkC;;;EAiBnCF,EAAAA,OAAO,GAAGA,OAAO,CACdvH,MADO,CACA,UAAAtM,CAAC;EAAA,WAAIA,CAAC,CAACF,MAAF,GAAW,CAAf;EAAA,GADD,EAEPqM,GAFO,CAEH,UAAApC,GAAG,EAAI;EACV,WAAO,MAAI,CAACkC,SAAL,CAAelC,GAAG,CAAC,CAAD,CAAH,CAAOhF,EAAtB,EAA0BgF,GAAG,CAACjK,MAA9B,CAAP;EACD,GAJO,CAAV;EAKA,SAAO+T,OAAP;GAtBF;;;;;;;;;MC5BMG,SACJ,gBAAYjP,EAAZ,EAAgBjF,MAAhB,EAAwB8L,IAAxB,EAA8B;EAAA;;EAC5B,OAAK3G,KAAL,GAAaF,EAAb;EACA,OAAKjF,MAAL,GAAcA,MAAd;EACA,OAAK8I,GAAL,GAAW,QAAX,CAH4B;;EAI5BjH,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,IAAAA,UAAU,EAAE,KADsB;EAElCC,IAAAA,QAAQ,EAAE,IAFwB;EAGlCC,IAAAA,KAAK,EAAExI;EAH2B,GAApC;EAKAjK,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,IAAAA,UAAU,EAAE,KADuB;EAEnCC,IAAAA,QAAQ,EAAE,IAFyB;EAGnCC,IAAAA,KAAK,EAAE;EAH4B,GAArC;EAKAzS,EAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCC,IAAAA,UAAU,EAAE,KADwB;EAEpCC,IAAAA,QAAQ,EAAE,IAF0B;EAGpCC,IAAAA,KAAK,EAAE;EAH6B,GAAtC;EAKD;EAGH;;;EACAJ,MAAM,CAAChK,SAAP,CAAiBiC,SAAjB,GAA6B,UAASlH,EAAT,EAAajF,MAAb,EAAqB2T,MAArB,EAA6B;EACxD,MAAI1S,CAAC,GAAG,IAAIiT,MAAJ,CAAWjP,EAAX,EAAejF,MAAf,EAAuB,KAAK8L,IAA5B,CAAR,CADwD;;EAGxD,MAAI6H,MAAM,IAAI9R,MAAM,CAACC,IAAP,CAAY6R,MAAZ,EAAoB3T,MAApB,GAA6B,CAA3C,EAA8C;EAC5CiB,IAAAA,CAAC,CAAC0S,MAAF,GAAWA,MAAX;EACD,GAFD,MAEO;EACL1S,IAAAA,CAAC,CAAC0S,MAAF,GAAW,KAAKA,MAAhB;EACD;;EACD,SAAO1S,CAAP;EACD,CATD;;;EAYAY,MAAM,CAACqH,MAAP,CAAcgL,MAAM,CAAChK,SAArB,EAAgCqK,KAAhC;EACA1S,MAAM,CAACqH,MAAP,CAAcgL,MAAM,CAAChK,SAArB,EAAgCwB,SAAhC;;EAGA,IAAM8I,OAAO,GAAG;EACd9L,EAAAA,IAAI,EAAE;EADQ,CAAhB;EAGA7G,MAAM,CAACC,IAAP,CAAY0S,OAAZ,EAAqBzS,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAKsT,MAAM,CAAChK,SAAP,CAAiBtJ,CAAjB,IAAsBsT,MAAM,CAAChK,SAAP,CAAiBsK,OAAO,CAAC5T,CAAD,CAAxB,CAA3B;EAAA,CAA9B;EAEA,YAAc,GAAGsT,MAAjB;;ECjDA;MACMO;;;EACJ,kBAAwB;EAAA,QAAZxB,KAAY,uEAAJ,EAAI;;EAAA;;;EAEtBpR,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAErB;EAF4B,KAArC;EAID;;;;;;0BAEGvK,MAAM;EACR,WAAKuK,KAAL,CAAWvK,IAAI,CAACzD,EAAhB,IAAsByD,IAAtB;EACA,aAAO,IAAP;EACD;;;;;0BAEGzD,IAAI;EACN,aAAO,KAAKgO,KAAL,CAAWhO,EAAX,CAAP;EACD;;;;;6BAEMA,IAAI;EACT,aAAO,KAAKgO,KAAL,CAAWhO,EAAX,CAAP;EACD;;;4BACK6G,MAAM;EACVjK,MAAAA,MAAM,CAACqH,MAAP,CAAc,KAAK+J,KAAnB,EAA0BnH,IAAI,CAACmH,KAA/B;EACA,aAAO,IAAP;EACD;;;;;8BAEO;EACN,aAAO;EACLA,QAAAA,KAAK,EAAEpR,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,EAAwBjT;EAD1B,OAAP;EAGD;;;;;EAGH;;;EACAyU,IAAI,CAACvK,SAAL,CAAeuB,KAAf,GAAuB,YAAW;EAAA;;EAChC,MAAI3J,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,CAAX;EACA,MAAIA,KAAK,GAAGnR,IAAI,CAAC6B,MAAL,CAAY,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAChC,QAAIS,CAAC,GAAG,KAAI,CAAC4R,KAAL,CAAWrS,CAAX,EAAc6K,KAAd,EAAR;;EACAhL,IAAAA,CAAC,CAACY,CAAC,CAAC4D,EAAH,CAAD,GAAU5D,CAAV;EACA,WAAOZ,CAAP;EACD,GAJW,EAIT,EAJS,CAAZ;EAKA,SAAO,IAAIgU,IAAJ,CAASxB,KAAT,CAAP;EACD,CARD;;EAUA,UAAc,GAAGwB,IAAjB;;EC7CA;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAA7I,KAAK,EAAI;EACzBA,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAC2G,IAAD,EAAO9I,CAAP,EAAa;EACzB,QAAIA,CAAC,GAAG,CAAR,EAAW;EACT8I,MAAAA,IAAI,CAAC6C,IAAL,GAAYM,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;;EACD,QAAI4G,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChB8I,MAAAA,IAAI,CAAC8C,IAAL,GAAYK,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAaqF,EAAzB;EACD;EACF,GAPD;EAQD,CATD;;EAUA,cAAc,GAAGyP,SAAjB;;ECXA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA,IAAMC,SAAS,GAAG,uDAAlB;EACA,IAAMC,YAAY,GAAG,IAArB;EAEA,IAAMtS,WAAS,GAAG,kBAAlB;EACA,IAAMuS,UAAU,GAAG,sBAAnB;EACA,IAAMC,OAAO,GAAG,iBAAhB;;EACA,IAAMC,SAAS,GAAG,sHAAlB;EAEA,IAAMC,eAAe,GAAG,MAAxB;;EAGA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAStV,IAAT,EAAe;EAClC,MAAIiQ,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAIsF,KAAK,GAAGvV,IAAI,CAACH,KAAL,CAAWsV,OAAX,CAAZ;;EACA,OAAK,IAAIlV,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGsV,KAAK,CAAClV,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAIqK,GAAG,GAAGiL,KAAK,CAACtV,CAAD,CAAL,CAASJ,KAAT,CAAemV,SAAf,CAAV;;EACA,SAAK,IAAI3T,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiJ,GAAG,CAACjK,MAAxB,EAAgCgB,CAAC,EAAjC,EAAqC;EACnC4O,MAAAA,GAAG,CAAC3D,IAAJ,CAAShC,GAAG,CAACjJ,CAAD,CAAZ;EACD;EACF;;EACD,SAAO4O,GAAP;EACD,CAZD;EAcA;;;EACA,IAAMuF,UAAU,GAAG,SAAbA,UAAa,CAASzV,GAAT,EAAc0V,OAAd,EAAuB;;EAExC,MAAI9S,WAAS,CAACC,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,WAAO,KAAP;EACD,GAJuC;;;EAMxC,MAAImV,UAAU,CAACtS,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjC,WAAO,KAAP;EACD,GARuC;;;EAUxC,MAAIqV,SAAS,CAACxS,IAAV,CAAe7C,GAAf,MAAwB,KAA5B,EAAmC;EACjC,WAAO,KAAP;EACD;;EAED,MAAIoN,GAAG,GAAGpN,GAAG,CAACmD,OAAJ,CAAY,yCAAZ,EAAuD,EAAvD,CAAV;EACA,MAAIoQ,KAAK,GAAGnG,GAAG,CAACtN,KAAJ,CAAU,GAAV,CAAZ;EACA,MAAI6V,QAAQ,GAAGpC,KAAK,CAACA,KAAK,CAACjT,MAAN,GAAe,CAAhB,CAAL,CAAwB0C,WAAxB,EAAf,CAhBwC;;EAkBxC,MAAI0S,OAAO,CAAC9P,cAAR,CAAuB+P,QAAvB,CAAJ,EAAsC;EACpC,WAAO,KAAP;EACD,GApBuC;;;;;;EAyBxC,SAAO,IAAP;EACD,CA1BD;;EA4BA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAAS3V,IAAT,EAAe0G,KAAf,EAAsB;EAC3C,MAAI+O,OAAO,GAAG/O,KAAK,CAACuF,KAAN,CAAYxD,aAA1B;EAEAzI,EAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACAA,EAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACA,MAAI4V,SAAS,GAAG,EAAhB,CAL2C;;EAO3C,MAAIC,MAAM,GAAG,EAAb,CAP2C;;EAS3C,MAAI,CAAC7V,IAAD,IAAS,OAAOA,IAAP,KAAgB,QAAzB,IAAqCiV,YAAY,CAACrS,IAAb,CAAkB5C,IAAlB,MAA4B,KAArE,EAA4E;EAC1E,WAAO4V,SAAP;EACD,GAX0C;;;EAa3C,MAAIE,MAAM,GAAGR,YAAY,CAACtV,IAAD,CAAzB,CAb2C;;EAe3C,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6V,MAAM,CAACzV,MAA3B,EAAmCJ,CAAC,EAApC,EAAwC;EACtC,QAAIwB,CAAC,GAAGqU,MAAM,CAAC7V,CAAD,CAAd;;EACA,QAAIwB,CAAC,KAAKiE,SAAN,IAAmBjE,CAAC,KAAK,EAA7B,EAAiC;EAC/B;EACD,KAJqC;;;EAMtC,QAAIwT,YAAY,CAACrS,IAAb,CAAkBnB,CAAlB,MAAyB,KAA7B,EAAoC;;EAElC,UAAIoU,MAAM,CAACA,MAAM,CAACxV,MAAP,GAAgB,CAAjB,CAAV,EAA+B;EAC7BwV,QAAAA,MAAM,CAACA,MAAM,CAACxV,MAAP,GAAgB,CAAjB,CAAN,IAA6BoB,CAA7B;EACA;EACD,OAHD,MAGO,IAAIqU,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAAV,EAAmB;;EAExB6V,QAAAA,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAAN,GAAgBwB,CAAC,GAAGqU,MAAM,CAAC7V,CAAC,GAAG,CAAL,CAA1B;EACA;EACD;EACF,KAhBqC;;;EAkBtC4V,IAAAA,MAAM,CAACvJ,IAAP,CAAY7K,CAAZ;EACD,GAlC0C;;;;EAsC3C,OAAK,IAAIxB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG4V,MAAM,CAACxV,MAA3B,EAAmCJ,EAAC,EAApC,EAAwC;EACtC,QAAIQ,CAAC,GAAGoV,MAAM,CAAC5V,EAAD,CAAd,CADsC;;EAGtC,QAAI4V,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,IAAiBuV,UAAU,CAAC/U,CAAD,EAAIgV,OAAJ,CAAV,KAA2B,KAAhD,EAAuD;EACrDI,MAAAA,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,GAAgBQ,CAAC,IAAIoV,MAAM,CAAC5V,EAAC,GAAG,CAAL,CAAN,IAAiB,EAArB,CAAjB;EACD,KAFD,MAEO,IAAIQ,CAAC,IAAIA,CAAC,CAACJ,MAAF,GAAW,CAApB,EAAuB;;;EAG5BuV,MAAAA,SAAS,CAACtJ,IAAV,CAAe7L,CAAf;EACAoV,MAAAA,MAAM,CAAC5V,EAAD,CAAN,GAAY,EAAZ;EACD;EACF,GAjD0C;;;EAmD3C,MAAI2V,SAAS,CAACvV,MAAV,KAAqB,CAAzB,EAA4B;EAC1B,WAAO,CAACL,IAAD,CAAP;EACD,GArD0C;;;;EAyD3C,OAAK,IAAIC,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG2V,SAAS,CAACvV,MAA9B,EAAsCJ,GAAC,IAAI,CAA3C,EAA8C;EAC5C,QAAI8V,EAAE,GAAGH,SAAS,CAAC3V,GAAD,CAAT,CAAauN,KAAb,CAAmB6H,eAAnB,CAAT;;EACA,QAAIU,EAAE,KAAK,IAAX,EAAiB;EACfH,MAAAA,SAAS,CAAC3V,GAAC,GAAG,CAAL,CAAT,IAAoB8V,EAAE,CAAC,CAAD,CAAtB;EACAH,MAAAA,SAAS,CAAC3V,GAAD,CAAT,GAAe2V,SAAS,CAAC3V,GAAD,CAAT,CAAaiD,OAAb,CAAqBmS,eAArB,EAAsC,EAAtC,CAAf;EACD;EACF;;EACD,SAAOO,SAAP;EACD,CAjED;;EAmEA,gBAAc,GAAGD,cAAjB;;ECrIA,IAAMK,QAAQ,GAAG,IAAjB;EACA,IAAMC,UAAU,GAAG,UAAnB;EACA,IAAMC,WAAW,GAAG,OAApB;EACA,IAAMC,OAAO,GAAG,QAAhB;EAEA,IAAMC,OAAO,GAAG;EACd,OAAK,IADS;EAEd,OAAK,IAFS;;EAGd,OAAK,IAHS;;EAId,OAAK,IAJS;;EAKd,QAAM,IALQ;EAMd,SAAO,IANO;;EAAA,CAAhB;;EAUA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAStW,GAAT,EAAc;;EAE9B,MAAI,sBAAsB6C,IAAtB,CAA2B7C,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,WAAO,KAAP;EACD,GAJ6B;;;EAM9B,MAAIqF,GAAG,GAAG,6DAAV;;EACA,MAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,WAAO,IAAP;EACD,GAT6B;;;;;;;EAe9B,SAAO,KAAP;EACD,CAhBD;;;EAmBA,IAAMuW,cAAc,GAAG,SAAjBA,cAAiB,CAAShM,GAAT,EAAc;EACnC,OAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAJ,GAAa,CAAjC,EAAoCJ,CAAC,EAArC,EAAyC;EACvC,QAAIkW,OAAO,CAACvT,IAAR,CAAa0H,GAAG,CAACrK,CAAD,CAAhB,CAAJ,EAA0B;EACxBqK,MAAAA,GAAG,CAACrK,CAAC,GAAG,CAAL,CAAH,IAAcqK,GAAG,CAACrK,CAAD,CAAH,GAASqK,GAAG,CAACrK,CAAC,GAAG,CAAL,CAA1B;EACAqK,MAAAA,GAAG,CAACrK,CAAD,CAAH,GAAS,IAAT;EACAqK,MAAAA,GAAG,CAACrK,CAAC,GAAG,CAAL,CAAH,GAAa,IAAb;EACD;EACF;;EACD,SAAOqK,GAAP;EACD,CATD;;EAWA,IAAMiM,YAAY,GAAG,SAAfA,YAAe,CAAStS,IAAT,EAAe;EAClC,MAAIqG,GAAG,GAAG,EAAV,CADkC;;EAGlC,MAAMkM,OAAO,GAAGvS,IAAI,CAACpE,KAAL,CAAW,OAAX,CAAhB;EACA,MAAI4W,SAAS,GAAG,GAAhB;EACA,MAAI7S,KAAK,GAAGK,IAAI,CAACuJ,KAAL,CAAW,OAAX,CAAZ;;EACA,MAAI5J,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAlB,EAAuB;EACrB6S,IAAAA,SAAS,GAAG7S,KAAZ;EACD;;EACD,OAAK,IAAIvC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmV,OAAO,CAACnW,MAA5B,EAAoCgB,CAAC,EAArC,EAAyC;EACvC,QAAIA,CAAC,KAAKmV,OAAO,CAACnW,MAAR,GAAiB,CAA3B,EAA8B;EAC5BiK,MAAAA,GAAG,CAACgC,IAAJ,CAASkK,OAAO,CAACnV,CAAD,CAAhB;EACD,KAFD,MAEO;EACLiJ,MAAAA,GAAG,CAACgC,IAAJ,CAASkK,OAAO,CAACnV,CAAD,CAAP,GAAaoV,SAAtB;EACD;EACF;;EACD,SAAOnM,GAAP;EACD,CAjBD;;;EAoBA,IAAMoM,UAAU,GAAG,SAAbA,UAAa,CAAS3W,GAAT,EAAc;EAC/B,MAAIwG,MAAM,GAAG,EAAb;EACA,MAAI+D,GAAG,GAAG,EAAV,CAF+B;;EAI/BvK,EAAAA,GAAG,GAAGA,GAAG,IAAI,EAAb;;EACA,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,IAAAA,GAAG,GAAG2L,MAAM,CAAC3L,GAAD,CAAZ;EACD;;EAED,MAAMuT,KAAK,GAAGvT,GAAG,CAACF,KAAJ,CAAUqW,WAAV,CAAd;;EACA,OAAK,IAAIjW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;;EAErC,QAAIoW,SAAS,CAAC/C,KAAK,CAACrT,CAAD,CAAN,CAAT,KAAwB,IAA5B,EAAkC;EAChCqK,MAAAA,GAAG,GAAGA,GAAG,CAACoE,MAAJ,CAAW6H,YAAY,CAACjD,KAAK,CAACrT,CAAD,CAAN,CAAvB,CAAN;EACA;EACD;;EACDqK,IAAAA,GAAG,CAACgC,IAAJ,CAASgH,KAAK,CAACrT,CAAD,CAAd;EACD,GAjB8B;;;EAmB/B,MAAI0W,KAAK,GAAG,EAAZ;;EACA,OAAK,IAAI1W,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,EAAC,EAAjC,EAAqC;EACnC,QAAIgE,IAAI,GAAGqG,GAAG,CAACrK,EAAD,CAAd,CADmC;;EAGnC,QAAI+V,QAAQ,CAACpT,IAAT,CAAcqB,IAAd,MAAwB,IAAxB,IAAgCmS,OAAO,CAACzQ,cAAR,CAAuB1B,IAAvB,MAAiC,KAAjE,IAA0EgS,UAAU,CAACrT,IAAX,CAAgBqB,IAAhB,MAA0B,KAAxG,EAA+G;;EAE7G,UAAIsC,MAAM,CAAClG,MAAP,GAAgB,CAApB,EAAuB;EACrBkG,QAAAA,MAAM,CAACA,MAAM,CAAClG,MAAP,GAAgB,CAAjB,CAAN,IAA6BsW,KAA7B;EACApQ,QAAAA,MAAM,CAAC+F,IAAP,CAAYrI,IAAZ;EACD,OAHD,MAGO;;EAELsC,QAAAA,MAAM,CAAC+F,IAAP,CAAYqK,KAAK,GAAG1S,IAApB;EACD;;EACD0S,MAAAA,KAAK,GAAG,EAAR;EACD,KAVD,MAUO;EACLA,MAAAA,KAAK,IAAI1S,IAAT;EACD;EACF,GApC8B;;;EAsC/B,MAAI0S,KAAJ,EAAW;EACT,QAAIpQ,MAAM,CAAClG,MAAP,KAAkB,CAAtB,EAAyB;EACvBkG,MAAAA,MAAM,CAAC,CAAD,CAAN,GAAY,EAAZ;EACD;;EACDA,IAAAA,MAAM,CAACA,MAAM,CAAClG,MAAP,GAAgB,CAAjB,CAAN,IAA6BsW,KAA7B,CAJS;EAKV,GA3C8B;;;EA6C/BpQ,EAAAA,MAAM,GAAG+P,cAAc,CAAC/P,MAAD,CAAvB,CA7C+B;;EA+C/BA,EAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAApL,CAAC;EAAA,WAAIA,CAAJ;EAAA,GAAf,CAAT;EACA,SAAO8E,MAAP;EACD,CAjDD;;EAkDA,YAAc,GAAGmQ,UAAjB;;EC5GA;;EACA,IAAME,QAAQ,GAAG,SAAXA,QAAW,GAAiC;EAAA,MAAxB5W,IAAwB,uEAAjB,EAAiB;EAAA,MAAb0G,KAAa;EAAA,MAANyF,IAAM;;;EAEhD,MAAI,OAAOnM,IAAP,KAAgB,QAApB,EAA8B;EAC5B,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;EAC5BA,MAAAA,IAAI,GAAG0L,MAAM,CAAC1L,IAAD,CAAb;EACD;EACF,GAN+C;;;EAQhD,MAAI4V,SAAS,GAAGD,YAAc,CAAC3V,IAAD,EAAO0G,KAAP,CAA9B;EACAkP,EAAAA,SAAS,GAAGA,SAAS,CAAClJ,GAAV,CAAc,UAAA3M,GAAG;EAAA,WAAI8W,QAAU,CAAC9W,GAAD,CAAd;EAAA,GAAjB,CAAZ,CATgD;;EAYhDoM,EAAAA,IAAI,GAAGA,IAAI,IAAI,IAAI2I,MAAJ,EAAf;EAEA,MAAIgC,OAAO,GAAGlB,SAAS,CAAClJ,GAAV,CAAc,UAAAR,KAAK,EAAI;EACnCA,IAAAA,KAAK,GAAGA,KAAK,CAACQ,GAAN,CAAU,UAAA3M,GAAG,EAAI;EACvB,UAAIgJ,IAAI,GAAG,IAAI0C,MAAJ,CAAS1L,GAAT,CAAX;EACAoM,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KAJO,CAAR,CADmC;;EAOnCgM,IAAAA,UAAS,CAAC7I,KAAD,CAAT,CAPmC;;EAUnC,QAAI5K,CAAC,GAAG,IAAIiT,QAAJ,CAAWrI,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAApB,EAAwB4G,KAAK,CAAC7L,MAA9B,EAAsC8L,IAAtC,CAAR;EACA7K,IAAAA,CAAC,CAAC2K,KAAF,CAAQC,KAAR,GAAgBA,KAAhB;EACA,WAAO5K,CAAP;EACD,GAba,CAAd,CAdgD;;EA6BhD,SAAOwV,OAAP;EACD,CA9BD;;EAgCA,gBAAc,GAAGF,QAAjB;;ECnCA,IAAMG,QAAQ,GAAG,SAAXA,QAAW,CAASjH,IAAT,EAAepJ,KAAf,EAAsB;EACrC,MAAIyF,IAAI,GAAG,IAAI2I,MAAJ,EAAX;EACA,MAAIgC,OAAO,GAAGhH,IAAI,CAACpD,GAAL,CAAS,UAACpL,CAAD,EAAIL,CAAJ,EAAU;EAC/B,QAAIiL,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,CAAQQ,GAAR,CAAY,UAACrL,CAAD,EAAIpB,CAAJ,EAAU;EAChC,UAAI8I,IAAI,GAAG,IAAI0C,MAAJ,CAASpK,CAAC,CAACrB,IAAX,CAAX;EACA+I,MAAAA,IAAI,CAACrF,GAAL,GAAWrC,CAAC,CAACqC,GAAF,KAAUgC,SAAV,GAAsBrE,CAAC,CAACqC,GAAxB,GAA8B,EAAzC;;EACA,UAAIrC,CAAC,CAACsC,IAAF,KAAW+B,SAAf,EAA0B;EACxBrE,QAAAA,CAAC,CAACsC,IAAF,GAAS,GAAT,CADwB;;EAGxB,YAAI1D,CAAC,IAAIqB,CAAC,CAAC4K,KAAF,CAAQ7L,MAAR,GAAiB,CAA1B,EAA6B;EAC3BgB,UAAAA,CAAC,CAACsC,IAAF,GAAS,IAAT;;EACA,cAAI1C,CAAC,IAAIK,CAAC,CAAC4K,KAAF,CAAQ7L,MAAR,GAAiB,CAA1B,EAA6B;EAC3BgB,YAAAA,CAAC,CAACsC,IAAF,GAAS,GAAT;EACD;EACF;EACF;;EACDoF,MAAAA,IAAI,CAACpF,IAAL,GAAYtC,CAAC,CAACsC,IAAF,KAAW+B,SAAX,GAAuBrE,CAAC,CAACsC,IAAzB,GAAgC,GAA5C;;EAEA,UAAItC,CAAC,CAAC0E,IAAN,EAAY;EACV1E,QAAAA,CAAC,CAAC0E,IAAF,CAAO3D,OAAP,CAAe,UAAA0D,GAAG;EAAA,iBAAIiD,IAAI,CAACjD,GAAL,CAASA,GAAT,EAAc,EAAd,EAAkBY,KAAlB,CAAJ;EAAA,SAAlB;EACD;;EACDyF,MAAAA,IAAI,CAACX,GAAL,CAASzC,IAAT;EACA,aAAOA,IAAP;EACD,KApBW,CAAZ,CAD+B;;EAuB/BgM,IAAAA,UAAS,CAAC7I,KAAD,CAAT,CAvB+B;;EAyB/B,WAAO,IAAIqI,QAAJ,CAAWrI,KAAK,CAAC,CAAD,CAAL,CAAS5G,EAApB,EAAwB4G,KAAK,CAAC7L,MAA9B,EAAsC8L,IAAtC,CAAP;EACD,GA1Ba,CAAd;EA2BA,SAAO2K,OAAP;EACD,CA9BD;;EA+BA,cAAc,GAAGC,QAAjB;;ECpCA,YAAc,GAAG,QAAjB;;ECAA,SAAc,GAAC;EACb,iBAAe,aADF;EAEb,iBAAe,cAFF;EAGb,kBAAgB,gBAHH;EAIb,WAAS,YAJI;EAKb,UAAQ,oGALK;EAMb,YAAU,0BANG;EAOb,eAAa,iEAPA;EAQb,eAAa,gBARA;EASb,YAAU,6CATG;EAUb,cAAY,sBAVC;EAWb,kBAAgB,+CAXH;EAYb,YAAU,cAZG;EAab,iBAAe,0KAbF;EAcb,aAAW,gFAdE;EAeb,cAAY,2uBAfC;EAgBb,WAAS,+WAhBI;EAiBb,eAAa,2cAjBA;EAkBb,gBAAc,+8CAlBD;EAmBb,iBAAe,wgCAnBF;EAoBb,gBAAc,8hFApBD;EAqBb,UAAQ,8rBArBK;EAsBb,kBAAgB,u1EAtBH;EAuBb,aAAW,gzBAvBE;EAwBb,gBAAc,qGAxBD;EAyBb,cAAY,8SAzBC;EA0Bb,UAAQ,8lDA1BK;EA2Bb,kBAAgB,ubA3BH;EA4Bb,WAAS,ufA5BI;EA6Bb,aAAW,yyDA7BE;EA8Bb,YAAU,kvCA9BG;EA+Bb,gBAAc,0wKA/BD;EAgCb,aAAW,2DAhCE;EAiCb,WAAS,kGAjCI;EAkCb,UAAQ,8CAlCK;EAmCb,eAAa,sLAnCA;EAoCb,cAAY,mhDApCC;EAqCb,cAAY,88HArCC;EAsCb,YAAU,8gBAtCG;EAuCb,UAAQ,kHAvCK;EAwCb,iBAAe,i6FAxCF;EAyCb,WAAS,wEAzCI;EA0Cb,eAAa,q+FA1CA;EA2Cb,gBAAc,kqDA3CD;EA4Cb,eAAa,qNA5CA;EA6Cb,aAAW,8KA7CE;EA8Cb,cAAY,8JA9CC;EA+Cb,gBAAc,4UA/CD;EAgDb,YAAU,4hBAhDG;EAiDb,iBAAe,wTAjDF;EAkDb,gBAAc;EAlDD,CAAf;;ECAA,IAAMC,MAAM,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,cAApB,CAAf;EAEA,SAAc,GAAG;EACfC,EAAAA,IAAI,EAAE;EACJ/L,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADF,GADS;;EAKfgM,EAAAA,QAAQ,EAAE;EACR/N,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE;EAFE,GALK;;EAUfjD,EAAAA,UAAU,EAAE;EACVkB,IAAAA,GAAG,EAAE;EADK,GAVG;;EAefgO,EAAAA,MAAM,EAAE;EACNhO,IAAAA,GAAG,EAAE,CAAC,YAAD,EAAe,UAAf,CADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,OAAD,EAAU,cAAV,EAA0B,MAA1B;EAFA,GAfO;EAmBfkM,EAAAA,SAAS,EAAE;EACTjO,IAAAA,GAAG,EAAE;EADI,GAnBI;EAsBfkO,EAAAA,QAAQ,EAAE;EACRlO,IAAAA,GAAG,EAAE,WADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,YAAD,EAAe,UAAf;EAFE,GAtBK;EA0BfoM,EAAAA,UAAU,EAAE;EACVnO,IAAAA,GAAG,EAAE,WADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,UAAD,EAAa,UAAb;EAFI,GA1BG;EA8BfqM,EAAAA,QAAQ,EAAE;EACRpO,IAAAA,GAAG,EAAE,QADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFE,GA9BK;EAkCfsM,EAAAA,QAAQ,EAAE;EACRrO,IAAAA,GAAG,EAAE,QADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,UAAd;EAFE,GAlCK;EAsCfuM,EAAAA,SAAS,EAAE;EACTtO,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,UAAd,EAA0B,OAA1B;EAFG,GAtCI;;EA4CfwM,EAAAA,KAAK,EAAE;EACLvO,IAAAA,GAAG,EAAE,UADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EAFD,GA5CQ;EAgDfyM,EAAAA,OAAO,EAAE;EACPxO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,MAAD;EAFC,GAhDM;EAoDf0M,EAAAA,IAAI,EAAE;EACJzO,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFF,GApDS;EAwDf2M,EAAAA,MAAM,EAAE;EACN1O,IAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,YAAV;EADC,GAxDO;EA2Df2O,EAAAA,OAAO,EAAE;EACP3O,IAAAA,GAAG,EAAE;EADE,GA3DM;;EAgEf4O,EAAAA,YAAY,EAAE;EACZ5O,IAAAA,GAAG,EAAE,CAAC,UAAD,EAAa,YAAb,CADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFM,GAhEC;EAoEf8M,EAAAA,UAAU,EAAE;EACV7O,IAAAA,GAAG,EAAE;EADK,GApEG;EAuEf8O,EAAAA,MAAM,EAAE;EACN9O,IAAAA,GAAG,EAAE;EADC,GAvEO;EA0Ef+O,EAAAA,OAAO,EAAE;EACP/O,IAAAA,GAAG,EAAE;EADE,GA1EM;;EA+EftC,EAAAA,MAAM,EAAE;EACNsC,IAAAA,GAAG,EAAE,MADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFA,GA/EO;;EAoFfiN,EAAAA,WAAW,EAAE;EACXhP,IAAAA,GAAG,EAAE;EADM,GApFE;EAuFfiP,EAAAA,OAAO,EAAE;EACPjP,IAAAA,GAAG,EAAE,MADE;EAEP+B,IAAAA,IAAI,EAAE8L;EAFC,GAvFM;;EA4FfzP,EAAAA,KAAK,EAAE;EACL4B,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAE8L;EAFD,GA5FQ;;EAiGfqB,EAAAA,QAAQ,EAAE;EACRlP,IAAAA,GAAG,EAAE,MADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX;EAFE,GAjGK;;EAsGfoN,EAAAA,IAAI,EAAE;EACJnP,IAAAA,GAAG,EAAE,MADD;EAEJ+B,IAAAA,IAAI,EAAE8L;EAFF,GAtGS;;EA2GfuB,EAAAA,OAAO,EAAE;EACPpP,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,YAAT,CADE;EAEP+B,IAAAA,IAAI,EAAE8L;EAFC,GA3GM;;EAgHfnO,EAAAA,UAAU,EAAE;EACVM,IAAAA,GAAG,EAAE,MADK;;EAAA;EAhHG,CAAjB;;ECFA,SAAc,GAAG;EACfpC,EAAAA,IAAI,EAAE;EACJmE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB,EAAgC,OAAhC;EADF,GADS;;EAKf7D,EAAAA,YAAY,EAAE;EACZ8B,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFM,GALC;;EAUfjE,EAAAA,UAAU,EAAE;EACVkC,IAAAA,GAAG,EAAE,cADK;EAEV+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd;EAFI,GAVG;;EAef9D,EAAAA,MAAM,EAAE;EACN+B,IAAAA,GAAG,EAAE,cADC;EAEN+B,IAAAA,IAAI,EAAE,CAAC,WAAD,EAAc,QAAd,EAAwB,aAAxB;EAFA,GAfO;;EAoBf/D,EAAAA,SAAS,EAAE;EACTgC,IAAAA,GAAG,EAAE,MADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFG,GApBI;;EAyBfsN,EAAAA,WAAW,EAAE;EACXrP,IAAAA,GAAG,EAAE;EADM,GAzBE;;EA8BfsP,EAAAA,MAAM,EAAE;EACNtP,IAAAA,GAAG,EAAE;EADC,GA9BO;;EAkCfuP,EAAAA,KAAK,EAAE;EACLvP,IAAAA,GAAG,EAAE,MADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,YAAD;EAFD,GAlCQ;;EAuCfyN,EAAAA,YAAY,EAAE;EACZxP,IAAAA,GAAG,EAAE,MADO;EAEZ+B,IAAAA,IAAI,EAAE;EAFM,GAvCC;EA2Cf0N,EAAAA,UAAU,EAAE;EACVzP,IAAAA,GAAG,EAAE;EADK,GA3CG;;EA+Cf7B,EAAAA,UAAU,EAAE;EACV6B,IAAAA,GAAG,EAAE;EADK,GA/CG;;EAmDf0P,EAAAA,WAAW,EAAE;EACX1P,IAAAA,GAAG,EAAE;EADM,GAnDE;;EAuDf2P,EAAAA,QAAQ,EAAE;EACR3P,IAAAA,GAAG,EAAE;EADG;EAvDK,CAAjB;;ECAA,UAAc,GAAG;EACf4P,EAAAA,KAAK,EAAE;EACL7N,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,QAAtB;EADD,GADQ;EAIf8N,EAAAA,OAAO,EAAE;EACP7P,IAAAA,GAAG,EAAE,OADE;EAEP+B,IAAAA,IAAI,EAAE,CAAC,UAAD;EAFC,GAJM;EAQf+N,EAAAA,QAAQ,EAAE;EACR9P,IAAAA,GAAG,EAAE,OADG;EAER+B,IAAAA,IAAI,EAAE,CAAC,SAAD;EAFE,GARK;EAYfgO,EAAAA,YAAY,EAAE;EACZ/P,IAAAA,GAAG,EAAE,UADO;;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,WAAZ;EAFM,GAZC;EAgBfiO,EAAAA,SAAS,EAAE;EACThQ,IAAAA,GAAG,EAAE,OADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,cAAD;EAFG,GAhBI;EAoBfkO,EAAAA,YAAY,EAAE;EACZjQ,IAAAA,GAAG,EAAE,OADO;EAEZ+B,IAAAA,IAAI,EAAE,CAAC,WAAD;EAFM,GApBC;EAwBfmO,EAAAA,KAAK,EAAE;EACLlQ,IAAAA,GAAG,EAAE;EADA,GAxBQ;EA2BfmQ,EAAAA,OAAO,EAAE;EACPnQ,IAAAA,GAAG,EAAE;EADE;EA3BM,CAAjB;;ECAA,IAAM5D,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,QAA9B,EAAwC,OAAxC,EAAiD,cAAjD,CAAjB;EAEA,QAAc,GAAG;;EAEfgU,EAAAA,SAAS,EAAE;EACTrO,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,QAAjB,EAA2B,OAA3B;EADG,GAFI;;EAMfsO,EAAAA,UAAU,EAAE;EACVrQ,IAAAA,GAAG,EAAE,CAAC,WAAD;EADK,GANG;;EAUfsQ,EAAAA,WAAW,EAAE;EACXtQ,IAAAA,GAAG,EAAE,CAAC,WAAD;EADM,GAVE;;EAcfuQ,EAAAA,WAAW,EAAE;EACXvQ,IAAAA,GAAG,EAAE,CAAC,WAAD,CADM;EAEX+B,IAAAA,IAAI,EAAE,CAAC,aAAD;EAFK,GAdE;EAmBfyO,EAAAA,WAAW,EAAE;EACXxQ,IAAAA,GAAG,EAAE,CAAC,aAAD;EADM,GAnBE;EAsBfyQ,EAAAA,MAAM,EAAE;EACN1O,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B,OAA9B;EADA,GAtBO;;;EA4Bf2O,EAAAA,IAAI,EAAE;EACJ3O,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,aAAT,EAAwB,QAAxB,EAAkC,aAAlC,EAAiD,WAAjD;EADF,GA5BS;EA+Bf4O,EAAAA,KAAK,EAAE;EACL3Q,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,UAAT,CADA;EAEL+B,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,SAAT,EAAoB,MAApB;EAFD,GA/BQ;EAmCf6O,EAAAA,OAAO,EAAE;EACP5Q,IAAAA,GAAG,EAAE,CAAC,MAAD,EAAS,MAAT;EADE,GAnCM;;EAuCf6Q,EAAAA,IAAI,EAAE;EACJ7Q,IAAAA,GAAG,EAAE,CAAC,MAAD,CADD;EAEJ+B,IAAAA,IAAI,EAAE,CAAC,OAAD;EAFF,GAvCS;;EA6Cf+O,EAAAA,UAAU,EAAE;EACV/O,IAAAA,IAAI,EAAE3F;EADI,GA7CG;EAgDf2U,EAAAA,WAAW,EAAE;EACXhP,IAAAA,IAAI,EAAE3F;EADK,GAhDE;EAmDf4U,EAAAA,WAAW,EAAE;EACXjP,IAAAA,IAAI,EAAE3F;EADK,GAnDE;;EAwDf6U,EAAAA,YAAY,EAAE;EACZlP,IAAAA,IAAI,EAAE,CAAC,YAAD;EADM,GAxDC;;EA6DfmP,EAAAA,QAAQ,EAAE,EA7DK;;EA+DfC,EAAAA,UAAU,EAAE;EACVpP,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,QAA9B;EADI,GA/DG;;EAmEfxC,EAAAA,YAAY,EAAE,EAnEC;;EAsEf6R,EAAAA,GAAG,EAAE;EACHrP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,aAAZ,EAA2B,MAA3B,EAAmC,WAAnC,EAAgD,OAAhD,EAAyD,WAAzD,EAAsE,OAAtE;EADH,GAtEU;EAyEfsP,EAAAA,WAAW,EAAE;EACXtP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C,EAAuD,OAAvD;EADK,GAzEE;EA4EfuP,EAAAA,OAAO,EAAE,EA5EM;EA6EfC,EAAAA,SAAS,EAAE;EACTvR,IAAAA,GAAG,EAAE,CAAC,MAAD,CADI;EAET+B,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,OAA1C;EAFG,GA7EI;EAiFfyP,EAAAA,KAAK,EAAE;EACLzP,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAjFQ;EAoFf0P,EAAAA,QAAQ,EAAE;EACR1P,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADE,GApFK;EAuFf2P,EAAAA,KAAK,EAAE;EACL3P,IAAAA,IAAI,EAAE,CAAC,SAAD,EAAY,MAAZ,EAAoB,WAApB,EAAiC,OAAjC,EAA0C,WAA1C;EADD,GAvFQ;;EA4FftC,EAAAA,SAAS,EAAE;EACTsC,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADG,GA5FI;EA+FfhD,EAAAA,OAAO,EAAE;EACPgD,IAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,cAAX;EADC,GA/FM;EAkGflE,EAAAA,QAAQ,EAAE;EACRkE,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,OAAtB;EADE,GAlGK;;EAsGf4P,EAAAA,SAAS,EAAE;EACT5P,IAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,WAAT,EAAsB,MAAtB,EAA8B,OAA9B;EADG;EAtGI,CAAjB;;ECFA;EACA,IAAM6P,QAAQ,GAAG;EACf9D,EAAAA,IAAI,EAAE,MADS;EAGflQ,EAAAA,IAAI,EAAE,OAHS;EAIfC,EAAAA,QAAQ,EAAE,OAJK;EAMf6S,EAAAA,IAAI,EAAE,KANS;EAOfd,EAAAA,KAAK,EAAE,KAPQ;EASfQ,EAAAA,SAAS,EAAE,SATI;EAWfY,EAAAA,WAAW,EAAE,MAXE;EAYfD,EAAAA,WAAW,EAAE,MAZE;EAafD,EAAAA,UAAU,EAAE,MAbG;EAcfL,EAAAA,MAAM,EAAE;EAdO,CAAjB;EAiBA;;EACA,IAAMoB,SAAS,GAAG,SAAZA,SAAY,CAASjV,IAAT,EAAe;EAC/B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;;EAE7B,QAAI8E,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAZ,EAAmB;EACjBlV,MAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBlV,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAxB;EACA;EACD,KAL4B;;;EAO7B,QAAIF,QAAQ,CAAC9Z,CAAD,CAAZ,EAAiB;EACf8E,MAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBF,QAAQ,CAAC9Z,CAAD,CAAxB;EACA;EACD;;EACD8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQkI,GAAR,CAAY7C,IAAZ,CAAiB,UAAA5E,CAAC,EAAI;EACpB,UAAIqZ,QAAQ,CAACrZ,CAAD,CAAZ,EAAiB;EACfqE,QAAAA,IAAI,CAAC9E,CAAD,CAAJ,CAAQga,KAAR,GAAgBF,QAAQ,CAACrZ,CAAD,CAAxB;EACA,eAAO,IAAP;EACD;;EACD,aAAO,KAAP;EACD,KAND;EAOD,GAlBD;EAmBA,SAAOqE,IAAP;EACD,CArBD;;EAuBA,UAAc,GAAGiV,SAAjB;;EC1CA,IAAM9M,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAACjL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;;;EAKA,IAAMib,QAAQ,GAAG,SAAXA,QAAW,CAASnV,IAAT,EAAe;EAC9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA,QAAI6L,GAAG,GAAGhH,GAAG,CAACqD,GAAJ,CAAQ9I,MAAlB;;EACA,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6M,GAApB,EAAyB7M,CAAC,EAA1B,EAA8B;EAC5B,UAAI+K,IAAI,GAAGlF,GAAG,CAACqD,GAAJ,CAAQlJ,CAAR,CAAX;;EACA,UAAI8F,IAAI,CAACiF,IAAD,CAAR,EAAgB;EACdlF,QAAAA,GAAG,CAACqD,GAAJ,GAAUrD,GAAG,CAACqD,GAAJ,CAAQuF,MAAR,CAAe3I,IAAI,CAACiF,IAAD,CAAJ,CAAW7B,GAA1B,CAAV;EACD;EACF,KAR4B;;;EAU7BrD,IAAAA,GAAG,CAACqD,GAAJ,GAAU+E,QAAM,CAACpI,GAAG,CAACqD,GAAL,CAAhB;EACD,GAXD;EAYA,SAAOpD,IAAP;EACD,CAdD;;EAeA,QAAc,GAAGmV,QAAjB;;ECpBA,IAAMhN,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,SAAOA,GAAG,CAACuC,MAAJ,CAAW,UAACjL,CAAD,EAAI3B,CAAJ,EAAOM,CAAP;EAAA,WAAaA,CAAC,CAACoE,OAAF,CAAU/C,CAAV,MAAiB3B,CAA9B;EAAA,GAAX,CAAP;EACD,CAFD;EAKA;;;EACA,IAAMkb,SAAS,GAAG,SAAZA,SAAY,CAASpV,IAAT,EAAe;EAC/B,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,IAAY,EAAvB;EACApF,IAAAA,GAAG,CAACqD,GAAJ,CAAQ/G,OAAR,CAAgB,UAAA4I,IAAI,EAAI;EACtB,UAAIjF,IAAI,CAACiF,IAAD,CAAJ,IAAcjF,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAA7B,EAAmC;;EAEjC,YAAIA,IAAI,GAAG,OAAOnF,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAAlB,KAA2B,QAA3B,GAAsC,CAACnF,IAAI,CAACiF,IAAD,CAAJ,CAAW7B,GAAZ,CAAtC,GAAyDpD,IAAI,CAACiF,IAAD,CAAJ,CAAWE,IAAX,IAAmB,EAAvF;EACApF,QAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,CAASwD,MAAT,CAAgBxD,IAAhB,CAAX;EACD;EACF,KAND,EAHgB;;EAWhB,SAAK,IAAIjL,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAMmb,GAAG,GAAGjZ,IAAI,CAAClC,CAAD,CAAhB;;EACA,UAAI8F,IAAI,CAACqV,GAAD,CAAJ,CAAUlQ,IAAV,CAAevG,OAAf,CAAuB1D,CAAvB,MAA8B,CAAC,CAAnC,EAAsC;EACpC6E,QAAAA,GAAG,CAACoF,IAAJ,CAASoB,IAAT,CAAc8O,GAAd;EACD;EACF,KAhBe;;;EAkBhBtV,IAAAA,GAAG,CAACoF,IAAJ,GAAWgD,QAAM,CAACpI,GAAG,CAACoF,IAAL,CAAjB;EACD,GAnBD;EAoBA,SAAOnF,IAAP;EACD,CAvBD;;EAwBA,SAAc,GAAGoV,SAAjB;;EC9BA;EACA,IAAME,YAAY,GAAG,SAAfA,YAAe,CAAStV,IAAT,EAAe;EAClC,MAAI5D,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4D,IAAZ,CAAX;EACA5D,EAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChB,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd;EACA6E,IAAAA,GAAG,CAACoD,OAAJ,GAAc,EAAd,CAFgB;;EAIhB,SAAK,IAAIjJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI8F,IAAI,CAAC5D,IAAI,CAAClC,CAAD,CAAL,CAAJ,CAAckJ,GAAd,CAAkBxE,OAAlB,CAA0B1D,CAA1B,MAAiC,CAAC,CAAtC,EAAyC;EACvC6E,QAAAA,GAAG,CAACoD,OAAJ,CAAYoD,IAAZ,CAAiBnK,IAAI,CAAClC,CAAD,CAArB;EACD;EACF;EACF,GATD;EAUA,SAAO8F,IAAP;EACD,CAbD;;EAcA,YAAc,GAAGsV,YAAjB;;ECVA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAASvV,IAAT,EAAe;;EAE9B7D,EAAAA,MAAM,CAACC,IAAP,CAAY4D,IAAZ,EAAkB3D,OAAlB,CAA0B,UAAAnB,CAAC,EAAI;EAC7B,QAAI6E,GAAG,GAAGC,IAAI,CAAC9E,CAAD,CAAd,CAD6B;;EAG7B6E,IAAAA,GAAG,CAACqD,GAAJ,GAAUrD,GAAG,CAACqD,GAAJ,IAAW,EAArB;;EACA,QAAI,OAAOrD,GAAG,CAACqD,GAAX,KAAmB,QAAvB,EAAiC;EAC/BrD,MAAAA,GAAG,CAACqD,GAAJ,GAAU,CAACrD,GAAG,CAACqD,GAAL,CAAV;EACD,KAN4B;;;EAQ7BrD,IAAAA,GAAG,CAACoF,IAAJ,GAAWpF,GAAG,CAACoF,IAAJ,IAAY,EAAvB;;EACA,QAAI,OAAOpF,GAAG,CAACoF,IAAX,KAAoB,QAAxB,EAAkC;EAChCpF,MAAAA,GAAG,CAACoF,IAAJ,GAAW,CAACpF,GAAG,CAACoF,IAAL,CAAX;EACD;EACF,GAZD;EAaA,SAAOnF,IAAP;EACD,CAhBD;;;EAmBA,IAAMwV,SAAS,GAAG,SAAZA,SAAY,CAASxV,IAAT,EAAe;;EAE/BA,EAAAA,IAAI,GAAGuV,QAAQ,CAACvV,IAAD,CAAf,CAF+B;;EAI/BA,EAAAA,IAAI,GAAGmV,IAAQ,CAACnV,IAAD,CAAf,CAJ+B;;EAM/BA,EAAAA,IAAI,GAAGoV,KAAS,CAACpV,IAAD,CAAhB,CAN+B;;EAQ/BA,EAAAA,IAAI,GAAGyV,MAAU,CAACzV,IAAD,CAAjB,CAR+B;;EAU/BA,EAAAA,IAAI,GAAGmD,QAAO,CAACnD,IAAD,CAAd;EACA,SAAOA,IAAP;EACD,CAZD;;EAaA,aAAc,GAAGwV,SAAjB;;EC9BA,IAAME,KAAK,GAAG,SAARA,KAAQ,CAAS9P,GAAT,EAAc5F,IAAd,EAAoB;EAChC7D,EAAAA,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiBvJ,OAAjB,CAAyB,UAAAnB,CAAC,EAAI;EAC5B8E,IAAAA,IAAI,CAAC9E,CAAD,CAAJ,GAAU0K,GAAG,CAAC1K,CAAD,CAAb;EACD,GAFD;EAGD,CAJD;;EAMA,IAAMya,KAAK,GAAG,SAARA,KAAQ,GAAM;EAClB,MAAI3V,IAAI,GAAG,EAAX;EACA0V,EAAAA,KAAK,CAACE,KAAD,EAAQ5V,IAAR,CAAL;EACA0V,EAAAA,KAAK,CAACG,KAAD,EAAQ7V,IAAR,CAAL;EACA0V,EAAAA,KAAK,CAACI,MAAD,EAAS9V,IAAT,CAAL;EACA0V,EAAAA,KAAK,CAACK,IAAD,EAAO/V,IAAP,CAAL,CALkB;;EAOlBA,EAAAA,IAAI,GAAGwV,SAAS,CAACxV,IAAD,CAAhB;EACA,SAAOA,IAAP;EACD,CATD;;EAUA,QAAc,GAAG2V,KAAK,EAAtB;;MCvB2BK,GAAG,GAAC,sCAAlB;EAAA,IAAyD9P,KAAK,GAAC8P,GAAG,CAAClc,KAAJ,CAAU,EAAV,EAAcmE,MAAd,CAAqB,UAAS5C,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,SAAOS,CAAC,CAACC,CAAD,CAAD,GAAKV,CAAL,EAAOS,CAAd;EAAgB,CAArD,EAAsD,EAAtD,CAA/D;EAAA,IAAyH4a,WAAW,GAAC,SAAZA,WAAY,CAAS5a,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAAS2a,GAAG,CAAC3a,CAAD,CAAf,EAAmB,OAAO2a,GAAG,CAAC3a,CAAD,CAAV;EAAc,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,EAAV;EAAA,MAAae,CAAC,GAAC,EAAf;;EAAkB,SAAKN,CAAC,IAAET,CAAR,EAAUS,CAAC,IAAET,CAAH,EAAKU,CAAC,EAAN,EAASV,CAAC,IAAE,EAAtB;AAAyB,EAAzB;;EAA0B,SAAKU,CAAC,EAAN,GAAU;EAAC,QAAMA,EAAC,GAACD,CAAC,GAAC,EAAV;;EAAaM,IAAAA,CAAC,GAACgK,MAAM,CAACuQ,YAAP,CAAoB,CAAC5a,EAAC,GAAC,EAAF,GAAK,EAAL,GAAQ,EAAT,IAAaA,EAAjC,IAAoCK,CAAtC,EAAwCN,CAAC,GAAC,CAACA,CAAC,GAACC,EAAH,IAAM,EAAhD;EAAmD;;EAAA,SAAOK,CAAP;EAAS,CAAlT;EAAA,IAAmTwa,aAAa,GAAC,SAAdA,aAAc,CAAS9a,CAAT,EAAW;EAAC,MAAG,KAAK,CAAL,KAAS6K,KAAK,CAAC7K,CAAD,CAAjB,EAAqB,OAAO6K,KAAK,CAAC7K,CAAD,CAAZ;EAAgB,MAAIC,CAAC,GAAC,CAAN;EAAA,MAAQV,CAAC,GAAC,CAAV;EAAA,MAAYe,CAAC,GAAC,EAAd;EAAA,MAAiBF,CAAC,GAAC,CAAnB;;EAAqB,SAAKb,CAAC,GAACS,CAAC,CAACf,MAAT,EAAgBgB,CAAC,IAAEK,CAAH,EAAKf,CAAC,EAAN,EAASe,CAAC,IAAE,EAA5B;AAA+B,EAA/B;;EAAgC,OAAI,IAAIf,EAAC,GAACS,CAAC,CAACf,MAAF,GAAS,CAAnB,EAAqBM,EAAC,IAAE,CAAxB,EAA0BA,EAAC,IAAGa,CAAC,IAAE,EAAjC,EAAoC;EAAC,QAAIE,EAAC,GAACN,CAAC,CAAC+a,UAAF,CAAaxb,EAAb,IAAgB,EAAtB;;EAAyBe,IAAAA,EAAC,GAAC,EAAF,KAAOA,EAAC,IAAE,CAAV,GAAaL,CAAC,IAAEK,EAAC,GAACF,CAAlB;EAAoB;;EAAA,SAAOH,CAAP;EAAS,CAAlgB;;EAAmgB,IAAI+a,QAAQ,GAAC;EAACJ,EAAAA,WAAW,EAACA,WAAb;EAAyBE,EAAAA,aAAa,EAACA;EAAvC,CAAb;EAAA,IAAmEG,OAAO,GAAC,SAARA,OAAQ,CAASjb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,IAAI6Q,MAAJ,CAAW,yBAAX,CAAR;;EAA8C,OAAI,IAAIvR,CAAC,GAAC,CAAV,EAAYA,CAAC,GAACS,CAAC,CAACkb,KAAF,CAAQjc,MAAtB,EAA6BM,CAAC,EAA9B,EAAiC;EAAC,QAAMe,CAAC,GAACL,CAAC,CAACmR,IAAF,CAAOpR,CAAC,CAACkb,KAAF,CAAQ3b,CAAR,CAAP,CAAR;;EAA2B,QAAG,CAACe,CAAJ,EAAM;EAACN,MAAAA,CAAC,CAACmb,QAAF,GAAW5b,CAAX;EAAa;EAAM;;EAAAS,IAAAA,CAAC,CAACob,IAAF,CAAOJ,QAAQ,CAACF,aAAT,CAAuBxa,CAAC,CAAC,CAAD,CAAxB,CAAP,IAAqC0a,QAAQ,CAACF,aAAT,CAAuBxa,CAAC,CAAC,CAAD,CAAxB,CAArC;EAAkE;;EAAAN,EAAAA,CAAC,CAACkb,KAAF,GAAQlb,CAAC,CAACkb,KAAF,CAAQ1M,KAAR,CAAcxO,CAAC,CAACmb,QAAhB,EAAyBnb,CAAC,CAACkb,KAAF,CAAQjc,MAAjC,CAAR;EAAiD,CAA/U;;EAAgV,IAAMoc,YAAY,GAAC,SAAbA,YAAa,CAASrb,CAAT,EAAWC,CAAX,EAAaV,CAAb,EAAe;EAAC,MAAMe,CAAC,GAAC0a,QAAQ,CAACF,aAAT,CAAuB7a,CAAvB,CAAR;EAAkC,SAAOK,CAAC,GAACN,CAAC,CAACmb,QAAJ,GAAanb,CAAC,CAACob,IAAF,CAAO9a,CAAP,CAAb,GAAuBf,CAAC,GAACe,CAAF,GAAI,CAAJ,GAAMN,CAAC,CAACmb,QAAtC;EAA+C,CAApH;EAAA,IAAqHG,OAAO,GAAC,SAARA,OAAQ,CAAStb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC,EAAR;EAAA,MAAWV,CAAC,GAAC,SAAFA,CAAE,CAACe,CAAD,EAAGF,CAAH,EAAO;EAAC,QAAIC,CAAC,GAACL,CAAC,CAACkb,KAAF,CAAQ5a,CAAR,CAAN;EAAiB,YAAMD,CAAC,CAAC,CAAD,CAAP,KAAaJ,CAAC,CAACiL,IAAF,CAAO9K,CAAP,GAAUC,CAAC,GAACA,CAAC,CAACmO,KAAF,CAAQ,CAAR,CAAzB;EAAqC,QAAMnP,CAAC,GAACgB,CAAC,CAAC5B,KAAF,CAAQ,eAAR,CAAR;;EAAiC,SAAI,IAAI4B,EAAC,GAAC,CAAV,EAAYA,EAAC,GAAChB,CAAC,CAACJ,MAAhB,EAAuBoB,EAAC,IAAE,CAA1B,EAA4B;EAAC,UAAME,CAAC,GAAClB,CAAC,CAACgB,EAAD,CAAT;EAAA,UAAaxB,CAAC,GAACQ,CAAC,CAACgB,EAAC,GAAC,CAAH,CAAhB;EAAsB,UAAG,CAACE,CAAJ,EAAM;EAAS,UAAMT,CAAC,GAACM,CAAC,GAACG,CAAV;;EAAY,UAAG,QAAM1B,CAAN,IAAS,KAAK,CAAL,KAASA,CAArB,EAAuB;EAACoB,QAAAA,CAAC,CAACiL,IAAF,CAAOpL,CAAP;EAAU;EAAS;;EAAA,UAAMN,CAAC,GAAC6b,YAAY,CAACrb,CAAD,EAAGnB,CAAH,EAAKyB,CAAL,CAApB;EAA4Bf,MAAAA,CAAC,CAACC,CAAD,EAAGM,CAAH,CAAD;EAAO;EAAC,GAAzQ;;EAA0Q,SAAOP,CAAC,CAAC,CAAD,EAAG,EAAH,CAAD,EAAQU,CAAf;EAAiB,CAApa;EAAA,IAAqasb,MAAM,GAAC,SAAPA,MAAO,CAASvb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAAC;EAACib,IAAAA,KAAK,EAAClb,CAAC,CAACvB,KAAF,CAAQ,GAAR,CAAP;EAAoB2c,IAAAA,IAAI,EAAC,EAAzB;EAA4BD,IAAAA,QAAQ,EAAC;EAArC,GAAR;EAAgD,SAAOnb,CAAC,CAACoM,KAAF,CAAQ,GAAR,KAAc6O,OAAO,CAAChb,CAAD,CAArB,EAAyBqb,OAAO,CAACrb,CAAD,CAAvC;EAA2C,CAAnhB;;EAAohB,IAAIub,QAAQ,GAACD,MAAb;EAAA,IAAoBE,UAAU,GAAC,SAAXA,UAAW,CAASzb,CAAT,EAAW;EAAC,MAAMC,CAAC,GAACD,CAAC,CAACvB,KAAF,CAAQ,GAAR,EAAamE,MAAb,CAAoB,UAAC5C,CAAD,EAAGC,CAAH,EAAO;EAAC,QAAMV,CAAC,GAACU,CAAC,CAACxB,KAAF,CAAQ,GAAR,CAAR;EAAqB,WAAOuB,CAAC,CAACT,CAAC,CAAC,CAAD,CAAF,CAAD,GAAQA,CAAC,CAAC,CAAD,CAAT,EAAaS,CAApB;EAAsB,GAAvE,EAAwE,EAAxE,CAAR;EAAA,MAAoFT,CAAC,GAAC,EAAtF;EAAyF,SAAOuB,MAAM,CAACC,IAAP,CAAYd,CAAZ,EAAee,OAAf,CAAuB,UAAShB,CAAT,EAAW;EAAC,QAAMM,CAAC,GAACkb,QAAQ,CAACvb,CAAC,CAACD,CAAD,CAAF,CAAhB;EAAuB,eAASA,CAAT,KAAaA,CAAC,GAAC,CAAC,CAAhB;;EAAmB,SAAI,IAAIC,GAAC,GAAC,CAAV,EAAYA,GAAC,GAACK,CAAC,CAACrB,MAAhB,EAAuBgB,GAAC,EAAxB,EAA2B;EAAC,UAAMG,CAAC,GAACE,CAAC,CAACL,GAAD,CAAT;EAAa,OAAC,CAAD,KAAKV,CAAC,CAACgF,cAAF,CAAiBnE,CAAjB,CAAL,GAAyB,CAAC,CAAD,KAAKsb,KAAK,CAAC3J,OAAN,CAAcxS,CAAC,CAACa,CAAD,CAAf,CAAL,GAAyBb,CAAC,CAACa,CAAD,CAAD,GAAK,CAACb,CAAC,CAACa,CAAD,CAAF,EAAMJ,CAAN,CAA9B,GAAuCT,CAAC,CAACa,CAAD,CAAD,CAAK8K,IAAL,CAAUlL,CAAV,CAAhE,GAA6ET,CAAC,CAACa,CAAD,CAAD,GAAKJ,CAAlF;EAAoF;EAAC,GAA3M,GAA6MT,CAApN;EAAsN,CAA1V;;EAA2V,kBAAc,GAACkc,UAAf;;ECA/sD;EACA,IAAME,OAAO,GAAG,SAAVA,OAAU,CAAS9Y,IAAT,EAAe6B,GAAf,EAAoBkX,GAApB,EAAyB;EACvC,MAAIA,GAAG,CAAC/Y,IAAD,CAAH,KAAcyB,SAAlB,EAA6B;EAC3B,QAAI,OAAOsX,GAAG,CAAC/Y,IAAD,CAAV,KAAqB,QAAzB,EAAmC;EACjC+Y,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY,CAAC+Y,GAAG,CAAC/Y,IAAD,CAAJ,CAAZ;EACD;;EACD,QAAI,OAAO6B,GAAP,KAAe,QAAnB,EAA6B;EAC3BkX,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,CAAUqI,IAAV,CAAexG,GAAf;EACD,KAFD,MAEO;EACLkX,MAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY+Y,GAAG,CAAC/Y,IAAD,CAAH,CAAUyK,MAAV,CAAiB5I,GAAjB,CAAZ;EACD;EACF,GATD,MASO;EACLkX,IAAAA,GAAG,CAAC/Y,IAAD,CAAH,GAAY6B,GAAZ;EACD;EACF,CAbD;;;EAgBA,IAAMmX,OAAO,GAAG,SAAVA,OAAU,CAAShZ,IAAT,EAAe6B,GAAf,EAAoBY,KAApB,EAA2B;EACzC,MAAIwW,OAAO,GAAGxW,KAAK,CAAC4M,KAApB;EACA,MAAI3M,SAAS,GAAGD,KAAK,CAACE,UAAtB,CAFyC;;EAKzC,MAAI0M,KAAK,GAAGrP,IAAI,CAACpE,KAAL,CAAW,GAAX,CAAZ;;EACA,MAAIyT,KAAK,CAACjT,MAAN,GAAe,CAAnB,EAAsB;;EAEpBqG,IAAAA,KAAK,CAACyW,WAAN,CAAkB7J,KAAK,CAAC,CAAD,CAAvB,IAA8B,IAA9B;EACD,GATwC;;;EAWzC,MAAIxN,GAAG,KAAK,UAAZ,EAAwB;EACtB,QAAIsX,MAAM,GAAGzW,SAAS,CAAC0W,QAAV,CAAmBpZ,IAAnB,EAAyByC,KAAzB,CAAb;EACAwW,IAAAA,OAAO,CAACE,MAAD,CAAP,GAAkBF,OAAO,CAACE,MAAD,CAAP,IAAmB,QAArC,CAFsB;EAGvB,GAdwC;;;EAgBzC,MAAItX,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIwX,IAAI,GAAG3W,SAAS,CAAC4W,SAAV,CAAoBtZ,IAApB,EAA0ByC,KAA1B,CAAX;EACA,QAAIX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,IAAZ,CAAX;;EACA,SAAK,IAAIrd,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI4B,CAAC,GAAGyb,IAAI,CAACvX,IAAI,CAAC9F,CAAD,CAAL,CAAZ;EACAid,MAAAA,OAAO,CAACrb,CAAD,CAAP,GAAaqb,OAAO,CAACrb,CAAD,CAAP,IAAckE,IAAI,CAAC9F,CAAD,CAA/B,CAFoC;EAGrC;EACF,GAvBwC;;;EAyBzC,MAAI6F,GAAG,KAAK,YAAZ,EAA0B;EACxB,QAAIwX,KAAI,GAAG3W,SAAS,CAAC6W,UAAV,CAAqBvZ,IAArB,CAAX;;EACA,QAAI8B,KAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,KAAZ,CAAX;;EACA,SAAK,IAAIrd,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG8F,KAAI,CAAC1F,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAI4B,EAAC,GAAGyb,KAAI,CAACvX,KAAI,CAAC9F,EAAD,CAAL,CAAZ;EACAid,MAAAA,OAAO,CAACrb,EAAD,CAAP,GAAaqb,OAAO,CAACrb,EAAD,CAAP,IAAckE,KAAI,CAAC9F,EAAD,CAA/B,CAFoC;EAGrC;EACF,GAhCwC;;;EAkCzC,MAAI6F,GAAG,KAAK,aAAZ,EAA2B;;EAEzBiX,IAAAA,OAAO,CAAC9Y,IAAD,EAAO,YAAP,EAAqBiZ,OAArB,CAAP,CAFyB;;EAIzB,QAAII,MAAI,GAAG3W,SAAS,CAAC4W,SAAV,CAAoBjK,KAAK,CAAC,CAAD,CAAzB,EAA8B5M,KAA9B,CAAX;;EACA,QAAIX,MAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYmb,MAAZ,CAAX;;EACA,SAAK,IAAIrd,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAG8F,MAAI,CAAC1F,MAAzB,EAAiCJ,GAAC,EAAlC,EAAsC;;EAEpCyG,MAAAA,KAAK,CAACyW,WAAN,CAAkBG,MAAI,CAACvX,MAAI,CAAC9F,GAAD,CAAL,CAAtB,IAAmC,IAAnC,CAFoC;;EAIpC,UAAI4B,GAAC,GAAGyb,MAAI,CAACvX,MAAI,CAAC9F,GAAD,CAAL,CAAJ,GAAgB,GAAhB,GAAsBqT,KAAK,CAAC,CAAD,CAAnC;;EAEAyJ,MAAAA,OAAO,CAAClb,GAAD,EAAIkE,MAAI,CAAC9F,GAAD,CAAR,EAAaid,OAAb,CAAP;EACAH,MAAAA,OAAO,CAAClb,GAAD,EAAI,aAAJ,EAAmBqb,OAAnB,CAAP;EACD;EACF,GAjDwC;;;EAmDzC,MAAIpX,GAAG,KAAK,SAAZ,EAAuB;EACrB,QAAIsX,OAAM,GAAGzW,SAAS,CAAC0W,QAAV,CAAmBpZ,IAAnB,EAAyByC,KAAzB,CAAb;;EACAwW,IAAAA,OAAO,CAACE,OAAD,CAAP,GAAkBF,OAAO,CAACE,OAAD,CAAP,IAAmB,CAAC,SAAD,EAAY,QAAZ,CAArC,CAFqB;EAGtB;EACF,CAvDD;EA0DA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;EACA,YAAc,GAAG;EACfL,EAAAA,OAAO,EAAEA,OADM;EAEfE,EAAAA,OAAO,EAAEA;EAFM,CAAjB;;ECnFA;EACA,IAAMQ,aAAa,GAAG,SAAhBA,aAAgB,CAAS/W,KAAT,EAAgB;;EAEpC,MAAIiV,KAAK,GAAGjV,KAAK,CAACgX,UAAN,CAAiB/B,KAA7B;EACA,MAAIrI,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAYwZ,KAAZ,CAAZ;;EACA,OAAK,IAAI1b,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAM4B,CAAC,GAAGyR,KAAK,CAACrT,CAAD,CAAf;EACAyG,IAAAA,KAAK,CAAC4M,KAAN,CAAYzR,CAAZ,IAAiB,UAAjB;EACA6E,IAAAA,KAAK,CAAC4M,KAAN,CAAYqI,KAAK,CAAC9Z,CAAD,CAAjB,IAAwB,QAAxB;EACD,GARmC;;;EAWpC,MAAI+Z,KAAK,GAAGlV,KAAK,CAACgX,UAAN,CAAiB9B,KAA7B;EACA,MAAIzZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYyZ,KAAZ,CAAX;;EAZoC,6BAa3B3b,EAb2B;EAclC,QAAM0d,GAAG,GAAGxb,IAAI,CAAClC,EAAD,CAAhB,CAdkC;;EAgBlCyG,IAAAA,KAAK,CAAC4M,KAAN,CAAYqK,GAAZ,IAAmBjX,KAAK,CAAC4M,KAAN,CAAYqK,GAAZ,KAAoB,YAAvC;EACA,QAAIC,KAAK,GAAGlX,KAAK,CAACE,UAAN,CAAiB2W,SAAjB,CAA2BI,GAA3B,EAAgCjX,KAAhC,CAAZ;EACAkX,IAAAA,KAAK,GAAG1b,MAAM,CAACqH,MAAP,CAAcqU,KAAd,EAAqBhC,KAAK,CAAC+B,GAAD,CAA1B,CAAR,CAlBkC;;EAoBlCzb,IAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAA0D,GAAG,EAAI;EAChCY,MAAAA,KAAK,CAAC4M,KAAN,CAAYsK,KAAK,CAAC9X,GAAD,CAAjB,IAA0BY,KAAK,CAAC4M,KAAN,CAAYsK,KAAK,CAAC9X,GAAD,CAAjB,KAA2BA,GAArD;EACD,KAFD;EApBkC;;EAapC,OAAK,IAAI7F,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EAAA,UAA7BA,EAA6B;EAUrC;EACF,CAxBD;;EAyBA,mBAAc,GAAGwd,aAAjB;;EC1BA;EACA,UAAc,GAAG;;EAEf,sBAAoB,cAFL;;EAIf,cAAY,cAJG;EAKf,cAAY,cALG;EAMfI,EAAAA,EAAE,EAAE,cANW;EAOf,aAAW,cAPI;EAQfC,EAAAA,GAAG,EAAE,cARU;EASfC,EAAAA,EAAE,EAAE,MATW;EAUfC,EAAAA,EAAE,EAAE,MAVW;EAWfC,EAAAA,EAAE,EAAE,MAXW;EAYfC,EAAAA,EAAE,EAAE;EAZW,CAAjB;;ECDA;EACA;EAEA,WAAc,GAAG;EACfC,EAAAA,QAAQ,EAAE,SADK;EAEfC,EAAAA,IAAI,EAAE,OAFS;EAGfC,EAAAA,MAAM,EAAE,SAHO;EAIfC,EAAAA,OAAO,EAAE,QAJM;EAKfC,EAAAA,QAAQ,EAAE,UALK;EAMfC,EAAAA,OAAO,EAAE,UANM;EAOfC,EAAAA,QAAQ,EAAE,YAPK;EAQfC,EAAAA,OAAO,EAAE,UARM;EASfC,EAAAA,IAAI,EAAE,MATS;EAUfC,EAAAA,QAAQ,EAAE,SAVK;EAWfC,EAAAA,QAAQ,EAAE,UAXK;EAYfC,EAAAA,IAAI,EAAE,OAZS;EAafC,EAAAA,GAAG,EAAE,OAbU;EAcfC,EAAAA,MAAM,EAAE,OAdO;EAefC,EAAAA,OAAO,EAAE,UAfM;EAgBfC,EAAAA,KAAK,EAAE,UAhBQ;EAiBfC,EAAAA,MAAM,EAAE,UAjBO;EAkBfC,EAAAA,OAAO,EAAE,SAlBM;EAmBfC,EAAAA,MAAM,EAAE,SAnBO;EAoBfC,EAAAA,SAAS,EAAE,UApBI;EAqBfC,EAAAA,UAAU,EAAE,WArBG;EAsBfC,EAAAA,QAAQ,EAAE,WAtBK;EAuBfC,EAAAA,IAAI,EAAE,MAvBS;EAwBfC,EAAAA,SAAS,EAAE,WAxBI;EAyBfC,EAAAA,IAAI,EAAE,QAzBS;EA0BfC,EAAAA,OAAO,EAAE,WA1BM;EA2BfC,EAAAA,KAAK,EAAE,QA3BQ;EA4BfC,EAAAA,IAAI,EAAE,MA5BS;EA6BfC,EAAAA,OAAO,EAAE,UA7BM;EA8BfC,EAAAA,MAAM,EAAE,OA9BO;EA+BfC,EAAAA,KAAK,EAAE,QA/BQ;EAgCfC,EAAAA,KAAK,EAAE,OAhCQ;EAiCfC,EAAAA,IAAI,EAAE,OAjCS;EAkCfC,EAAAA,YAAY,EAAE,aAlCC;EAmCf/a,EAAAA,KAAK,EAAE,SAnCQ;EAoCfgb,EAAAA,KAAK,EAAE,QApCQ;EAqCfC,EAAAA,IAAI,EAAE,QArCS;EAsCfC,EAAAA,QAAQ,EAAE,UAtCK;EAuCfC,EAAAA,IAAI,EAAE,QAvCS;EAwCfC,EAAAA,GAAG,EAAE,KAxCU;EAyCfC,EAAAA,MAAM,EAAE,UAzCO;EA0CfC,EAAAA,UAAU,EAAE,WA1CG;EA2CfC,EAAAA,OAAO,EAAE,QA3CM;EA4CfC,EAAAA,QAAQ,EAAE,YA5CK;EA6CfC,EAAAA,KAAK,EAAE,MA7CQ;EA8CfC,EAAAA,IAAI,EAAE,OA9CS;EA+CfC,EAAAA,MAAM,EAAE,SA/CO;EAgDfC,EAAAA,OAAO,EAAE,QAhDM;EAiDfC,EAAAA,OAAO,EAAE,QAjDM;EAkDfC,EAAAA,IAAI,EAAE,OAlDS;EAmDfC,EAAAA,IAAI,EAAE,KAnDS;EAoDfC,EAAAA,EAAE,EAAE,MApDW;EAqDfC,EAAAA,WAAW,EAAE,aArDE;EAsDfC,EAAAA,MAAM,EAAE,QAtDO;EAuDfC,EAAAA,UAAU,EAAE,WAvDG;EAwDfC,EAAAA,SAAS,EAAE,WAxDI;EAyDfC,EAAAA,IAAI,EAAE,SAzDS;EA0DfC,EAAAA,MAAM,EAAE,OA1DO;EA2DfC,EAAAA,UAAU,EAAE,WA3DG;EA4DfC,EAAAA,KAAK,EAAE,QA5DQ;EA6DfC,EAAAA,GAAG,EAAE,OA7DU;EA8DfC,EAAAA,IAAI,EAAE,OA9DS;EA+DfC,EAAAA,QAAQ,EAAE,WA/DK;EAgEfC,EAAAA,QAAQ,EAAE,SAhEK;EAiEfC,EAAAA,OAAO,EAAE,UAjEM;EAkEfC,EAAAA,QAAQ,EAAE,SAlEK;EAmEfC,EAAAA,QAAQ,EAAE,UAnEK;EAoEfC,EAAAA,OAAO,EAAE,UApEM;EAqEfC,EAAAA,MAAM,EAAE,QArEO;EAsEfC,EAAAA,KAAK,EAAE,SAtEQ;EAuEfC,EAAAA,KAAK,EAAE,OAvEQ;EAwEfC,EAAAA,OAAO,EAAE,UAxEM;EAyEfC,EAAAA,MAAM,EAAE,SAzEO;EA0EfC,EAAAA,QAAQ,EAAE,WA1EK;;;EAAA,CAAjB;;ECHA;EACA;EACA;EAEA;EACA,IAAMC,OAAO,GAAG;EACd/hB,EAAAA,CAAC,EAAE,QADW;EAEdgiB,EAAAA,GAAG,EAAE,YAFS;EAGdC,EAAAA,IAAI,EAAE,cAHQ;EAIdC,EAAAA,GAAG,EAAE,WAJS;EAKdC,EAAAA,GAAG,EAAE,eALS;EAMdC,EAAAA,IAAI,EAAE,cANQ;EAOdC,EAAAA,OAAO,EAAE,YAPK;EAQd3iB,EAAAA,CAAC,EAAE;EARW,CAAhB;;EAYA,IAAI4iB,YAAY,GAAG;EACjBC,EAAAA,GAAG,EAAE;EACH7iB,IAAAA,CAAC,EAAE;EADA,GADY;EAIjB8iB,EAAAA,IAAI,EAAE;EACJN,IAAAA,GAAG,EAAE,OADD;EAEJliB,IAAAA,CAAC,EAAE;EAFC,GAJW;EAQjByiB,EAAAA,GAAG,EAAE;EACHziB,IAAAA,CAAC,EAAE,QADA;EAEHkiB,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GARY;EAajBM,EAAAA,GAAG,EAAE;EACHhjB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGHkiB,IAAAA,GAAG,EAAE;EAHF,GAbY;EAkBjBS,EAAAA,KAAK,EAAE;EACLX,IAAAA,GAAG,EAAE,IADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlBU;EAsBjBU,EAAAA,OAAO,EAAE;EACPljB,IAAAA,CAAC,EAAE,MADI;EAEPwiB,IAAAA,GAAG,EAAE;EAFE,GAtBQ;EA0BjBW,EAAAA,GAAG,EAAE;EACHnjB,IAAAA,CAAC,EAAE,EADA;EAEHM,IAAAA,CAAC,EAAE,OAFA;EAGHkiB,IAAAA,GAAG,EAAE;EAHF,GA1BY;EA+BjBY,EAAAA,EAAE,EAAE;EACFpjB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,IAFD;EAGFgiB,IAAAA,GAAG,EAAE,MAHH;EAIFE,IAAAA,GAAG,EAAE,KAJH;EAKFE,IAAAA,IAAI,EAAE;EALJ,GA/Ba;EAsCjBW,EAAAA,IAAI,EAAE;EACJrjB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJgiB,IAAAA,GAAG,EAAE;EAHD,GAtCW;EA2CjBgB,EAAAA,MAAM,EAAE;EACNhB,IAAAA,GAAG,EAAE;EADC,GA3CS;EA8CjBiB,EAAAA,KAAK,EAAE;EACLjjB,IAAAA,CAAC,EAAE,OADE;EAELgiB,IAAAA,GAAG,EAAE,OAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9CU;EAmDjBgB,EAAAA,KAAK,EAAE;EACLljB,IAAAA,CAAC,EAAE,KADE;EAELkiB,IAAAA,GAAG,EAAE,MAFA;EAGLE,IAAAA,IAAI,EAAE;EAHD,GAnDU;EAwDjBe,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GAxDW;EA2DjBoB,EAAAA,GAAG,EAAE;EACH1jB,IAAAA,CAAC,EAAE,MADA;EAEHsiB,IAAAA,GAAG,EAAE;EAFF,GA3DY;EA+DjBqB,EAAAA,IAAI,EAAE;EACJnB,IAAAA,GAAG,EAAE;EADD,GA/DW;EAkEjBoB,EAAAA,IAAI,EAAE;EACJtjB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,QAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GAlEW;EAuEjBqB,EAAAA,KAAK,EAAE;EACLvB,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvEU;EA2EjBsB,EAAAA,IAAI,EAAE;EACJxB,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA3EW;EA+EjBuB,EAAAA,IAAI,EAAE;EACJ/jB,IAAAA,CAAC,EAAE;EADC,GA/EW;EAkFjBgkB,EAAAA,KAAK,EAAE;EACL1B,IAAAA,GAAG,EAAE;EADA,GAlFU;EAqFjB,WAAO;EACLE,IAAAA,GAAG,EAAE;EADA,GArFU;EAwFjByB,EAAAA,KAAK,EAAE;EACLzB,IAAAA,GAAG,EAAE;EADA,GAxFU;EA2FjB0B,EAAAA,KAAK,EAAE;EACL5B,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA3FU;EA+FjB2B,EAAAA,SAAS,EAAE;EACT3B,IAAAA,GAAG,EAAE;EADI,GA/FM;EAkGjB4B,EAAAA,MAAM,EAAE;EACN5B,IAAAA,GAAG,EAAE;EADC,GAlGS;EAqGjBrH,EAAAA,KAAK,EAAE;EACLmH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GArGU;EAyGjB6B,EAAAA,IAAI,EAAE;EACJ/B,IAAAA,GAAG,EAAE;EADD,GAzGW;EA4GjBgC,EAAAA,KAAK,EAAE;EACLhC,IAAAA,GAAG,EAAE;EADA,GA5GU;EA+GjBiC,EAAAA,GAAG,EAAE;EACHjC,IAAAA,GAAG,EAAE,QADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA/GY;EAmHjBzO,EAAAA,GAAG,EAAE;EACH/T,IAAAA,CAAC,EAAE,EADA;EAEHyiB,IAAAA,GAAG,EAAE,GAFF;EAGHniB,IAAAA,CAAC,EAAE,EAHA;EAIHkiB,IAAAA,GAAG,EAAE,OAJF;EAKHD,IAAAA,IAAI,EAAE,OALH;EAMHI,IAAAA,OAAO,EAAE,OANN;EAOHD,IAAAA,IAAI,EAAE;EAPH,GAnHY;EA4HjB,WAAO;EACLF,IAAAA,GAAG,EAAE;EADA,GA5HU;EA+HjBgC,EAAAA,MAAM,EAAE;EACNlkB,IAAAA,CAAC,EAAE,UADG;EAENgiB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GA/HS;EAoIjBiC,EAAAA,KAAK,EAAE;EACLnC,IAAAA,GAAG,EAAE;EADA,GApIU;EAuIjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE,MAFD;EAGJliB,IAAAA,CAAC,EAAE;EAHC,GAvIW;EA4IjBqkB,EAAAA,OAAO,EAAE;EACP3kB,IAAAA,CAAC,EAAE,YADI;EAEPM,IAAAA,CAAC,EAAE,WAFI;EAGPkiB,IAAAA,GAAG,EAAE;EAHE,GA5IQ;EAiJjBoC,EAAAA,IAAI,EAAE;EACJpC,IAAAA,GAAG,EAAE;EADD,GAjJW;EAoJjBqC,EAAAA,KAAK,EAAE;EACLvC,IAAAA,GAAG,EAAE;EADA,GApJU;EAuJjBwC,EAAAA,GAAG,EAAE;EACHxC,IAAAA,GAAG,EAAE;EADF,GAvJY;EA0JjByC,EAAAA,IAAI,EAAE;EACJzC,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA1JW;EA8JjBwC,EAAAA,OAAO,EAAE;EACPhlB,IAAAA,CAAC,EAAE,KADI;EAEPM,IAAAA,CAAC,EAAE,MAFI;EAGPkiB,IAAAA,GAAG,EAAE;EAHE,GA9JQ;EAmKjByC,EAAAA,GAAG,EAAE;EACH3kB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAnKY;EAuKjB0C,EAAAA,GAAG,EAAE;EACH5kB,IAAAA,CAAC,EAAE,OADA;EAEHgiB,IAAAA,GAAG,EAAE,KAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAvKY;EA4KjB2C,EAAAA,IAAI,EAAE;EACJ7C,IAAAA,GAAG,EAAE;EADD,GA5KW;EA+KjB,QAAI;EACFE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,IAAI,EAAE;EAFJ,GA/Ka;EAmLjB0C,EAAAA,IAAI,EAAE;EACJ9C,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnLW;EAuLjB6C,EAAAA,KAAK,EAAE;EACL/C,IAAAA,GAAG,EAAE;EADA,GAvLU;EA0LjBgD,EAAAA,KAAK,EAAE;EACLhD,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1LU;EA8LjB+C,EAAAA,KAAK,EAAE;EACLjlB,IAAAA,CAAC,EAAE,SADE;EAELgiB,IAAAA,GAAG,EAAE,IAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA,GA9LU;EAmMjBgD,EAAAA,IAAI,EAAE;EACJllB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GAnMW;EAuMjBiD,EAAAA,GAAG,EAAE;EACHzlB,IAAAA,CAAC,EAAE,KADA;EAEHM,IAAAA,CAAC,EAAE,MAFA;EAGHgiB,IAAAA,GAAG,EAAE,KAHF;EAIHE,IAAAA,GAAG,EAAE;EAJF,GAvMY;EA6MjBkD,EAAAA,IAAI,EAAE;EACJplB,IAAAA,CAAC,EAAE;EADC,GA7MW;EAgNjBqlB,EAAAA,GAAG,EAAE;EACHnD,IAAAA,GAAG,EAAE;EADF,GAhNY;EAmNjBoD,EAAAA,IAAI,EAAE;EACJtD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAnNW;EAuNjBqD,EAAAA,IAAI,EAAE;EACJvD,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAvNW;EA2NjBsD,EAAAA,IAAI,EAAE;EACJ9lB,IAAAA,CAAC,EAAE,KADC;EAEJwiB,IAAAA,GAAG,EAAE;EAFD,GA3NW;EA+NjBuD,EAAAA,KAAK,EAAE;EACLzD,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA/NU;EAmOjB3T,EAAAA,IAAI,EAAE;EACJ2T,IAAAA,GAAG,EAAE;EADD,GAnOW;EAsOjBwD,EAAAA,IAAI,EAAE;EACJ1lB,IAAAA,CAAC,EAAE,MADC;EAEJgiB,IAAAA,GAAG,EAAE;EAFD,GAtOW;EA0OjB2D,EAAAA,KAAK,EAAE;EACL3D,IAAAA,GAAG,EAAE;EADA,GA1OU;EA6OjB4D,EAAAA,GAAG,EAAE;EACH5D,IAAAA,GAAG,EAAE,OADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA7OY;EAiPjB2D,EAAAA,MAAM,EAAE;EACN3D,IAAAA,GAAG,EAAE;EADC,GAjPS;EAoPjB4D,EAAAA,MAAM,EAAE;EACN9lB,IAAAA,CAAC,EAAE,MADG;EAENgiB,IAAAA,GAAG,EAAE,WAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GApPS;EAyPjB6D,EAAAA,OAAO,EAAE;EACP/lB,IAAAA,CAAC,EAAE,WADI;EAEPgiB,IAAAA,GAAG,EAAE,IAFE;EAGPE,IAAAA,GAAG,EAAE;EAHE,GAzPQ;EA8PjB8D,EAAAA,IAAI,EAAE;EACJtmB,IAAAA,CAAC,EAAE,EADC;EAEJM,IAAAA,CAAC,EAAE;EAFC,GA9PW;EAkQjBimB,EAAAA,MAAM,EAAE;EACNjmB,IAAAA,CAAC,EAAE,UADG;EAENgiB,IAAAA,GAAG,EAAE,QAFC;EAGNE,IAAAA,GAAG,EAAE;EAHC,GAlQS;EAuQjB3W,EAAAA,GAAG,EAAE;EACH2W,IAAAA,GAAG,EAAE,KADF;EAEHF,IAAAA,GAAG,EAAE;EAFF,GAvQY;EA2QjBkE,EAAAA,IAAI,EAAE;EACJlmB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,IAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GA3QW;EAgRjBiE,EAAAA,EAAE,EAAE;EACFnE,IAAAA,GAAG,EAAE,KADH;EAEFE,IAAAA,GAAG,EAAE,MAFH;EAGFE,IAAAA,IAAI,EAAE;EAHJ,GAhRa;EAqRjBgE,EAAAA,IAAI,EAAE;EACJpE,IAAAA,GAAG,EAAE;EADD,GArRW;EAwRjBqE,EAAAA,IAAI,EAAE;EACJrE,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAxRW;EA4RjBoE,EAAAA,IAAI,EAAE;EACJtmB,IAAAA,CAAC,EAAE,QADC;EAEJgiB,IAAAA,GAAG,EAAE,KAFD;EAGJE,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,IAAI,EAAE;EAJF,GA5RW;EAkSjBmE,EAAAA,IAAI,EAAE;EACJvE,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAlSW;EAsSjBsE,EAAAA,IAAI,EAAE;EACJxE,IAAAA,GAAG,EAAE,QADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAtSW;EA0SjBuE,EAAAA,GAAG,EAAE;EACHzE,IAAAA,GAAG,EAAE;EADF,GA1SY;EA6SjB0E,EAAAA,IAAI,EAAE;EACJ1E,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA7SW;EAiTjByE,EAAAA,IAAI,EAAE;EACJ3E,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjTW;EAqTjB0E,EAAAA,GAAG,EAAE;EACH5mB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GArTY;EAyTjB2E,EAAAA,KAAK,EAAE;EACL3E,IAAAA,GAAG,EAAE,SADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GAzTU;EA6TjB0E,EAAAA,EAAE,EAAE;EACFpnB,IAAAA,CAAC,EAAE,EADD;EAEFM,IAAAA,CAAC,EAAE,OAFD;EAGFkiB,IAAAA,GAAG,EAAE,KAHH;EAIFE,IAAAA,IAAI,EAAE;EAJJ,GA7Ta;EAmUjB2E,EAAAA,IAAI,EAAE;EACJ/E,IAAAA,GAAG,EAAE;EADD,GAnUW;EAsUjBgF,EAAAA,KAAK,EAAE;EACLhF,IAAAA,GAAG,EAAE;EADA,GAtUU;EAyUjBiF,EAAAA,IAAI,EAAE;EACJjF,IAAAA,GAAG,EAAE;EADD,GAzUW;EA4UjBkF,EAAAA,GAAG,EAAE;EACHlF,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GA5UY;EAgVjBiF,EAAAA,IAAI,EAAE;EACJnF,IAAAA,GAAG,EAAE,KADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhVW;EAoVjBkF,EAAAA,IAAI,EAAE;EACJpF,IAAAA,GAAG,EAAE;EADD,GApVW;EAuVjBqF,EAAAA,KAAK,EAAE;EACLrF,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAvVU;EA2VjBoF,EAAAA,IAAI,EAAE;EACJtF,IAAAA,GAAG,EAAE;EADD,GA3VW;EA8VjBuF,EAAAA,GAAG,EAAE;EACHvnB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA9VY;EAkWjBsF,EAAAA,KAAK,EAAE;EACLxF,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAlWU;EAsWjB1Y,EAAAA,GAAG,EAAE;EACHxJ,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAtWY;EA0WjBuF,EAAAA,KAAK,EAAE;EACLzF,IAAAA,GAAG,EAAE;EADA,GA1WU;EA6WjB0F,EAAAA,IAAI,EAAE;EACJ1nB,IAAAA,CAAC,EAAE,QADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GA7WW;EAiXjByF,EAAAA,IAAI,EAAE;EACJ3F,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAjXW;EAqXjB0F,EAAAA,IAAI,EAAE;EACJ5F,IAAAA,GAAG,EAAE,IADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArXW;EAyXjB2F,EAAAA,IAAI,EAAE;EACJnoB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJgiB,IAAAA,GAAG,EAAE,KAHD;EAIJE,IAAAA,GAAG,EAAE;EAJD,GAzXW;EA+XjB4F,EAAAA,IAAI,EAAE;EACJ1F,IAAAA,IAAI,EAAE;EADF,GA/XW;EAkYjB2F,EAAAA,IAAI,EAAE;EACJ/nB,IAAAA,CAAC,EAAE;EADC,GAlYW;EAqYjBgoB,EAAAA,GAAG,EAAE;EACHhG,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE;EAFF,GArYY;EAyYjB+F,EAAAA,KAAK,EAAE;EACLjG,IAAAA,GAAG,EAAE;EADA,GAzYU;EA4YjBkG,EAAAA,IAAI,EAAE;EACJloB,IAAAA,CAAC,EAAE;EADC,GA5YW;EA+YjBmoB,EAAAA,GAAG,EAAE;EACHnG,IAAAA,GAAG,EAAE;EADF,GA/YY;EAkZjBoG,EAAAA,IAAI,EAAE;EACJpG,IAAAA,GAAG,EAAE;EADD,GAlZW;EAqZjBqG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,GADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GArZW;EAyZjBoG,EAAAA,IAAI,EAAE;EACJtG,IAAAA,GAAG,EAAE;EADD,GAzZW;EA4ZjBuG,EAAAA,IAAI,EAAE;EACJvG,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GA5ZW;EAgajBsG,EAAAA,IAAI,EAAE;EACJrG,IAAAA,GAAG,EAAE,cADD;EAEJniB,IAAAA,CAAC,EAAE,QAFC;EAGJgiB,IAAAA,GAAG,EAAE,IAHD;EAIJE,IAAAA,GAAG,EAAE,MAJD;EAKJG,IAAAA,OAAO,EAAE;EALL,GAhaW;EAuajBoG,EAAAA,GAAG,EAAE;EACHzoB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GAvaY;EA2ajBwG,EAAAA,GAAG,EAAE;EACH1oB,IAAAA,CAAC,EAAE,OADA;EAEHgiB,IAAAA,GAAG,EAAE,GAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GA3aY;EAgbjByG,EAAAA,GAAG,EAAE;EACH3G,IAAAA,GAAG,EAAE,MADF;EAEHE,IAAAA,GAAG,EAAE,MAFF;EAGHE,IAAAA,IAAI,EAAE;EAHH,GAhbY;EAqbjBwG,EAAAA,IAAI,EAAE;EACJ5G,IAAAA,GAAG,EAAE;EADD,GArbW;EAwbjB6G,EAAAA,GAAG,EAAE;EACH7oB,IAAAA,CAAC,EAAE,MADA;EAEHgiB,IAAAA,GAAG,EAAE,IAFF;EAGHE,IAAAA,GAAG,EAAE;EAHF,GAxbY;EA6bjB4G,EAAAA,IAAI,EAAE;EACJ9G,IAAAA,GAAG,EAAE;EADD,GA7bW;EAgcjB+G,EAAAA,IAAI,EAAE;EACJ/G,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAhcW;EAocjB8G,EAAAA,IAAI,EAAE;EACJhH,IAAAA,GAAG,EAAE;EADD,GApcW;EAucjBvT,EAAAA,GAAG,EAAE;EACHuT,IAAAA,GAAG,EAAE;EADF,GAvcY;EA0cjBiH,EAAAA,GAAG,EAAE;EACHjH,IAAAA,GAAG,EAAE;EADF,GA1cY;EA6cjBkH,EAAAA,KAAK,EAAE;EACLlH,IAAAA,GAAG,EAAE;EADA,GA7cU;EAgdjBmH,EAAAA,KAAK,EAAE;EACLnH,IAAAA,GAAG,EAAE;EADA,GAhdU;EAmdjBoH,EAAAA,IAAI,EAAE;EACJppB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE,GAFD;EAGJE,IAAAA,IAAI,EAAE;EAHF,GAndW;EAwdjBiH,EAAAA,KAAK,EAAE;EACLrH,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAxdU;EA4djBoH,EAAAA,KAAK,EAAE;EACLtH,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA5dU;EAgejBqH,EAAAA,IAAI,EAAE;EACJrH,IAAAA,GAAG,EAAE;EADD,GAheW;EAmejBsH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE;EADD,GAneW;EAsejByH,EAAAA,IAAI,EAAE;EACJzH,IAAAA,GAAG,EAAE,MADD;EAEJE,IAAAA,GAAG,EAAE;EAFD,GAteW;EA0ejBwH,EAAAA,IAAI,EAAE;EACJxH,IAAAA,GAAG,EAAE,MADD;EAEJG,IAAAA,OAAO,EAAE;EAFL,GA1eW;EA8ejBsH,EAAAA,GAAG,EAAE;EACHzH,IAAAA,GAAG,EAAE;EADF,GA9eY;EAifjB0H,EAAAA,GAAG,EAAE;EACH1H,IAAAA,GAAG,EAAE;EADF,GAjfY;EAofjB2H,EAAAA,IAAI,EAAE;EACJ7H,IAAAA,GAAG,EAAE;EADD,GApfW;EAufjB8H,EAAAA,KAAK,EAAE;EACL9H,IAAAA,GAAG,EAAE;EADA,GAvfU;EA0fjB+H,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,MADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GA1fU;EA8fjB8H,EAAAA,KAAK,EAAE;EACL5H,IAAAA,IAAI,EAAE;EADD,GA9fU;EAigBjB6H,EAAAA,KAAK,EAAE;EACLjI,IAAAA,GAAG,EAAE;EADA,GAjgBU;EAogBjBkI,EAAAA,KAAK,EAAE;EACL/H,IAAAA,GAAG,EAAE,kBADA;EAELH,IAAAA,GAAG,EAAE,QAFA;EAGLE,IAAAA,GAAG,EAAE,OAHA;EAILD,IAAAA,IAAI,EAAE,aAJD;EAKLI,IAAAA,OAAO,EAAE;EALJ,GApgBU;EA2gBjB8H,EAAAA,KAAK,EAAE;EACLnI,IAAAA,GAAG,EAAE;EADA,GA3gBU;EA8gBjBoI,EAAAA,KAAK,EAAE;EACLpI,IAAAA,GAAG,EAAE;EADA,GA9gBU;EAihBjBqI,EAAAA,KAAK,EAAE;EACLrI,IAAAA,GAAG,EAAE,KADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAjhBU;EAqhBjBoI,EAAAA,IAAI,EAAE;EACJtqB,IAAAA,CAAC,EAAE,OADC;EAEJgiB,IAAAA,GAAG,EAAE,MAFD;EAGJE,IAAAA,GAAG,EAAE;EAHD,GArhBW;EA0hBjBqI,EAAAA,IAAI,EAAE;EACJvI,IAAAA,GAAG,EAAE;EADD,GA1hBW;EA6hBjBhjB,EAAAA,KAAK,EAAE;EACLgjB,IAAAA,GAAG,EAAE;EADA,GA7hBU;EAgiBjBwI,EAAAA,MAAM,EAAE;EACNtI,IAAAA,GAAG,EAAE;EADC,GAhiBS;EAmiBjBuI,EAAAA,MAAM,EAAE;EACNzI,IAAAA,GAAG,EAAE;EADC,GAniBS;EAsiBjB0I,EAAAA,KAAK,EAAE;EACLxI,IAAAA,GAAG,EAAE;EADA,GAtiBU;EAyiBjByI,EAAAA,KAAK,EAAE;EACLjrB,IAAAA,CAAC,EAAE,KADE;EAELwiB,IAAAA,GAAG,EAAE;EAFA,GAziBU;EA6iBjB0I,EAAAA,KAAK,EAAE;EACL1I,IAAAA,GAAG,EAAE;EADA,GA7iBU;EAgjBjB2I,EAAAA,KAAK,EAAE;EACL3I,IAAAA,GAAG,EAAE;EADA,GAhjBU;EAmjBjB4I,EAAAA,KAAK,EAAE;EACL9I,IAAAA,GAAG,EAAE,OADA;EAELE,IAAAA,GAAG,EAAE;EAFA,GAnjBU;EAujBjB6I,EAAAA,MAAM,EAAE;EACNrrB,IAAAA,CAAC,EAAE;EADG,GAvjBS;EA0jBjBsrB,EAAAA,KAAK,EAAE;EACLhJ,IAAAA,GAAG,EAAE;EADA,GA1jBU;EA6jBjBiJ,EAAAA,MAAM,EAAE;EACNjrB,IAAAA,CAAC,EAAE,UADG;EAENkiB,IAAAA,GAAG,EAAE;EAFC,GA7jBS;EAikBjBgJ,EAAAA,IAAI,EAAE;EACJxrB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJkiB,IAAAA,GAAG,EAAE;EAHD,GAjkBW;EAskBjBiJ,EAAAA,KAAK,EAAE;EACLnJ,IAAAA,GAAG,EAAE;EADA,GAtkBU;EAykBjBoJ,EAAAA,KAAK,EAAE;EACLlJ,IAAAA,GAAG,EAAE;EADA,GAzkBU;EA4kBjBmJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GA5kBU;EA+kBjBsJ,EAAAA,IAAI,EAAE;EACJtrB,IAAAA,CAAC,EAAE,OADC;EAEJkiB,IAAAA,GAAG,EAAE;EAFD,GA/kBW;EAmlBjBqJ,EAAAA,KAAK,EAAE;EACLrJ,IAAAA,GAAG,EAAE;EADA,GAnlBU;EAslBjBsJ,EAAAA,IAAI,EAAE;EACJrJ,IAAAA,GAAG,EAAE,cADD;EAEJD,IAAAA,GAAG,EAAE,MAFD;EAGJD,IAAAA,IAAI,EAAE,SAHF;EAIJI,IAAAA,OAAO,EAAE;EAJL,GAtlBW;EA4lBjBoJ,EAAAA,KAAK,EAAE;EACLvJ,IAAAA,GAAG,EAAE,QADA;EAELE,IAAAA,IAAI,EAAE;EAFD,GA5lBU;EAgmBjBsJ,EAAAA,IAAI,EAAE;EACJxJ,IAAAA,GAAG,EAAE;EADD,GAhmBW;EAmmBjByJ,EAAAA,IAAI,EAAE;EACJzJ,IAAAA,GAAG,EAAE;EADD,GAnmBW;EAsmBjB0J,EAAAA,KAAK,EAAE;EACL1J,IAAAA,GAAG,EAAE;EADA,GAtmBU;EAymBjB2J,EAAAA,MAAM,EAAE;EACN7J,IAAAA,GAAG,EAAE;EADC,GAzmBS;EA4mBjB8J,EAAAA,GAAG,EAAE;EACH9rB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA5mBY;EAgnBjB6J,EAAAA,OAAO,EAAE;EACP/J,IAAAA,GAAG,EAAE;EADE,GAhnBQ;EAmnBjBgK,EAAAA,UAAU,EAAE;EACV9J,IAAAA,GAAG,EAAE;EADK,GAnnBK;EAsnBjB+J,EAAAA,KAAK,EAAE;EACLjK,IAAAA,GAAG,EAAE;EADA,GAtnBU;EAynBjBkK,EAAAA,IAAI,EAAE;EACJxsB,IAAAA,CAAC,EAAE,KADC;EAEJM,IAAAA,CAAC,EAAE,MAFC;EAGJkiB,IAAAA,GAAG,EAAE;EAHD,GAznBW;EA8nBjBiK,EAAAA,IAAI,EAAE;EACJjK,IAAAA,GAAG,EAAE;EADD,GA9nBW;EAioBjBkK,EAAAA,IAAI,EAAE;EACJlK,IAAAA,GAAG,EAAE;EADD,GAjoBW;EAooBjBmK,EAAAA,KAAK,EAAE;EACLrK,IAAAA,GAAG,EAAE;EADA,GApoBU;EAuoBjBsK,EAAAA,GAAG,EAAE;EACHpK,IAAAA,GAAG,EAAE;EADF,GAvoBY;EA0oBjBqK,EAAAA,IAAI,EAAE;EACJvK,IAAAA,GAAG,EAAE;EADD,GA1oBW;EA6oBjBwK,EAAAA,GAAG,EAAE;EACHxsB,IAAAA,CAAC,EAAE,OADA;EAEHkiB,IAAAA,GAAG,EAAE;EAFF,GA7oBY;EAipBjBuK,EAAAA,IAAI,EAAE;EACJzK,IAAAA,GAAG,EAAE;EADD,GAjpBW;EAopBjB0K,EAAAA,QAAQ,EAAE;EACRxK,IAAAA,GAAG,EAAE;EADG,GAppBO;EAupBjByK,EAAAA,KAAK,EAAE;EACL3K,IAAAA,GAAG,EAAE;EADA,GAvpBU;EA0pBjB4K,EAAAA,KAAK,EAAE;EACL5sB,IAAAA,CAAC,EAAE,SADE;EAELgiB,IAAAA,GAAG,EAAE,SAFA;EAGLE,IAAAA,GAAG,EAAE;EAHA;EA1pBU,CAAnB;;EAkqBA,IAAI5gB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYghB,YAAZ,CAAX;;6BACSljB;EACP,MAAM0d,GAAG,GAAGxb,IAAI,CAAClC,CAAD,CAAhB;EACA,MAAIytB,MAAK,GAAG,EAAZ;EACAxrB,EAAAA,MAAM,CAACC,IAAP,CAAYghB,YAAY,CAACxF,GAAD,CAAxB,EAA+Bvb,OAA/B,CAAuC,UAAAgZ,GAAG,EAAI;EAC5C,QAAIrb,GAAG,GAAGojB,YAAY,CAACxF,GAAD,CAAZ,CAAkBvC,GAAlB,CAAV,CAD4C;;EAG5Crb,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,GAAZ,EAAiBya,GAAjB,CAAN;EAEA,QAAIgQ,IAAI,GAAG/K,OAAO,CAACxH,GAAD,CAAlB;EACAsS,IAAAA,MAAK,CAACC,IAAD,CAAL,GAAc5tB,GAAd;EACD,GAPD;;EASAojB,EAAAA,YAAY,CAACxF,GAAD,CAAZ,GAAoB+P,MAApB;;;EAZF,KAAK,IAAIztB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EAAA,QAA7BA,CAA6B;EAarC;;EAED,kBAAc,GAAGkjB,YAAjB;;ECnsBA,IAAMyK,QAAQ,GAAG;EACfptB,EAAAA,CAAC,EAAE,CACD;EACE4E,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CADY;EAWfttB,EAAAA,CAAC,EAAE,CACD;EACE0E,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;EACE7oB,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJE,MAAAA,EAAE,EAAE,OAHA;EAIJD,MAAAA,EAAE,EAAE;EAJA;EAFR,GAnBC,EA4BD;EACE5oB,IAAAA,GAAG,EAAE,mBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA5BC,CAXY;EAgDfrtB,EAAAA,CAAC,EAAE,CACD;EACEyE,IAAAA,GAAG,EAAE,UADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GAVC,EAmBD;;EAEE7oB,IAAAA,GAAG,EAAE,gBAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAnBC,EA6BD;;EAEE7oB,IAAAA,GAAG,EAAE,UAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GA7BC,EAuCD;;EAEE7oB,IAAAA,GAAG,EAAE,UAFP;EAGEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,QAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAHR,GAvCC,EAiDD;EACE7oB,IAAAA,GAAG,EAAE,8BADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;;EAAA;EAFR,GAjDC,EA0DD;EACE5oB,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GA1DC,EAkED;EACE5oB,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlEC,CAhDY;EA4HfntB,EAAAA,CAAC,EAAE,CACD;EACEuE,IAAAA,GAAG,EAAE,mBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5HY;EAsIfltB,EAAAA,CAAC,EAAE,CACD;EACEsE,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,QADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAtIY;EAgJf/sB,EAAAA,CAAC,EAAE,CACD;EACEmE,IAAAA,GAAG,EAAE,SADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE,OAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,CAhJY;EA4Jf9sB,EAAAA,CAAC,EAAE,CACD;EACEiE,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA5JY;EAuKf5sB,EAAAA,CAAC,EAAE,CACD;EACEgE,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAvKY;EAiLf1sB,EAAAA,CAAC,EAAE,CACD;EACE8D,IAAAA,GAAG,EAAE,WADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJC,MAAAA,EAAE,EAAE;EAJA;EAFR,GADC,EAUD;EACE7oB,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAVC,EAkBD;EACE5oB,IAAAA,GAAG,EAAE,aADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAlBC,CAjLY;EA6MfxsB,EAAAA,CAAC,EAAE,CACD;EACE4D,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACE5oB,IAAAA,GAAG,EAAE,QADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,CA7MY;EA+NfvsB,EAAAA,CAAC,EAAE,CACD;EACE2D,IAAAA,GAAG,EAAE,iBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CA/NY;EA0OftsB,EAAAA,CAAC,EAAE,CACD;EACE0D,IAAAA,GAAG,EAAE,oBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,EASD;EACE5oB,IAAAA,GAAG,EAAE,UADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,KADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GATC,EAiBD;EACE5oB,IAAAA,GAAG,EAAE,aADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,KAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAjBC,EAyBD;EACE5oB,IAAAA,GAAG,EAAE,sBADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,QAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GAzBC,CA1OY;EA6QfnsB,EAAAA,CAAC,EAAE,CACD;EACEuD,IAAAA,GAAG,EAAE,YADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE,SAHA;EAIJnL,MAAAA,GAAG,EAAE;EAJD;EAFR,GADC,CA7QY;EAwRf9gB,EAAAA,CAAC,EAAE,CACD;EACEqD,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,OADA;EAEJC,MAAAA,EAAE,EAAE,OAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC,CAxRY;EAmSfhsB,EAAAA,CAAC,EAAE,CACD;EACEoD,IAAAA,GAAG,EAAE,eADP;EAEEyoB,IAAAA,IAAI,EAAE;EACJC,MAAAA,EAAE,EAAE,MADA;EAEJC,MAAAA,EAAE,EAAE,MAFA;EAGJC,MAAAA,EAAE,EAAE;EAHA;EAFR,GADC;EAnSY,CAAjB;EA+SA,YAAc,GAAGJ,QAAjB;;EC9SA,IAAMM,MAAM,GAAG;EACbJ,EAAAA,EAAE,EAAE,cADS;EAEbC,EAAAA,EAAE,EAAE,WAFS;EAGbC,EAAAA,EAAE,EAAE,QAHS;EAIbnL,EAAAA,GAAG,EAAE,YAJQ;EAKboL,EAAAA,EAAE,EAAE;EALS,CAAf;;EAQA,IAAME,WAAW,GAAG,SAAdA,WAAc,CAASpuB,GAAT,EAAc4L,GAAd,EAAmB;EACrC,MAAI/H,KAAK,GAAG,EAAZ;EACA,MAAIzB,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYwJ,GAAG,CAACkiB,IAAhB,CAAX;;EACA,OAAK,IAAI5tB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,QAAImuB,GAAG,GAAGjsB,IAAI,CAAClC,CAAD,CAAd;EACA2D,IAAAA,KAAK,CAACsqB,MAAM,CAACE,GAAD,CAAP,CAAL,GAAqBruB,GAAG,CAACmD,OAAJ,CAAYyI,GAAG,CAACvG,GAAhB,EAAqBuG,GAAG,CAACkiB,IAAJ,CAASO,GAAT,CAArB,CAArB;EACD;;EACD,SAAOxqB,KAAP;EACD,CARD;;;EAWA,IAAMyqB,WAAW,GAAG,SAAdA,WAAc,GAAmB;EAAA,MAAVtuB,GAAU,uEAAJ,EAAI;EACrC,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAIiuB,QAAQ,CAAC3oB,cAAT,CAAwBlF,CAAxB,MAA+B,IAAnC,EAAyC;EACvC,SAAK,IAAIe,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8sB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYJ,MAAhC,EAAwCmB,CAAC,IAAI,CAA7C,EAAgD;EAC9C,UAAM4D,GAAG,GAAGkpB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYe,CAAZ,EAAe4D,GAA3B;;EACA,UAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAOouB,WAAW,CAACpuB,GAAD,EAAMuuB,QAAQ,CAAC7tB,CAAD,CAAR,CAAYe,CAAZ,CAAN,CAAlB;EACD;EACF;EACF;;EACD,SAAO,EAAP;EACD,CAXD;;EAYA,eAAc,GAAG6sB,WAAjB;;EChCA;EACA,IAAME,IAAI,GAAG,0BAAb;EAEA,IAAMC,OAAO,GAAG;EACdpnB,EAAAA,MAAM,EAAE,gBAAAuW,GAAG,EAAI;EACb,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,CAACza,OAAJ,CAAY,IAAZ,EAAkB,KAAlB,CAAP;EACD;;EACD,WAAOya,GAAG,GAAG,KAAb;EACD,GANa;EAQdtW,EAAAA,YAAY,EAAE,sBAAAsW,GAAG,EAAI;EACnB,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,GAAG,IAAb;EACD;;EACD,QAAI4Q,IAAI,CAAC3rB,IAAL,CAAU+a,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC/N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO+N,GAAG,GAAG,GAAb;EACD,GAhBa;EAkBdxW,EAAAA,SAAS,EAAE,mBAAAwW,GAAG,EAAI;EAChB,QAAIA,GAAG,CAAClT,MAAJ,CAAWkT,GAAG,CAACtd,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,aAAOsd,GAAG,GAAG,GAAb;EACD;;EACD,QAAIA,GAAG,CAACjT,MAAJ,CAAW,CAAC,CAAZ,MAAmB,IAAvB,EAA6B;EAC3B,aAAOiT,GAAP;EACD;;EACD,QAAI4Q,IAAI,CAAC3rB,IAAL,CAAU+a,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,aAAOA,GAAG,CAAC/N,KAAJ,CAAU,CAAV,EAAa,CAAC,CAAd,IAAmB,KAA1B;EACD;;EACD,WAAO+N,GAAG,GAAG,IAAb;EACD;EA7Ba,CAAhB;EAgCA,cAAc,GAAG6Q,OAAjB;;EC/BA;;EACA,IAAMjR,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBI,GAAiB,uEAAX,EAAW;EAAA,MAAPjX,KAAO;EAC1C,MAAI9C,KAAK,GAAG,EAAZ,CAD0C;;;EAI1C,MAAI8C,KAAK,IAAIA,KAAK,CAACgX,UAAnB,EAA+B;EAC7B,QAAIhX,KAAK,CAACgX,UAAN,CAAiB9B,KAAjB,CAAuBjW,cAAvB,CAAsCgY,GAAtC,MAA+C,IAAnD,EAAyD;EACvD/Z,MAAAA,KAAK,GAAG1B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB7C,KAAK,CAACgX,UAAN,CAAiB9B,KAAjB,CAAuB+B,GAAvB,CAAlB,CAAR;EACD;EACF,GARyC;;;EAU1C/Z,EAAAA,KAAK,GAAG1B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB8kB,WAAW,CAAC1Q,GAAD,CAA7B,EAAoC/Z,KAApC,CAAR,CAV0C;;;EAc1C,MAAIA,KAAK,CAACwD,MAAN,KAAiB1B,SAArB,EAAgC;EAC9B9B,IAAAA,KAAK,CAACwD,MAAN,GAAeqnB,UAAW,CAACrnB,MAAZ,CAAmBuW,GAAnB,CAAf;EACD,GAhByC;;;EAkB1C,MAAI/Z,KAAK,CAACuD,SAAN,KAAoBzB,SAAxB,EAAmC;EACjC9B,IAAAA,KAAK,CAACuD,SAAN,GAAkBsnB,UAAW,CAACtnB,SAAZ,CAAsBwW,GAAtB,CAAlB;EACD,GApByC;;;EAsB1C,MAAI/Z,KAAK,CAACyD,YAAN,KAAuB3B,SAA3B,EAAsC;EACpC9B,IAAAA,KAAK,CAACyD,YAAN,GAAqBonB,UAAW,CAACpnB,YAAZ,CAAyBsW,GAAzB,CAArB;EACD;;EACD,SAAO/Z,KAAP;EACD,CA1BD;;EA2BA,eAAc,GAAG2Z,SAAjB;;EChCA;EACA,IAAMmR,QAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,OAApE,CAAjB;EACA,IAAMC,UAAU,GAAG,CAAC,MAAD,CAAnB;EAEA,IAAMjR,UAAU,GAAG;EACjBkR,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,IAAI,EAAE,SAHW;EAIjBC,EAAAA,KAAK,EAAE,WAJU;EAKjBC,EAAAA,KAAK,EAAE,WALU;EAMjBC,EAAAA,GAAG,EAAE,UANY;EAOjBC,EAAAA,KAAK,EAAE,OAPU;EAQjBC,EAAAA,GAAG,EAAE,OARY;EASjBC,EAAAA,IAAI,EAAE,MATW;EAUjBC,EAAAA,GAAG,EAAE,SAVY;EAWjBC,EAAAA,KAAK,EAAE;EAXU,CAAnB;EAcA,IAAM1oB,UAAU,GAAG,CACjB;EACExB,EAAAA,GAAG,EAAE,KADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEzoB,EAAAA,GAAG,EAAE,OADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,EAiBjB;EACEzoB,EAAAA,GAAG,EAAE,eADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAjBiB,CAAnB;;EAuBA,IAAM0B,cAAc,GAAG,SAAjBA,cAAiB,CAASxvB,GAAT,EAAc;;EAEnC,MAAI2d,UAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,UAAU,CAAC3d,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2G,UAAU,CAACvG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI2G,UAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,CAAJ,EAAiC;EAC/B,aAAOA,GAAG,CAACmD,OAAJ,CAAY0D,UAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BwB,UAAU,CAAC3G,CAAD,CAAV,CAAc4tB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAI5tB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG0uB,UAAU,CAACtuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAI0uB,UAAU,CAAC1uB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGyuB,QAAQ,CAACruB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAIyuB,QAAQ,CAACzuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,UAAIA,GAAG,CAAC0K,MAAJ,CAAW1K,GAAG,CAACM,MAAJ,GAAa,CAAxB,MAA+B,GAAnC,EAAwC;EACtC,eAAON,GAAG,GAAG,IAAb;EACD;;EACD,aAAOA,GAAG,GAAG,KAAb;EACD;EACF;;EACD,SAAOA,GAAG,GAAG,KAAb;EACD,CA3BD;;EA6BA,iBAAc,GAAGwvB,cAAjB;;ECtEA;EACA,IAAMb,UAAQ,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,OAAjB,EAA0B,MAA1B,EAAkC,MAAlC,EAA0C,SAA1C,EAAqD,KAArD,EAA4D,MAA5D,EAAoE,MAApE,EAA4E,SAA5E,CAAjB;EACA,IAAMC,YAAU,GAAG,CAAC,MAAD,EAAS,MAAT,CAAnB;EAEA,IAAMjR,YAAU,GAAG;EACjB8R,EAAAA,IAAI,EAAE,QADW;EAEjBC,EAAAA,IAAI,EAAE,QAFW;EAGjBC,EAAAA,KAAK,EAAE,SAHU;EAIjBC,EAAAA,MAAM,EAAE,UAJS;EAKjBC,EAAAA,GAAG,EAAE,QALY;EAMjBR,EAAAA,IAAI,EAAE,QANW;EAOjBS,EAAAA,IAAI,EAAE,QAPW;EAQjBV,EAAAA,GAAG,EAAE,OARY;EASjBW,EAAAA,GAAG,EAAE,QATY;EAUjBT,EAAAA,GAAG,EAAE;EAVY,CAAnB;EAaA,IAAMzoB,YAAU,GAAG,CACjB;EACExB,EAAAA,GAAG,EAAE,KADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CADiB,EAKjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CALiB,EASjB;EACEzoB,EAAAA,GAAG,EAAE,cADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CATiB,EAajB;EACEzoB,EAAAA,GAAG,EAAE,OADP;EAEEyoB,EAAAA,IAAI,EAAE;EAFR,CAbiB,CAAnB;;EAmBA,IAAMkC,cAAc,GAAG,SAAjBA,cAAiB,CAAShwB,GAAT,EAAc;;EAEnC,MAAI2d,YAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,YAAU,CAAC3d,GAAD,CAAjB;EACD,GAJkC;;;EAMnC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG2G,YAAU,CAACvG,MAA/B,EAAuCJ,CAAC,EAAxC,EAA4C;EAC1C,QAAI2G,YAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAAd,CAAkBxC,IAAlB,CAAuB7C,GAAvB,MAAgC,IAApC,EAA0C;EACxC,aAAOA,GAAG,CAACmD,OAAJ,CAAY0D,YAAU,CAAC3G,CAAD,CAAV,CAAcmF,GAA1B,EAA+BwB,YAAU,CAAC3G,CAAD,CAAV,CAAc4tB,IAA7C,CAAP;EACD;EACF,GAVkC;;;EAYnC,OAAK,IAAI5tB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG0uB,YAAU,CAACtuB,MAA/B,EAAuCJ,EAAC,EAAxC,EAA4C;EAC1C,QAAI0uB,YAAU,CAAC1uB,EAAD,CAAV,CAAc2C,IAAd,CAAmB7C,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,IAAP;EACD;EACF,GAhBkC;;;EAkBnC,OAAK,IAAIE,GAAC,GAAG,CAAb,EAAgBA,GAAC,GAAGyuB,UAAQ,CAACruB,MAA7B,EAAqCJ,GAAC,EAAtC,EAA0C;EACxC,QAAIyuB,UAAQ,CAACzuB,GAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClC,aAAOA,GAAG,GAAG,IAAb;EACD;EACF,GAtBkC;;;EAwBnC,MAAI,KAAK6C,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAOA,GAAG,GAAG,GAAb;EACD;;EACD,SAAOA,GAAG,GAAG,IAAb;EACD,CA5BD;;EA8BA,iBAAc,GAAGgwB,cAAjB;;EClEA,IAAMllB,KAAG,GAAG;EACVmlB,EAAAA,aAAa,EAAExmB,aADL;EAEVymB,EAAAA,aAAa,EAAExmB;EAFL,CAAZ;EAKA;;EACA,IAAM8T,WAAS,GAAG,SAAZA,SAAY,CAAS1b,CAAT,EAAY;EAC5B,MAAIgO,GAAG,GAAG,EAAV,CAD4B;;EAG5B,MAAIqgB,GAAG,GAAGrlB,KAAG,CAACmlB,aAAJ,CAAkBnuB,CAAlB,CAAV;;EACA,MAAIquB,GAAJ,EAAS;EACPrgB,IAAAA,GAAG,CAAC6J,WAAJ,GAAkBwW,GAAlB;EACD,GAN2B;;;EAQ5B,MAAIC,IAAI,GAAGtlB,KAAG,CAAColB,aAAJ,CAAkBpuB,CAAlB,CAAX;;EACA,MAAIsuB,IAAJ,EAAU;EACRtgB,IAAAA,GAAG,CAAC4J,WAAJ,GAAkB0W,IAAlB;EACD;;EACD,SAAOtgB,GAAP;EACD,CAbD;;EAcA,cAAc,GAAG0N,WAAjB;;ECpBA;EACA,IAAM+Q,UAAQ,GAAG;EACf/tB,EAAAA,CAAC,EAAE,CAAC,CAAC,sCAAD,EAAyC,MAAzC,CAAD,EAAmD,CAAC,WAAD,EAAc,KAAd,CAAnD,CADY;EAGfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,QAAlB,CADC,EAED,CAAC,UAAD,EAAa,KAAb,CAFC,EAGD,CAAC,eAAD,EAAkB,OAAlB,CAHC,EAID,CAAC,cAAD,EAAiB,OAAjB,CAJC,CAHY;EAUfC,EAAAA,CAAC,EAAE,CACD,CAAC,sCAAD,EAAyC,OAAzC,CADC,EAED,CAAC,kEAAD,EAAqE,OAArE,CAFC,CAVY;EAefX,EAAAA,CAAC,EAAE,CAAC,CAAC,gBAAD,EAAmB,KAAnB,CAAD,CAfY;EAiBfkB,EAAAA,CAAC,EAAE,CAAC,CAAC,YAAD,EAAe,KAAf,CAAD,CAjBY;EAmBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,WAAD,EAAc,IAAd,CAAD,CAnBY;EAqBfC,EAAAA,CAAC,EAAE,CAAC,CAAC,2BAAD,EAA8B,OAA9B,CAAD,CArBY;EAuBfI,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB,MAAlB,CADC,EAED,CAAC,kBAAD,EAAqB,MAArB,CAFC,EAGD,CAAC,OAAD,EAAU,KAAV,CAHC,EAID,CAAC,SAAD,EAAY,OAAZ,CAJC,EAKD,CAAC,SAAD,EAAY,KAAZ,CALC,EAMD,CAAC,0BAAD,EAA6B,OAA7B,CANC,EAOD,CAAC,6CAAD,EAAgD,KAAhD,CAPC,CAvBY;EAiCfK,EAAAA,CAAC,EAAE,CAAC,CAAC,+BAAD,EAAkC,QAAlC,CAAD,EAA8C,CAAC,SAAD,EAAY,MAAZ,CAA9C,CAjCY;EAmCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD,CAnCY;EAqCfC,EAAAA,CAAC,EAAE,CAAC,CAAC,UAAD,EAAa,OAAb,CAAD;EArCY,CAAjB;EAwCA,UAAc,GAAGssB,UAAjB;;ECxCA,IAAM8B,IAAI,GAAG,gBAAb;;EAEA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAStwB,GAAT,EAAc;EAC9B,MAAIU,CAAC,GAAGV,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAX;;EACA,MAAIiwB,MAAK,CAAC3qB,cAAN,CAAqBlF,CAArB,MAA4B,IAAhC,EAAsC;EACpC,SAAK,IAAIR,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqwB,MAAK,CAAC7vB,CAAD,CAAL,CAASJ,MAA7B,EAAqCJ,CAAC,IAAI,CAA1C,EAA6C;EAC3C,UAAImF,GAAG,GAAGkrB,MAAK,CAAC7vB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAV;;EACA,UAAImF,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,MAAkB,IAAtB,EAA4B;EAC1B,eAAOA,GAAG,CAACmD,OAAJ,CAAYkC,GAAZ,EAAiBkrB,MAAK,CAAC7vB,CAAD,CAAL,CAASR,CAAT,EAAY,CAAZ,CAAjB,CAAP;EACD;EACF;EACF;;EACD,SAAO,IAAP;EACD,CAXD;EAaA;;;;;EAGA,IAAMswB,SAAS,GAAG,SAAZA,SAAY,GAA0B;EAAA,MAAjBxwB,GAAiB,uEAAX,EAAW;EAAA,MAAP2G,KAAO;EAC1C,MAAIgX,UAAU,GAAGhX,KAAK,CAACgX,UAAN,CAAiB/B,KAAlC,CAD0C;;EAI1C,MAAI+B,UAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,UAAU,CAAC3d,GAAD,CAAjB;EACD,GANyC;;;EAS1C,MAAIqd,MAAM,GAAGiT,SAAS,CAACtwB,GAAD,CAAtB;;EACA,MAAIqd,MAAM,KAAK,IAAf,EAAqB;EACnB,WAAOA,MAAP;EACD,GAZyC;;;EAc1C,MAAIgT,IAAI,CAACxtB,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClB,WAAOA,GAAG,GAAG,IAAb;EACD,GAhByC;;;EAkB1C,SAAOA,GAAG,GAAG,GAAb;EACD,CAnBD;;EAoBA,YAAc,GAAGwwB,SAAjB;;ECvCA;EACA,YAAc,GAAG,CACf,CAAC,aAAD,EAAgB,KAAhB,CADe,EAEf,CAAC,QAAD,EAAW,MAAX,CAFe,EAGf,CAAC,oBAAD,EAAuB,OAAvB,CAHe,EAIf,CAAC,oEAAD,EAAuE,KAAvE,CAJe,EAKf,CAAC,wCAAD,EAA2C,KAA3C,CALe,EAMf,CAAC,uCAAD,EAA0C,KAA1C,CANe,EAOf,CAAC,8CAAD,EAAiD,MAAjD,CAPe,EAQf,CAAC,8BAAD,EAAiC,KAAjC,CARe;EAUf,CAAC,kBAAD,EAAqB,IAArB,CAVe,EAWf,CAAC,yBAAD,EAA4B,MAA5B,CAXe,EAYf,CAAC,uBAAD,EAA0B,MAA1B,CAZe,EAaf,CAAC,sBAAD,EAAyB,IAAzB,CAbe,EAcf,CAAC,OAAD,EAAU,KAAV,CAde,EAef,CAAC,UAAD,EAAa,OAAb,CAfe,EAgBf,CAAC,WAAD,EAAc,MAAd,CAhBe,EAiBf,CAAC,qBAAD,EAAwB,KAAxB,CAjBe,EAkBf,CAAC,YAAD,EAAe,SAAf,CAlBe,EAmBf,CAAC,YAAD,EAAe,QAAf,CAnBe,EAoBf,CAAC,cAAD,EAAiB,QAAjB,CApBe,EAqBf,CAAC,oBAAD,EAAuB,MAAvB,CArBe,EAsBf,CAAC,oBAAD,EAAuB,IAAvB,CAtBe,EAuBf,CAAC,QAAD,EAAW,IAAX,CAvBe,EAwBf,CAAC,SAAD,EAAY,IAAZ,CAxBe,EAyBf,CAAC,KAAD,EAAQ,EAAR,CAzBe,CAAjB;;ECCA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAAS7kB,GAAT,EAAc;EAC9B,SAAOzJ,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiB3H,MAAjB,CAAwB,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EACvCH,IAAAA,CAAC,CAAC6K,GAAG,CAAC1K,CAAD,CAAJ,CAAD,GAAYA,CAAZ;EACA,WAAOH,CAAP;EACD,GAHM,EAGJ,EAHI,CAAP;EAID,CALD;;EAOA,IAAMgG,UAAU,GAAG,SAAbA,UAAa,CAAS/G,GAAT,EAAc2G,KAAd,EAAqB;EACtC,MAAIgX,UAAU,GAAGhX,KAAK,CAACgX,UAAN,CAAiB/B,KAAlC;EACA,MAAI8U,MAAM,GAAGD,SAAS,CAAC9S,UAAD,CAAtB,CAFsC;;EAKtC,MAAI+S,MAAM,CAAC9qB,cAAP,CAAsB5F,GAAtB,CAAJ,EAAgC;EAC9B,WAAO0wB,MAAM,CAAC1wB,GAAD,CAAb;EACD,GAPqC;;;EAUtC,OAAK,IAAIE,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqwB,QAAK,CAACjwB,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,QAAIqwB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,EAAY2C,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClCA,MAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAYotB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,CAAZ,EAAyBqwB,QAAK,CAACrwB,CAAD,CAAL,CAAS,CAAT,CAAzB,CAAN;EACA,aAAOF,GAAP;EACD;EACF;;EACD,SAAOA,GAAP;EACD,CAjBD;;EAkBA,gBAAc,GAAG+G,UAAjB;;EC3BA;EACA,IAAIwpB,KAAK,GAAG;EACVhpB,EAAAA,UAAU,EAAE,CACV;EACElC,IAAAA,GAAG,EAAE,OADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADU,EAKV;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALU,CADF;EAYVnpB,EAAAA,KAAK,EAAE,CACL;EACEnC,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADK,CAZG;EAmBVrpB,EAAAA,YAAY,EAAE,CACZ;EACEjC,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADY,EAKZ;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALY,EASZ;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GATY,EAaZ;EACEtrB,IAAAA,GAAG,EAAE,yBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAbY,EAiBZ;EACEtrB,IAAAA,GAAG,EAAE,0CADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjBY,EAqBZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArBY,EAyBZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzBY,EA6BZ;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7BY,EAiCZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjCY,EAqCZ;EACEtrB,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArCY,EAyCZ;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzCY,EA6CZ;EACEtrB,IAAAA,GAAG,EAAE,MADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7CY,EAiDZ;EACEtrB,IAAAA,GAAG,EAAE,KADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjDY,CAnBJ;EA0EVtpB,EAAAA,MAAM,EAAE,CACN;;EAEEhC,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GADM,EAMN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GANM,EAWN;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAXM,EAeN;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAfM,EAmBN;;EAEEtrB,IAAAA,GAAG,EAAE,oBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAnBM,EAwBN;;EAEEtrB,IAAAA,GAAG,EAAE,cAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAxBM;EA8BN;;EAEEtrB,IAAAA,GAAG,EAAE,UAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA9BM,EAmCN;;EAEEtrB,IAAAA,GAAG,EAAE,kBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAnCM,EAwCN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAxCM,EA6CN;;EAEEtrB,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA7CM,EAkDN;;EAEEtrB,IAAAA,GAAG,EAAE,iBAFP;;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAlDM,EAuDN;;EAEEtrB,IAAAA,GAAG,EAAE,UAFP;;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAvDM;;;;;EAkEN;;EAEEtrB,IAAAA,GAAG,EAAE,WAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GAlEM,CA1EE;EAmJVvpB,EAAAA,SAAS,EAAE,CACT;EACE/B,IAAAA,GAAG,EAAE,SADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GADS,EAKT;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GALS,EAST;EACEtrB,IAAAA,GAAG,EAAE,iBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GATS,EAaT;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAbS,EAiBT;EACEtrB,IAAAA,GAAG,EAAE,gBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjBS,EAqBT;EACEtrB,IAAAA,GAAG,EAAE,aADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArBS,EAyBT;EACEtrB,IAAAA,GAAG,EAAE,cADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzBS,EA6BT;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7BS,EAiCT;EACEtrB,IAAAA,GAAG,EAAE,QADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjCS,EAqCT;EACEtrB,IAAAA,GAAG,EAAE,QADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArCS,EAyCT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzCS,EA6CT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7CS,EAiDT;EACEtrB,IAAAA,GAAG,EAAE,yBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjDS,EAqDT;EACEtrB,IAAAA,GAAG,EAAE,iBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArDS,EAyDT;EACEtrB,IAAAA,GAAG,EAAE,wFADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzDS,EA6DT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7DS,EAiET;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjES,EAqET;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArES,EAyET;EACEtrB,IAAAA,GAAG,EAAE,mBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzES,EA6ET;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GA7ES,EAiFT;EACEtrB,IAAAA,GAAG,EAAE,UADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAjFS,EAqFT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GArFS,EAyFT;EACEtrB,IAAAA,GAAG,EAAE,kBADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAzFS,EA6FT;;EAEEtrB,IAAAA,GAAG,EAAE,uBAFP;EAGEsrB,IAAAA,EAAE,EAAE;EAHN,GA7FS,EAkGT;EACEtrB,IAAAA,GAAG,EAAE,YADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAlGS,EAsGT;EACEtrB,IAAAA,GAAG,EAAE,WADP;EAEEsrB,IAAAA,EAAE,EAAE;EAFN,GAtGS;EAnJD,CAAZ;EA+PA,cAAc,GAAGJ,KAAjB;;EChQA,IAAIK,SAAS,GAAG;EACdvpB,EAAAA,MAAM,EAAE,CAAC,KAAD,CADM;EAEdG,EAAAA,KAAK,EAAE,CAAC,MAAD,CAFO;EAGdN,EAAAA,UAAU,EAAE,CACV,KADU,EAEV,KAFU,EAGV,MAHU,EAIV,MAJU,EAKV,MALU,EAMV,MANU,EAOV,KAPU,EAQV,KARU,EASV,KATU,EAUV,KAVU,EAWV,KAXU,EAYV,KAZU,EAaV,KAbU,EAcV,KAdU,EAeV,KAfU,EAgBV,KAhBU,EAiBV,KAjBU,EAkBV,KAlBU,EAmBV,KAnBU,EAoBV,KApBU,EAqBV,KArBU,EAsBV,KAtBU,EAuBV,KAvBU,EAwBV,KAxBU,EAyBV,KAzBU,EA0BV,KA1BU,EA2BV,KA3BU,EA4BV,KA5BU,EA6BV,KA7BU,EA8BV,KA9BU,EA+BV,KA/BU,EAgCV,KAhCU,EAiCV,KAjCU,EAkCV,KAlCU,EAmCV,KAnCU,EAoCV,KApCU,EAqCV,IArCU,EAsCV,IAtCU,EAuCV,KAvCU,EAwCV,KAxCU,EAyCV,KAzCU,EA0CV,IA1CU,CAHE;EA+CdE,EAAAA,SAAS,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,CA/CG;EAgDdE,EAAAA,YAAY,EAAE,CACZ,KADY,EAEZ,KAFY,EAGZ,KAHY,EAIZ,KAJY,EAKZ,KALY,EAMZ,KANY,EAOZ,KAPY,EAQZ,KARY,EASZ,KATY,EAUZ,MAVY,EAWZ,MAXY,EAYZ,MAZY,EAaZ,MAbY,EAcZ,MAdY,EAeZ,MAfY,EAgBZ,KAhBY,EAiBZ,KAjBY,EAkBZ,KAlBY,EAmBZ,KAnBY,EAoBZ,KApBY,EAqBZ,KArBY,EAsBZ,KAtBY,EAuBZ,KAvBY,EAwBZ,KAxBY,EAyBZ,KAzBY,EA0BZ,KA1BY,EA2BZ,KA3BY,EA4BZ,KA5BY,EA6BZ,KA7BY,EA8BZ,KA9BY,EA+BZ,IA/BY,EAgCZ,IAhCY,EAiCZ,IAjCY;EAhDA,CAAhB;;EAqFAspB,SAAS,GAAGzuB,MAAM,CAACC,IAAP,CAAYwuB,SAAZ,EAAuB3sB,MAAvB,CAA8B,UAAClD,CAAD,EAAIG,CAAJ,EAAU;EAClD0vB,EAAAA,SAAS,CAAC1vB,CAAD,CAAT,CAAamB,OAAb,CAAqB,UAAA7B,CAAC;EAAA,WAAKO,CAAC,CAACP,CAAD,CAAD,GAAOU,CAAZ;EAAA,GAAtB;EACA,SAAOH,CAAP;EACD,CAHW,EAGT,EAHS,CAAZ;EAIA,UAAc,GAAG6vB,SAAjB;;ECtFA;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAS7wB,GAAT,EAAc;EAC/B,MAAI8wB,KAAK,GAAG9wB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAZ;;EACA,MAAIywB,MAAK,CAACnrB,cAAN,CAAqBkrB,KAArB,MAAgC,IAApC,EAA0C;EACxC,WAAOC,MAAK,CAACD,KAAD,CAAZ;EACD;;EACD,MAAIE,GAAG,GAAGhxB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAIywB,MAAK,CAACnrB,cAAN,CAAqBorB,GAArB,MAA8B,IAAlC,EAAwC;EACtC,WAAOD,MAAK,CAACC,GAAD,CAAZ;EACD;;EACD,MAAIC,GAAG,GAAGjxB,GAAG,CAAC2K,MAAJ,CAAW3K,GAAG,CAACM,MAAJ,GAAa,CAAxB,CAAV;;EACA,MAAI2wB,GAAG,KAAK,GAAZ,EAAiB;EACf,WAAO,cAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAgBA,IAAMxpB,YAAY,GAAG,SAAfA,YAAe,CAASzH,GAAT,EAAc2G,KAAd,EAAqBQ,KAArB,EAA4B;EAC/C,MAAI,CAACnH,GAAL,EAAU;EACR,WAAO,EAAP;EACD,GAH8C;;;EAK/C,MAAI2G,KAAK,CAAC4M,KAAN,CAAY3N,cAAZ,CAA2B5F,GAA3B,MAAoC,IAAxC,EAA8C;EAC5C,QAAIkxB,MAAM,GAAGvqB,KAAK,CAACgX,UAAN,CAAiB9B,KAA9B;EACA,QAAIzZ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY8uB,MAAZ,CAAX;;EACA,SAAK,IAAIhxB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,UAAI2d,KAAK,GAAG1b,MAAM,CAACC,IAAP,CAAY8uB,MAAM,CAAC9uB,IAAI,CAAClC,CAAD,CAAL,CAAlB,CAAZ;;EACA,WAAK,IAAIoB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuc,KAAK,CAACvd,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrC,YAAItB,GAAG,KAAKkxB,MAAM,CAAC9uB,IAAI,CAAClC,CAAD,CAAL,CAAN,CAAgB2d,KAAK,CAACvc,CAAD,CAArB,CAAZ,EAAuC;EACrC,iBAAOc,IAAI,CAAClC,CAAD,CAAX;EACD;EACF;EACF;EACF,GAhB8C;;;EAmB/CiH,EAAAA,KAAK,GAAGA,KAAK,IAAI0pB,UAAU,CAAC7wB,GAAD,CAA3B;;EACA,MAAImH,KAAK,IAAIopB,UAAK,CAACppB,KAAD,CAAlB,EAA2B;EACzB,SAAK,IAAIjH,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGqwB,UAAK,CAACppB,KAAD,CAAL,CAAa7G,MAAjC,EAAyCJ,EAAC,EAA1C,EAA8C;EAC5C,UAAMixB,IAAI,GAAGZ,UAAK,CAACppB,KAAD,CAAL,CAAajH,EAAb,CAAb;;EACA,UAAIixB,IAAI,CAAC9rB,GAAL,CAASxC,IAAT,CAAc7C,GAAd,MAAuB,IAA3B,EAAiC;EAC/B,eAAOA,GAAG,CAACmD,OAAJ,CAAYguB,IAAI,CAAC9rB,GAAjB,EAAsB8rB,IAAI,CAACR,EAA3B,CAAP;EACD;EACF;EACF;;EACD,SAAO3wB,GAAP;EACD,CA7BD;;EA8BA,kBAAc,GAAGyH,YAAjB;;ECxCA,IAAMkW,YAAU,GAAG;EACjB/B,EAAAA,KAAK,EAAEnS,OADU;EAEjBoS,EAAAA,KAAK,EAAEnS;EAFU,CAAnB;;EAMA,IAAM7C,YAAU,GAAG;EACjB2W,EAAAA,SAAS,EAAE7T,WADM;EAEjB8T,EAAAA,UAAU,EAAE7T,UAFK;EAGjB0T,EAAAA,QAAQ,EAAEzT,QAHO;EAIjB9C,EAAAA,UAAU,EAAEqJ,YAJK;EAKjB3I,EAAAA,YAAY,EAAE2pB;EALG,CAAnB;EAQA,IAAIrmB,UAAS,GAAG,KAAhB;EAEA;;MACMsmB;;;EACJ,mBAAc;EAAA;;;EAEZlvB,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAEmH,MAF4B;EAGnCpH,MAAAA,QAAQ,EAAE;EAHyB,KAArC;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,aAA5B,EAA2C;EACzCC,MAAAA,UAAU,EAAE,KAD6B;EAEzCE,MAAAA,KAAK,EAAE,EAFkC;EAGzCD,MAAAA,QAAQ,EAAE;EAH+B,KAA3C;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAE+I,YAFiC;EAGxChJ,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAEzS,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB8nB,IAAlB,CAF2B;EAGlC3c,MAAAA,QAAQ,EAAE;EAHwB,KAApC;EAKAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,YAA5B,EAA0C;EACxCC,MAAAA,UAAU,EAAE,KAD4B;EAExCE,MAAAA,KAAK,EAAE/N,YAFiC;EAGxC8N,MAAAA,QAAQ,EAAE;EAH8B,KAA1C;EAMAxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC;EACrCC,MAAAA,UAAU,EAAE,KADyB;EAErCE,MAAAA,KAAK,EAAE,EAF8B;EAGrCD,MAAAA,QAAQ,EAAE;EAH2B,KAAvC,EA5BY;;EAkCZ,SAAK4c,WAAL,CAAiBC,KAAjB,EAlCY;;EAoCZ,SAAK9T,aAAL,GApCY;;EAuCZvb,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAE;EACLlM,QAAAA,aAAa,EAAE,KAAK+oB,QAAL,CAAc,cAAd;EADV;EAF4B,KAArC;EAMD;;;;;;8BAGOC,MAAM;EACZ3mB,MAAAA,UAAS,GAAG2mB,IAAZ;EACA,aAAO,IAAP;EACD;;;kCACW;EACV,aAAO3mB,UAAP;EACD;;;;;+BAGQhF,KAAK;EACZ,UAAIkX,GAAG,GAAG,KAAK1J,KAAf;EACA,UAAIzD,GAAG,GAAG,EAAV;EACA,UAAIyD,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAY6a,GAAZ,CAAZ;;EACA,WAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,YAAI,OAAO+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAV,KAAyB,QAA7B,EAAuC;EACrC,cAAI+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAH,KAAkB6F,GAAtB,EAA2B;EACzB+J,YAAAA,GAAG,CAACyD,KAAK,CAACrT,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF,SAJD,MAIO,IAAI+c,GAAG,CAAC1J,KAAK,CAACrT,CAAD,CAAN,CAAH,CAAcqG,IAAd,CAAmB,UAAA5E,CAAC;EAAA,iBAAIA,CAAC,KAAKoE,GAAV;EAAA,SAApB,CAAJ,EAAwC;EAC7C+J,UAAAA,GAAG,CAACyD,KAAK,CAACrT,CAAD,CAAN,CAAH,GAAgB,IAAhB;EACD;EACF;;EACD,aAAO4P,GAAP;EACD;;;;;kCAGWmN,KAAK;EACf,UAAIjX,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAY6a,GAAZ,CAAX;;EACA,WAAK,IAAI/c,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAIqT,KAAK,GAAGpR,MAAM,CAACC,IAAP,CAAYwa,cAAM,CAACK,GAAG,CAACjX,IAAI,CAAC9F,CAAD,CAAL,CAAJ,CAAlB,CAAZ;;EACA,aAAK,IAAI4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyR,KAAK,CAACjT,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;EACrC6vB,UAAAA,QAAM,CAAC3U,OAAP,CAAezJ,KAAK,CAACzR,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,KAAKqT,KAAvC,EADqC;;EAGrCoe,UAAAA,QAAM,CAACzU,OAAP,CAAe3J,KAAK,CAACzR,CAAD,CAApB,EAAyBkE,IAAI,CAAC9F,CAAD,CAA7B,EAAkC,IAAlC;EACD;EACF;EACF;;;;;iCAEQ0L,KAAK;EACZ,UAAIxJ,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAX;;EACA,WAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,EAAlC,EAAsC;EACpC,YAAIgE,IAAI,GAAG9B,IAAI,CAAClC,CAAD,CAAJ,CAAQ8C,WAAR,EAAX;EACA2uB,QAAAA,QAAM,CAAC3U,OAAP,CAAe9Y,IAAf,EAAqB0H,GAAG,CAACxJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,KAAKqT,KAAxC,EAFoC;;EAIpCoe,QAAAA,QAAM,CAACzU,OAAP,CAAehZ,IAAf,EAAqB0H,GAAG,CAACxJ,IAAI,CAAClC,CAAD,CAAL,CAAxB,EAAmC,IAAnC;EACD;EACF;;;sCAEe;EACdwd,MAAAA,eAAa,CAAC,IAAD,CAAb;;EACA,aAAO,IAAP;EACD;;;;;8BAGO1X,MAAM;EACZA,MAAAA,IAAI,GAAG7D,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBxD,IAAlB,CAAP;EACA,WAAKA,IAAL,GAAY7D,MAAM,CAACqH,MAAP,CAAc,KAAKxD,IAAnB,EAAyBA,IAAzB,CAAZ,CAFY;;EAIZ,WAAKA,IAAL,GAAY4rB,SAAW,CAAC,KAAK5rB,IAAN,CAAvB;EACA,aAAO,IAAP;EACD;;;;;kCAEW6rB,IAAI;EACd,WAAKC,OAAL,CAAavlB,IAAb,CAAkBslB,EAAlB;EACA,aAAO,IAAP;EACD;;;;;8BAGO;EACN,aAAO;EACLte,QAAAA,KAAK,EAAEpR,MAAM,CAACC,IAAP,CAAY,KAAKmR,KAAjB,EAAwBjT,MAD1B;EAELyxB,QAAAA,OAAO,EAAE5vB,MAAM,CAACC,IAAP,CAAY,KAAKub,UAAL,CAAgB/B,KAA5B,EAAmCtb,MAFvC;EAGL8iB,QAAAA,YAAY,EAAEjhB,MAAM,CAACC,IAAP,CAAY,KAAKub,UAAL,CAAgB9B,KAA5B,EAAmCvb,MAH5C;EAIL0xB,QAAAA,SAAS,EAAE7vB,MAAM,CAACC,IAAP,CAAY,KAAKgb,WAAjB,EAA8B9c,MAJpC;EAKL2xB,QAAAA,cAAc,EAAE,KAAKH,OAAL,CAAaxxB;EALxB,OAAP;EAOD;;;;;;;EAIH,IAAMyL,OAAK,GAAG,SAARA,KAAQ,CAASH,GAAT,EAAc;EAC1B,SAAOsmB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,SAAL,CAAexmB,GAAf,CAAX,CAAP;EACD,CAFD;EAIA;;;EACAylB,KAAK,CAAC7mB,SAAN,CAAgBuB,KAAhB,GAAwB,YAAW;EACjC,MAAIsmB,EAAE,GAAG,IAAIhB,KAAJ,EAAT,CADiC;;EAGjCgB,EAAAA,EAAE,CAAC9e,KAAH,GAAWpR,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAK+J,KAAvB,CAAX;EACA8e,EAAAA,EAAE,CAACjV,WAAH,GAAiBjb,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkB,KAAK4T,WAAvB,CAAjB,CAJiC;;EAMjCiV,EAAAA,EAAE,CAAC1U,UAAH,GAAgB5R,OAAK,CAAC,KAAK4R,UAAN,CAArB;EACA0U,EAAAA,EAAE,CAACrsB,IAAH,GAAU+F,OAAK,CAAC,KAAK/F,IAAN,CAAf,CAPiC;;EASjCqsB,EAAAA,EAAE,CAACxrB,UAAH,GAAgB,KAAKA,UAArB;EACAwrB,EAAAA,EAAE,CAACP,OAAH,GAAa,KAAKA,OAAlB;EACA,SAAOO,EAAP;EACD,CAZD;;EAaA,WAAc,GAAGhB,KAAjB;;;EC9KA;EACA/sB,EAAAA,WAAA,GAAc,YAAW;EACvB,WAAO,KAAKsK,OAAL,GAAe,CAAf,KAAqB,IAA5B;EACD,GAFD;EAIA;;;EACAtK,EAAAA,cAAA,GAAiB,YAAW;EAC1B,QAAI,KAAKguB,IAAT,EAAe;EACb,aAAO,KAAKA,IAAZ;EACD;;EACD,WAAO,IAAP;EACD,GALD;EAOA;;;EACAhuB,EAAAA,eAAA,GAAkB,UAASjD,CAAT,EAAY;EAC5B,QAAIkJ,GAAG,GAAG,EAAV;;EACA,QAAMgoB,SAAS,GAAG,SAAZA,SAAY,CAAShkB,GAAT,EAAc;EAC9B,UAAIA,GAAG,CAAC+jB,IAAR,EAAc;EACZ/nB,QAAAA,GAAG,CAACgC,IAAJ,CAASgC,GAAG,CAAC+jB,IAAb;EACAC,QAAAA,SAAS,CAAChkB,GAAG,CAAC+jB,IAAL,CAAT;EACD;EACF,KALD;;EAMAC,IAAAA,SAAS,CAAC,IAAD,CAAT;EACAhoB,IAAAA,GAAG,GAAGA,GAAG,CAACioB,OAAJ,EAAN;;EACA,QAAI,OAAOnxB,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAOkJ,GAAG,CAAClJ,CAAD,CAAV;EACD;;EACD,WAAOkJ,GAAP;EACD,GAdD;EAgBA;;;EACAjG,EAAAA,aAAA,GAAgB,UAASmuB,SAAT,EAAoB;EAClC,QAAIrkB,IAAI,GAAG,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAAAwH,EAAE;EAAA,aAAIA,EAAE,CAACpI,KAAH,CAAS0mB,SAAT,CAAJ;EAAA,KAAhB,CAAX;EACA,QAAI9iB,GAAG,GAAG,KAAKlD,SAAL,CAAe2B,IAAf,CAAV;EACA,WAAOuB,GAAP;EACD,GAJD;EAMA;;;EACArL,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAK8J,IAAL,CAAUnK,MAAV,CAAiB,UAACwM,KAAD,EAAQlP,CAAR,EAAc;EACpCkP,MAAAA,KAAK,IAAIlP,CAAC,CAACmxB,SAAF,EAAT;EACA,aAAOjiB,KAAP;EACD,KAHM,EAGJ,CAHI,CAAP;EAID,GALD;;EAMAnM,EAAAA,iBAAA,GAAoBA,OAAO,CAACouB,SAA5B;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;ECpDA;EACApuB,EAAAA,aAAA,GAAgB,UAASjD,CAAT,EAAY;EAC1B,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAK0G,GAAL,CAAS,CAAT,CAAP;EACD;;EACD,WAAO,KAAKwD,KAAL,CAAW,CAAX,EAAcxO,CAAd,CAAP;EACD,GALD;EAOA;;;EACAiD,EAAAA,YAAA,GAAe,UAASjD,CAAT,EAAY;EACzB,QAAIA,CAAC,KAAKsE,SAAV,EAAqB;EACnB,aAAO,KAAK0G,GAAL,CAAS,KAAK+B,IAAL,CAAU9N,MAAV,GAAmB,CAA5B,CAAP;EACD;;EACD,QAAIoF,GAAG,GAAG,KAAK0I,IAAL,CAAU9N,MAApB;EACA,WAAO,KAAKuP,KAAL,CAAWnK,GAAG,GAAGrE,CAAjB,EAAoBqE,GAApB,CAAP;EACD,GAND;EAQA;;;EACApB,EAAAA,aAAA,GAAgB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EACnC,QAAI0I,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgBpK,KAAhB,EAAuBC,GAAvB,CAAX;EACA,WAAO,KAAK+G,SAAL,CAAe2B,IAAf,CAAP;EACD,GAHD;EAKA;;;EACA9J,EAAAA,UAAA,GAAa,UAASjD,CAAT,EAAY;EACvB,QAAIE,CAAC,GAAG,KAAK6M,IAAL,CAAU/M,CAAV,CAAR;;EACA,QAAIE,CAAC,KAAKoE,SAAV,EAAqB;EACnB,aAAO,KAAK8G,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,WAAO,KAAKA,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAP;EACD,GAND;;EAOA+C,EAAAA,WAAA,GAAcA,OAAO,CAACquB,EAAtB;EAEA;;EACAruB,EAAAA,kBAAA,GAAqB,YAAW;EAC9B,WAAO,KAAKmJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;EAGAnJ,EAAAA,iBAAA,GAAoBA,OAAO,CAACsuB,UAA5B;EAEA;;EACAtuB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,WAAO,KAAKmJ,KAAL,CAAW,IAAX,CAAP;EACD,GAFD;;EAGAnJ,EAAAA,gBAAA,GAAmBA,OAAO,CAACuuB,SAA3B;EAEA;;EACAvuB,EAAAA,gBAAA,GAAmB,UAASwuB,GAAT,EAAc;EAC/B,QAAIvoB,GAAG,GAAG,EAAV,CAD+B;;EAG/B,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIiM,KAAK,GAAG,KAAKiC,IAAL,CAAUlO,CAAV,EAAaiM,KAAb,EAAZ;;EACA,WAAK,IAAI7K,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,EAAnC,EAAuC;EACrCiJ,QAAAA,GAAG,CAACgC,IAAJ,CAASJ,KAAK,CAAC7K,CAAD,CAAd,EADqC;;EAGrC,YAAIwxB,GAAG,KAAKntB,SAAR,IAAqB4E,GAAG,CAACuoB,GAAD,CAAH,KAAantB,SAAtC,EAAiD;EAC/C,iBAAO4E,GAAG,CAACuoB,GAAD,CAAV;EACD;EACF;EACF;;EACD,WAAOvoB,GAAP;EACD,GAdD;EAgBA;;;EACA,MAAMwoB,SAAS,GAAG,SAAZA,SAAY,CAASxkB,GAAT,EAAc;EAC9B,QAAIuB,GAAG,GAAG,EAAV;EACA,QAAMkjB,SAAS,GAAG,EAAlB;;EAF8B,+BAGrB9yB,CAHqB;EAI5B,UAAMkP,MAAM,GAAGb,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAf;EACA,UAAM+T,MAAM,GAAG9R,MAAM,CAACC,IAAP,CAAYgN,MAAM,CAAC6E,MAAnB,EAA2BtH,GAA3B,CAA+B,UAAAzL,CAAC;EAAA,eAAIkO,MAAM,CAAC6E,MAAP,CAAc/S,CAAd,CAAJ;EAAA,OAAhC,CAAf;;EACA,WAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGgT,MAAM,CAAC3T,MAA3B,EAAmCW,CAAC,EAApC,EAAwC;EAAA,wBACLgT,MAAM,CAAChT,CAAD,CADD;EAAA,YAC9BiQ,KAD8B,aAC9BA,KAD8B;EAAA,YACvBzL,KADuB,aACvBA,KADuB;EAAA,YAChBnF,MADgB,aAChBA,MADgB;;EAGtC,YAAI,CAAC0yB,SAAS,CAAC9hB,KAAD,CAAd,EAAuB;EACrB8hB,UAAAA,SAAS,CAAC9hB,KAAD,CAAT,GAAmB,EAAnB;EACD;;EACD8hB,QAAAA,SAAS,CAAC9hB,KAAD,CAAT,CAAiB3E,IAAjB,CAAsB6C,MAAM,CAAC3C,SAAP,CAAiBhH,KAAjB,EAAwBnF,MAAxB,CAAtB;EACD;EAb2B;;EAG9B,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,YAAjCA,CAAiC;EAWzC;;EACD,QAAMkC,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4wB,SAAZ,CAAb;;EACA,SAAK,IAAI9yB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAMmb,GAAG,GAAGjZ,IAAI,CAAClC,EAAD,CAAhB;EACA4P,MAAAA,GAAG,CAACuL,GAAD,CAAH,GAAW9M,GAAG,CAAC9B,SAAJ,CAAcumB,SAAS,CAAC3X,GAAD,CAAvB,CAAX;EACD;;EACD,WAAOvL,GAAP;EACD,GArBD;;EAuBA,MAAMmjB,UAAU,GAAG,SAAbA,UAAa,CAAS1kB,GAAT,EAAcsa,IAAd,EAAoB;EACrC,QAAMte,GAAG,GAAG,EAAZ;;EADqC,iCAE5BrK,CAF4B;EAGnC,UAAMkP,MAAM,GAAGb,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAf;EACA,UAAIkC,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAYgN,MAAM,CAAC6E,MAAnB,CAAX;EACA7R,MAAAA,IAAI,GAAGA,IAAI,CAAC0K,MAAL,CAAY,UAAAvH,EAAE;EAAA,eAAI6J,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkB2L,KAAlB,KAA4B2X,IAAhC;EAAA,OAAd,CAAP;EACAzmB,MAAAA,IAAI,CAACC,OAAL,CAAa,UAAAkD,EAAE,EAAI;EACjBgF,QAAAA,GAAG,CAACgC,IAAJ,CAAS6C,MAAM,CAAC3C,SAAP,CAAiB2C,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkBE,KAAnC,EAA0C2J,MAAM,CAAC6E,MAAP,CAAc1O,EAAd,EAAkBjF,MAA5D,CAAT;EACD,OAFD;EANmC;;EAErC,SAAK,IAAIJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,aAAjCA,CAAiC;EAOzC;;EACD,WAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,GAXD;EAaA;;;EACAjG,EAAAA,cAAA,GAAiB,UAAS4uB,MAAT,EAAiB;EAChC,QAAIA,MAAM,KAAKvtB,SAAf,EAA0B;EACxB,aAAOotB,SAAS,CAAC,IAAD,CAAhB;EACD;;EACD,QAAI,OAAOG,MAAP,KAAkB,QAAtB,EAAgC;EAC9BA,MAAAA,MAAM,GAAGvnB,MAAM,CAACunB,MAAD,CAAf;EACD;;EACD,WAAOD,UAAU,CAAC,IAAD,EAAOC,MAAP,CAAV,IAA4B,KAAKzmB,SAAL,CAAe,EAAf,CAAnC;EACD,GARD;;EASAnI,EAAAA,aAAA,GAAgBA,OAAO,CAAC2P,MAAxB;EAEA;;EACA3P,EAAAA,iBAAA,GAAoB,UAASjD,CAAT,EAAY;EAC9B,QAAIkJ,GAAG,GAAG,EAAV;EACA,SAAK6D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBgJ,MAAAA,GAAG,CAACgC,IAAJ,CAAShL,CAAC,CAAC4xB,YAAF,EAAT;EACD,KAFD;;EAGA,QAAI,OAAO9xB,CAAP,KAAa,QAAjB,EAA2B;EACzB,aAAO,KAAKoL,SAAL,CAAe,CAAClC,GAAG,CAAClJ,CAAD,CAAJ,CAAf,CAAP;EACD;;EACD,WAAO,KAAKoL,SAAL,CAAelC,GAAf,CAAP;EACD,GATD;;EAUAjG,EAAAA,gBAAA,GAAmBA,OAAO,CAACuR,SAA3B;;;;;;;;;;;;;;;;;EC1HA;EACA,IAAMud,aAAa,GAAG,SAAhBA,aAAgB,CAAS/tB,GAAT,EAAc;EAClC,MAAIguB,QAAQ,GAAG,EAAf;EACA,MAAIC,SAAS,GAAG,EAAhB;EACAjuB,EAAAA,GAAG,CAAChD,OAAJ,CAAY,UAAAuJ,GAAG,EAAI;EACjB,QAAIA,GAAG,CAAC0E,QAAJ,KAAiB,IAAjB,IAAyB1E,GAAG,CAACnF,QAAJ,KAAiB,IAA9C,EAAoD;EAClD;EACD;;EACD,QAAImF,GAAG,CAAC7F,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB0tB,MAAAA,QAAQ,CAAC9mB,IAAT,CAAcX,GAAG,CAAC7F,GAAlB;EACD;;EACD,QAAI6F,GAAG,CAAC1H,IAAJ,KAAayB,SAAjB,EAA4B;EAC1B2tB,MAAAA,SAAS,CAAC/mB,IAAV,CAAeX,GAAG,CAAC1H,IAAnB;EACD;EACF,GAVD;EAWA,SAAO;EAAE8B,IAAAA,IAAI,EAAEqtB,QAAR;EAAkB9f,IAAAA,KAAK,EAAE+f;EAAzB,GAAP;EACD,CAfD;;EAiBA,IAAMjjB,UAAQ,GAAG,SAAXA,QAAW,CAAS9B,GAAT,EAAcyB,IAAd,EAAoB;EACnC,MAAIzB,GAAG,CAACglB,MAAJ,IAAchlB,GAAG,CAACglB,MAAJ,CAAWhkB,GAAX,KAAmB,IAArC,EAA2C;EAAA,yBACnB6jB,aAAa,CAACpjB,IAAD,CADM;EAAA,QACnCuD,KADmC,kBACnCA,KADmC;EAAA,QAC5BvN,IAD4B,kBAC5BA,IAD4B;;;EAGzC,SAAK,IAAI9F,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqT,KAAK,CAACjT,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIqO,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBA,KAAK,CAACrT,CAAD,CAAtB,MAA+ByF,SAAnC,EAA8C;EAC5C,eAAO,KAAP;EACD;EACF,KAPwC;;;EASzC,SAAK,IAAIzF,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAG8F,IAAI,CAAC1F,MAAzB,EAAiCJ,EAAC,EAAlC,EAAsC;EACpC,UAAIqO,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBA,IAAI,CAAC9F,EAAD,CAApB,MAA6ByF,SAAjC,EAA4C;EAC1C,eAAO,KAAP;EACD;EACF;EACF;;EACD,SAAO,IAAP;EACD,CAjBD;;EAkBA,cAAc,GAAG0K,UAAjB;;;ECjCA;EACA/L,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAcwjB,IAAd,EAAoB;;EAElC,QAAI7Y,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;;EACA,QAAI2K,IAAI,CAAC1P,MAAL,KAAgB,CAApB,EAAuB;EACrB,aAAO,KAAKmM,SAAL,CAAe,EAAf,CAAP;EACD,KALiC;;;EAOlC,QAAIgnB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD,KATiC;;;EAWlC,QAAIqF,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,aAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;;EAIA,QAAI6Y,IAAI,KAAKljB,SAAT,IAAsBkjB,IAAI,KAAK,IAA/B,IAAuCA,IAAI,KAAK,EAApD,EAAwD;EACtD,aAAO,KAAKpc,SAAL,CAAeqF,OAAf,EAAwBmC,MAAxB,CAA+B4U,IAA/B,CAAP;EACD;;EACD,WAAO,KAAKpc,SAAL,CAAeqF,OAAf,CAAP;EACD,GAnBD;EAqBA;;;EACAxN,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;;EAE1B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAF0B;;EAI1B,QAAI2K,IAAI,CAAC1P,MAAL,KAAgB,CAAhB,IAAqBmzB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAApD,EAA2D;EACzD,aAAO,IAAP;EACD,KANyB;;;EAQ1B,QAAI8B,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,aAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACmyB,GAAF,CAAM1jB,IAAN,CAAX,CAAP;EACD,KAFa,EAEX,EAFW,CAAd;EAGA,WAAO,KAAKvD,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;EAcA;;;EACAxN,EAAAA,gBAAA,GAAmB,UAASe,GAAT,EAAc;EAC/B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD+B;;EAG/B,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,SAAK,IAAIvM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAIuN,KAAK,GAAG,KAAKW,IAAL,CAAUlO,CAAV,EAAauN,KAAb,CAAmBuC,IAAnB,EAAyB,IAAzB,CAAZ;EACA,aAAO,KAAKvD,SAAL,CAAegB,KAAf,CAAP;EACD;;EACD,WAAO,KAAKhB,SAAL,CAAe,EAAf,CAAP;EACD,GAXD;EAaA;;;EACAnI,EAAAA,aAAA,GAAa,UAASe,GAAT,EAAc;EACzB,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CADyB;;EAGzB,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAKvD,SAAL,CAAe,EAAf,CAAP;EACD;;EACD,QAAI5I,KAAK,GAAG,KAAKuK,IAAL,CAAUtB,MAAV,CAAiB,UAAAvL,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,IAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKvD,SAAL,CAAe5I,KAAf,CAAP;EACD,GARD;EAUA;;;EACAS,EAAAA,YAAA,GAAe,UAASe,GAAT,EAAc;EAC3B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIxB,KAAK,GAAG,KAAKuK,IAAL,CAAUtB,MAAV,CAAiB,UAAAvL,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,KAApB;EAAA,KAAlB,CAAZ;EACA,WAAO,KAAKvD,SAAL,CAAe5I,KAAf,CAAP;EACD,GAJD;EAMA;;;EACAS,EAAAA,WAAA,GAAc,UAASe,GAAT,EAAc;EAC1B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD0B;;EAG1B,QAAIouB,UAAU,CAAC,IAAD,EAAOzjB,IAAP,CAAV,KAA2B,KAA/B,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD,WAAO,KAAK5B,IAAL,CAAU7H,IAAV,CAAe,UAAAhF,CAAC;EAAA,aAAIA,CAAC,CAACoyB,GAAF,CAAM3jB,IAAN,MAAgB,IAApB;EAAA,KAAhB,CAAP;EACD,GAPD;EASA;;;EACA1L,EAAAA,iBAAA,GAAoB,UAASe,GAAT,EAAc;;EAEhC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBuQ,MAAAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAepN,CAAC,CAACqyB,SAAF,CAAY5jB,IAAZ,CAAf,CAAV;EACD,KAFD;EAGA8B,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;;EAaAxN,EAAAA,iBAAA,GAAoBA,OAAO,CAACsvB,SAA5B;EAEA;;EACAtvB,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACRA,MAAAA,GAAG,GAAG,IAAN;EACD;;EACD,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBuQ,MAAAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAepN,CAAC,CAACsyB,UAAF,CAAa7jB,IAAb,CAAf,CAAV;EACD,KAFD;EAGA8B,IAAAA,OAAO,GAAGA,OAAO,CAAChF,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAJ;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqF,OAAf,CAAP;EACD,GAZD;;EAaAxN,EAAAA,kBAAA,GAAqBA,OAAO,CAACuvB,UAA7B;EAEA;;EACAvvB,EAAAA,cAAA,GAAiB,UAASe,GAAT,EAAc;EAC7B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD6B;;EAG7B,QAAI0R,OAAO,GAAG,WAAQ/G,IAAR,EAAc5B,IAA5B;EACA,QAAI0lB,OAAO,GAAG/c,OAAO,CAACpK,GAAR,CAAY,UAAApL,CAAC,EAAI;EAC7B,UAAImS,GAAG,GAAGnS,CAAC,CAAC4K,KAAF,GAAUQ,GAAV,CAAc,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAf,CAAV,CAD6B;;EAG7B,UAAInE,CAAC,GAAGG,CAAC,CAACkM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAI1K,KAAK,GAAGoO,GAAG,CAAC9O,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAJ6B;;EAM7B,UAAIH,KAAK,KAAK,CAAV,IAAeA,KAAK,KAAK,CAAC,CAA9B,EAAiC;EAC/B,eAAO,IAAP;EACD;;EACD,aAAO/D,CAAC,CAACkL,SAAF,CAAYlL,CAAC,CAACkE,KAAd,EAAqBH,KAArB,CAAP;EACD,KAVa,CAAd;EAWAwuB,IAAAA,OAAO,GAAGA,OAAO,CAAChnB,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqnB,OAAf,CAAP;EACD,GAjBD;EAmBA;;;EACAxvB,EAAAA,aAAA,GAAgB,UAASe,GAAT,EAAc;EAC5B,QAAI2K,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB,CAD4B;;EAG5B,QAAI0R,OAAO,GAAG,WAAQ/G,IAAR,EAAc5B,IAA5B;EACA,QAAI0lB,OAAO,GAAG/c,OAAO,CAACpK,GAAR,CAAY,UAAApL,CAAC,EAAI;EAC7B,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,UAAIuH,GAAG,GAAGvH,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC4D,EAAN;EAAA,OAAX,CAAV,CAF6B;;EAI7B,UAAInE,CAAC,GAAGG,CAAC,CAACkM,KAAF,CAAQuC,IAAR,EAAc,CAAd,CAAR;EACA,UAAI1K,KAAK,GAAGoO,GAAG,CAAC9O,OAAJ,CAAYxD,CAAC,CAACqE,KAAd,CAAZ,CAL6B;;EAO7B,UAAIH,KAAK,KAAK,CAAC,CAAX,IAAgB,CAAC6G,KAAK,CAAC7G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAA1B,EAA8C;EAC5C,eAAO,IAAP;EACD,OAT4B;;;EAW7B,UAAIiF,EAAE,GAAG4G,KAAK,CAAC7G,KAAK,GAAGlE,CAAC,CAACd,MAAX,CAAL,CAAwBiF,EAAjC;EACA,UAAIwH,GAAG,GAAGxL,CAAC,CAACjB,MAAF,GAAWgF,KAAX,GAAmBlE,CAAC,CAACd,MAA/B;EACA,aAAOiB,CAAC,CAACkL,SAAF,CAAYlH,EAAZ,EAAgBwH,GAAhB,CAAP;EACD,KAda,CAAd;EAeA+mB,IAAAA,OAAO,GAAGA,OAAO,CAAChnB,MAAR,CAAe,UAAAvL,CAAC;EAAA,aAAIA,CAAC,KAAK,IAAV;EAAA,KAAhB,CAAV;EACA,WAAO,KAAKkL,SAAL,CAAeqnB,OAAf,CAAP;KApBF;;;;;;;;;;;;;;ECvIA;EACA,IAAMC,QAAQ,GAAG,SAAXA,QAAW,CAAShuB,GAAT,EAAcwI,GAAd,EAAmBylB,IAAnB,EAAyB5pB,MAAzB,EAAiC;EAChD,MAAI6pB,OAAO,GAAG,EAAd;;EACA,MAAI,OAAOluB,GAAP,KAAe,QAAnB,EAA6B;EAC3BkuB,IAAAA,OAAO,GAAGluB,GAAG,CAACjG,KAAJ,CAAU,GAAV,CAAV;EACD,GAJ+C;;;EAOhDyO,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADoB;;EAGpB,QAAI6nB,IAAI,KAAK,IAAb,EAAmB;EACjB7nB,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAnL,CAAC;EAAA,eAAIA,CAAC,CAAC4J,KAAF,CAAQxF,GAAR,EAAawI,GAAG,CAAC5H,KAAjB,CAAJ;EAAA,OAAd,CAAR;EACD;;EACDwF,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,UAAI+zB,OAAO,CAAC3zB,MAAR,GAAiB,CAArB,EAAwB;EACtB,YAAI2zB,OAAO,CAAC/zB,CAAD,CAAP,IAAc+zB,OAAO,CAAC/zB,CAAD,CAAP,KAAe,GAAjC,EAAsC;EACpCyB,UAAAA,CAAC,CAACoE,GAAF,CAAMkuB,OAAO,CAAC/zB,CAAD,CAAb,EAAkBkK,MAAlB,EAA0BmE,GAAG,CAAC5H,KAA9B;EACD;EACF,OAJD,MAIO;;EAELhF,QAAAA,CAAC,CAACoE,GAAF,CAAMA,GAAN,EAAWqE,MAAX,EAAmBmE,GAAG,CAAC5H,KAAvB;EACD;EACF,KAVD;EAWD,GAjBD;EAkBA;EACD,CA1BD;;EA2BA,WAAc,GAAGotB,QAAjB;;EC1BA;;EACA,SAAW,GAAG,YAAA,CAAS/tB,IAAT,EAAekuB,GAAf,EAAoB;EAChC,MAAI,CAACluB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACDmuB,EAAAA,OAAM,CAACnuB,IAAD,EAAO,IAAP,EAAa,KAAb,EAAoBkuB,GAApB,CAAN;EACA,SAAO,IAAP;EACD,CAND;EAQA;;;EACA,aAAe,GAAG,gBAAA,CAASluB,IAAT,EAAekuB,GAAf,EAAoB;EACpC,MAAI,CAACluB,IAAL,EAAW;EACT,WAAO,IAAP;EACD;;EACDmuB,EAAAA,OAAM,CAACnuB,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmBkuB,GAAnB,CAAN;EACA,SAAO,IAAP;EACD,CAND;EAQA;;;EACA,WAAa,GAAG,cAAA,CAASluB,IAAT,EAAekuB,GAAf,EAAoB;EAAA;;EAClC,OAAK9lB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAACuJ,KAAF,CAAQlF,IAAR,EAAckuB,GAAd,EAAmB,KAAI,CAACvtB,KAAxB,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO,IAAP;EACD,CALD;EAOA;;;EACA,WAAa,GAAG,cAAA,CAASZ,GAAT,EAAc;EAC5B,MAAI,CAACA,GAAL,EAAU;EACR,WAAO,IAAP;EACD;;EACD,MAAIY,KAAK,GAAG,KAAKA,KAAjB;EACA,MAAImL,OAAO,GAAG,KAAK1D,IAAL,CAAUnK,MAAV,CAAiB,UAACsG,GAAD,EAAMhJ,CAAN,EAAY;EACzC,WAAOgJ,GAAG,CAACoE,MAAJ,CAAWpN,CAAC,CAACgK,KAAF,CAAQxF,GAAR,EAAaY,KAAb,CAAX,CAAP;EACD,GAFa,EAEX,EAFW,CAAd;EAGA,SAAO,KAAK8F,SAAL,CAAeqF,OAAf,CAAP;GARF;;;;;;;;;EC7BA;EACA,OAAW,GAAG,YAAA,CAAS+f,EAAT,EAAa;EAAA;;EACzB,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIzjB,IAAI,GAAG,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAACpL,CAAD,EAAIrB,CAAJ,EAAU;EACjC,QAAIqO,GAAG,GAAG,KAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFiC;;EAGjC,QAAIxiB,GAAG,GAAG+hB,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAZ,CAHiC;;EAKjC,QAAI4P,GAAG,IAAIA,GAAG,CAAC1B,IAAX,IAAmB0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAvB,EAAoC;EAClC,aAAO0B,GAAG,CAAC1B,IAAJ,CAAS,CAAT,CAAP;EACD;;EACD,WAAO0B,GAAP;EACD,GATU,CAAX,CAJyB;;EAezB1B,EAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAA/K,CAAC;EAAA,WAAIA,CAAJ;EAAA,GAAb,CAAP,CAfyB;;EAiBzB,MAAIqM,IAAI,CAAC9N,MAAL,KAAgB,CAApB,EAAuB;EACrB,WAAO,KAAKmM,SAAL,CAAe2B,IAAf,CAAP;EACD,GAnBwB;;;EAqBzB,MAAI,QAAOA,IAAI,CAAC,CAAD,CAAX,MAAmB,QAAnB,IAA+BA,IAAI,CAAC,CAAD,CAAJ,CAAQhF,GAAR,KAAgB,QAAnD,EAA6D;EAC3D,WAAOgF,IAAP;EACD;;EACD,SAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,CAzBD;EA2BA;;;EACA,WAAe,GAAG,gBAAA,CAASyjB,EAAT,EAAauC,YAAb,EAA2B;EAAA;;EAC3C,MAAI,CAACvC,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,OAAKzjB,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1B,QAAIm0B,GAAG,GAAG,MAAI,CAAC5nB,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV,CAD0B;;;EAG1B,QAAI6yB,YAAY,KAAK,IAArB,EAA2B;EACzBC,MAAAA,GAAG,CAAC/B,IAAJ,GAAW,IAAX,CADyB;EAE1B;;EACDT,IAAAA,EAAE,CAACwC,GAAD,EAAMn0B,CAAN,CAAF;EACD,GAPD;EAQA,SAAO,IAAP;EACD,CAbD;EAeA;;;EACA,UAAc,GAAG,eAAA,CAAS2xB,EAAT,EAAa;EAAA;;EAC5B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIzjB,IAAI,GAAG,KAAKA,IAAL,CAAUtB,MAAV,CAAiB,UAACvL,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJU,CAAX;EAKA,SAAO,KAAKuM,SAAL,CAAe2B,IAAf,CAAP;EACD,CAVD;EAYA;;;EACA,QAAY,GAAG,aAAA,CAASyjB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,MAAIziB,MAAM,GAAG,KAAKhB,IAAL,CAAUiB,IAAV,CAAe,UAAC9N,CAAD,EAAIrB,CAAJ,EAAU;EACpC,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAFoC;;EAGpC,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJY,CAAb;;EAKA,MAAIkP,MAAJ,EAAY;EACV,WAAO,KAAK3C,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAP;EACD;;EACD,SAAOzJ,SAAP;EACD,CAbD;EAeA;;;EACA,QAAY,GAAG,aAAA,CAASksB,EAAT,EAAa;EAAA;;EAC1B,MAAI,CAACA,EAAL,EAAS;EACP,WAAO,IAAP;EACD;;EACD,SAAO,KAAKzjB,IAAL,CAAU7H,IAAV,CAAe,UAAChF,CAAD,EAAIrB,CAAJ,EAAU;EAC9B,QAAIqO,GAAG,GAAG,MAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACAgN,IAAAA,GAAG,CAAC+jB,IAAJ,GAAW,IAAX,CAF8B;;EAG9B,WAAOT,EAAE,CAACtjB,GAAD,EAAMrO,CAAN,CAAT;EACD,GAJM,CAAP;EAKD,CATD;EAWA;;;EACA,UAAc,GAAG,eAAA,CAASmB,CAAT,EAAY;EAC3B,MAAI,CAAC,KAAKwC,KAAV,EAAiB;EACf,WAAO,IAAP;EACD;;EACD,MAAIpC,CAAC,GAAGtB,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,KAAK+N,IAAL,CAAU9N,MAArC,CAAR;;EACA,MAAIe,CAAC,KAAKsE,SAAV,EAAqB;EACnB,QAAIyI,IAAI,GAAG,CAAC,KAAKA,IAAL,CAAU3M,CAAV,CAAD,CAAX;EACA,WAAO,KAAKgL,SAAL,CAAe2B,IAAf,CAAP;EACD,GAR0B;;;EAU3B,MAAI3M,CAAC,GAAGJ,CAAJ,GAAQ,KAAKf,MAAjB,EAAyB;EACvBmB,IAAAA,CAAC,GAAG,KAAKnB,MAAL,GAAce,CAAlB;EACAI,IAAAA,CAAC,GAAGA,CAAC,GAAG,CAAJ,GAAQ,CAAR,GAAYA,CAAhB;EACD;;EACD,SAAO,KAAKoO,KAAL,CAAWpO,CAAX,EAAcA,CAAC,GAAGJ,CAAlB,CAAP;EACD,CAfD;EAiBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;;;EC/GA;EACA,IAAMizB,QAAQ,GAAG,SAAXA,QAAW,CAASt0B,GAAT,EAAc;EAC7B,SAAOA,GAAG,CAACF,KAAJ,CAAU,OAAV,CAAP;EACD,CAFD;EAIA;;;EACA,IAAMy0B,SAAS,GAAG,SAAZA,SAAY,CAASC,QAAT,EAAgC;EAAA,MAAb1Y,MAAa,uEAAJ,EAAI;EAChD,MAAIhW,IAAI,GAAG,EAAX,CADgD;;EAGhD0uB,EAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAACrC,GAAD,EAAME,CAAN,EAAY;EAC3B,QAAIu0B,GAAG,GAAG,IAAV;;EACA,QAAI3Y,MAAM,CAAC5b,CAAD,CAAN,KAAcyF,SAAlB,EAA6B;EAC3B8uB,MAAAA,GAAG,GAAG3Y,MAAM,CAAC5b,CAAD,CAAZ;EACD,KAJ0B;;;EAM3BF,IAAAA,GAAG,GAAG,CAACA,GAAG,IAAI,EAAR,EAAYgD,WAAZ,EAAN;EACAhD,IAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,WAAZ,EAAyB,EAAzB,CAAN;EACA,QAAIoH,GAAG,GAAG+pB,QAAQ,CAACt0B,GAAD,CAAR,CAAc2M,GAAd,CAAkB,UAAAjL,CAAC;EAAA,aAAIA,CAAC,CAACuB,IAAF,EAAJ;EAAA,KAAnB,CAAV;EACA6C,IAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,GAAezE,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,IAAgB,EAA/B;;EACA,QAAIA,GAAG,CAACjK,MAAJ,KAAe,CAAnB,EAAsB;EACpBwF,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAaqK,KAAb,GAAqB6f,GAArB;EACD,KAFD,MAEO;EACL3uB,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,GAAoB5uB,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,IAAqB,EAAzC;EACA5uB,MAAAA,IAAI,CAACyE,GAAG,CAAC,CAAD,CAAJ,CAAJ,CAAamqB,IAAb,CAAkBnoB,IAAlB,CAAuB;EACrBooB,QAAAA,IAAI,EAAEpqB,GAAG,CAACsF,KAAJ,CAAU,CAAV,CADe;EAErB+E,QAAAA,KAAK,EAAE6f;EAFc,OAAvB;EAID;EACF,GAnBD,EAHgD;;;EAyBhD,SAAO3uB,IAAP;EACD,CA1BD;;EA4BA,IAAM8uB,UAAU,GAAG,SAAbA,UAAa,CAASJ,QAAT,EAAmB1Y,MAAnB,EAA2BvN,GAA3B,EAAgC;EACjD,MAAIzI,IAAI,GAAGyuB,SAAS,CAACC,QAAD,EAAW1Y,MAAX,CAApB;EACA,MAAIjY,KAAK,GAAG,EAAZ,CAFiD;;EAAA,6BAIxC3D,CAJwC;EAK/C,QAAMqB,CAAC,GAAGgN,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAV;EACA,QAAIiM,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EAEA,QAAIoH,KAAK,GAAGpH,KAAK,CAACQ,GAAN,CAAU,UAAAhL,CAAC;EAAA,aAAIA,CAAC,CAACyB,OAAN;EAAA,KAAX,CAAZ,CAR+C;;EAAA,iCAUtCtB,CAVsC;EAW7C,UAAIgE,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,KAAmB6D,SAAvB,EAAkC;;EAEhC,YAAIG,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe4yB,IAAf,KAAwB/uB,SAA5B,EAAuC;EACrCG,UAAAA,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe4yB,IAAf,CAAoBryB,OAApB,CAA4B,UAAAqyB,IAAI,EAAI;;EAElC,gBAAInhB,KAAK,CAACzR,CAAC,GAAG4yB,IAAI,CAACC,IAAL,CAAUr0B,MAAf,CAAL,KAAgCqF,SAApC,EAA+C;EAC7C;EACD,aAJiC;;;EAMlC,gBAAIkvB,SAAS,GAAGH,IAAI,CAACC,IAAL,CAAUruB,KAAV,CAAgB,UAACpC,IAAD,EAAOzC,CAAP,EAAa;EAC3C,qBAAOyC,IAAI,KAAKqP,KAAK,CAACzR,CAAC,GAAGL,CAAJ,GAAQ,CAAT,CAArB;EACD,aAFe,CAAhB;;EAGA,gBAAIozB,SAAS,KAAK,IAAlB,EAAwB;EACtBhxB,cAAAA,KAAK,CAAC0I,IAAN,CAAW;EAAEhH,gBAAAA,EAAE,EAAEhE,CAAC,CAAC4K,KAAF,GAAUrK,CAAV,EAAayD,EAAnB;EAAuBqP,gBAAAA,KAAK,EAAE8f,IAAI,CAAC9f,KAAnC;EAA0CtU,gBAAAA,MAAM,EAAEo0B,IAAI,CAACC,IAAL,CAAUr0B,MAAV,GAAmB;EAArE,eAAX;EACD;EACF,WAZD;EAaD,SAhB+B;;;EAkBhC,YAAIwF,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe8S,KAAf,KAAyBjP,SAA7B,EAAwC;EACtC9B,UAAAA,KAAK,CAAC0I,IAAN,CAAW;EAAEhH,YAAAA,EAAE,EAAEhE,CAAC,CAAC4K,KAAF,GAAUrK,CAAV,EAAayD,EAAnB;EAAuBqP,YAAAA,KAAK,EAAE9O,IAAI,CAACyN,KAAK,CAACzR,CAAD,CAAN,CAAJ,CAAe8S,KAA7C;EAAoDtU,YAAAA,MAAM,EAAE;EAA5D,WAAX;EACD;EACF;EAhC4C;;EAU/C,SAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyR,KAAK,CAACjT,MAA1B,EAAkCwB,CAAC,EAAnC,EAAuC;EAAA,aAA9BA,CAA8B;EAuBtC;EAjC8C;;EAIjD,OAAK,IAAI5B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqO,GAAG,CAACH,IAAJ,CAAS9N,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EAAA,UAAjCA,CAAiC;EA8BzC;;EACD,SAAO2D,KAAP;EACD,CApCD;;EAqCA,WAAc,GAAG+wB,UAAjB;;;ECrEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA,MAAME,QAAQ,GAAG,SAAXA,QAAW,CAASlpB,GAAT,EAAc;EAC7B,WAAOA,GAAG,IAAIzJ,MAAM,CAACqI,SAAP,CAAiBL,QAAjB,CAA0BM,IAA1B,CAA+BmB,GAA/B,MAAwC,iBAAtD;EACD,GAFD;EAIA;;;EACAtH,EAAAA,cAAA,GAAiB,UAASiG,GAAT,EAAc;EAAA;;EAC7B,QAAIuR,MAAM,GAAG,EAAb,CAD6B;;EAG7B,QAAIiZ,KAAK,GAAGD,QAAQ,CAACvqB,GAAD,CAApB;;EACA,QAAIwqB,KAAK,KAAK,IAAd,EAAoB;EAClBxqB,MAAAA,GAAG,GAAGpI,MAAM,CAACC,IAAP,CAAYmI,GAAZ,EAAiBoC,GAAjB,CAAqB,UAAAzL,CAAC,EAAI;EAC9B4a,QAAAA,MAAM,CAACvP,IAAP,CAAYhC,GAAG,CAACrJ,CAAD,CAAf;EACA,eAAOA,CAAP;EACD,OAHK,CAAN;EAID,KAT4B;;;EAW7B,QAAI,OAAOqJ,GAAP,KAAe,QAAnB,EAA6B;EAC3BA,MAAAA,GAAG,GAAG,CAACA,GAAD,CAAN;EACD,KAb4B;;;EAgB7B,QAAI,KAAKgpB,MAAL,CAAYhkB,GAAZ,KAAoB,IAAxB,EAA8B;EAC5B,WAAKrD,KAAL;EACD;;EAED,QAAIrI,KAAK,GAAGmxB,OAAM,CAACzqB,GAAD,EAAMuR,MAAN,EAAc,IAAd,CAAlB;EACA,QAAIva,CAAC,GAAG,KAAK6M,IAAL,CAAU,CAAV,CAAR,CArB6B;;EAuB7B,QAAI2mB,KAAK,KAAK,IAAd,EAAoB;EAClB,UAAIE,KAAK,GAAG,EAAZ;EACApxB,MAAAA,KAAK,CAACxB,OAAN,CAAc,UAAAf,CAAC,EAAI;EACjB2zB,QAAAA,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,GAAiBqgB,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,IAAkB,EAAnC;EACAqgB,QAAAA,KAAK,CAAC3zB,CAAC,CAACsT,KAAH,CAAL,CAAerI,IAAf,CAAoBhL,CAAC,CAACkL,SAAF,CAAYnL,CAAC,CAACiE,EAAd,EAAkBjE,CAAC,CAAChB,MAApB,CAApB;EACD,OAHD;EAIA6B,MAAAA,MAAM,CAACC,IAAP,CAAY6yB,KAAZ,EAAmB5yB,OAAnB,CAA2B,UAAAnB,CAAC,EAAI;EAC9B+zB,QAAAA,KAAK,CAAC/zB,CAAD,CAAL,GAAW,KAAI,CAACuL,SAAL,CAAewoB,KAAK,CAAC/zB,CAAD,CAApB,CAAX;EACD,OAFD;EAGA,aAAO+zB,KAAP;EACD,KAjC4B;;;EAmC7BpxB,IAAAA,KAAK,GAAGA,KAAK,CAAC8I,GAAN,CAAU,UAAArL,CAAC;EAAA,aAAIC,CAAC,CAACkL,SAAF,CAAYnL,CAAC,CAACiE,EAAd,EAAkBjE,CAAC,CAAChB,MAApB,CAAJ;EAAA,KAAX,CAAR;EACA,WAAO,KAAKmM,SAAL,CAAe5I,KAAf,CAAP;EACD,GArCD;;EAsCAS,EAAAA,cAAA,GAAiBA,OAAO,CAAC0wB,MAAzB;;;;;ECrDA;EACA,WAAa,GAAG,cAAA,CAASptB,OAAT,EAAkB;EAAA;;EAChCA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,MAAI2L,KAAK,GAAG,EAAZ;EACA,MAAIvN,IAAI,GAAG,EAAX;EACA,OAAKutB,MAAL,CAAYhgB,KAAZ,GAAoBA,KAApB;EACA,OAAKggB,MAAL,CAAYvtB,IAAZ,GAAmBA,IAAnB;EACA,OAAKutB,MAAL,CAAYhkB,GAAZ,GAAkB,IAAlB;EACA,OAAKnB,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1BqB,IAAAA,CAAC,CAAC2K,KAAF,GAAU3K,CAAC,CAAC2K,KAAF,IAAW,EAArB,CAD0B;;EAG1B,QAAIC,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CAH0B;;EAK1BA,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,UAAI4R,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,IAAoB,CAACmQ,KAAK,CAAC3N,cAAN,CAAqBjE,CAAC,CAACyB,OAAvB,CAAzB,EAA0D;EACxD,eADwD;EAEzD;;EACDmQ,MAAAA,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,GAAmBmQ,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,IAAoB,EAAvC;EACAmQ,MAAAA,KAAK,CAAC5R,CAAC,CAACyB,OAAH,CAAL,CAAiBmJ,IAAjB,CAAsBrM,CAAtB;EAEAiC,MAAAA,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,EAAoB3D,OAApB,CAA4B,UAAA0D,GAAG,EAAI;EACjCC,QAAAA,IAAI,CAACD,GAAD,CAAJ,GAAYC,IAAI,CAACD,GAAD,CAAJ,IAAa,EAAzB;EACAC,QAAAA,IAAI,CAACD,GAAD,CAAJ,CAAUwG,IAAV,CAAerM,CAAf;EACD,OAHD,EAPiB;;EAajB,UAAI0H,OAAO,CAAC9B,IAAZ,EAAkB;EAChBnE,QAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACA4M,QAAAA,KAAK,CAAC5R,CAAC,CAACmE,IAAH,CAAL,GAAgB,IAAhB;EACD;EACF,KAjBD;EAkBD,GAvBD;EAwBA,SAAO,IAAP;EACD,CAhCD;EAkCA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,OAAKytB,MAAL,GAAc,EAAd;EACA,OAAKnlB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,IAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,GAFD,EAF2B;;EAM3B,OAAK0C,OAAL,GAAevM,OAAf,CAAuB,UAAAkM,GAAG,EAAI;EAC5BA,IAAAA,GAAG,CAACglB,MAAJ,GAAa,EAAb;EACAhlB,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,MAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,KAFD;EAGD,GALD;EAMA,SAAO,IAAP;GAZF;;;;;;;EClCA,IAAM9H,WAAS,GAAG,SAAZA,SAAY,CAAApE,GAAG,EAAI;EACvB,SAAOA,GAAG,CAAC0K,MAAJ,CAAW,CAAX,EAAcnG,WAAd,KAA8BvE,GAAG,CAAC2K,MAAJ,CAAW,CAAX,CAArC;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,CAASxH,OAAT,EAAgC;EAAA;;EAAA,MAAdyE,OAAc,uEAAJ,EAAI;;EACpD,MAAI,CAACzE,OAAL,EAAc;EACZ,WAAO,gBAAP;EACD,GAHmD;;;EAKpD,MAAIyE,OAAO,KAAK,IAAhB,EAAsB;EACpBA,IAAAA,OAAO,GAAG;EAAEutB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACD,MAAIvtB,OAAO,KAAK,KAAhB,EAAuB;EACrBA,IAAAA,OAAO,GAAG;EAAEutB,MAAAA,QAAQ,EAAE;EAAZ,KAAV;EACD;;EACDvtB,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAXoD;;EAcpD,OAAKwtB,OAAL,GAdoD;;EAgBpD,OAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,QAAIqS,KAAK,GAAGzQ,OAAZ,CADqB;;EAGrB,QAAI,OAAOA,OAAP,KAAmB,UAAvB,EAAmC;EACjCyQ,MAAAA,KAAK,GAAGzQ,OAAO,CAAC5B,CAAD,CAAf;EACD;;EACD,QAAI8zB,UAAJ,CANqB;;EAQrB,QAAIzhB,KAAK,IAAI,QAAOA,KAAP,MAAiB,QAA1B,IAAsCA,KAAK,CAACxK,GAAN,KAAc,KAAxD,EAA+D;EAC7DisB,MAAAA,UAAU,GAAGzhB,KAAK,CAACxF,IAAnB;;EACA,MAAA,KAAI,CAAChC,IAAL,GAAYkpB,KAAZ,CAAkB1hB,KAAK,CAACxH,IAAN,EAAlB;EACD,KAHD,MAGO,IAAI,OAAOwH,KAAP,KAAiB,QAArB,EAA+B;;EAEpC,UAAIhM,OAAO,CAAC2tB,QAAR,KAAqB,KAArB,IAA8Bh0B,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAW3H,WAAX,EAAlC,EAA4D;EAC1DoP,QAAAA,KAAK,GAAGxP,WAAS,CAACwP,KAAD,CAAjB;EACD;;EACDyhB,MAAAA,UAAU,GAAGf,YAAQ,CAAC1gB,KAAD,EAAQ,KAAI,CAACjN,KAAb,EAAoB,KAAI,CAACyF,IAAL,EAApB,CAArB,CALoC;;EAOpC,UAAIopB,MAAM,GAAG,KAAI,CAAC/oB,SAAL,CAAe4oB,UAAf,CAAb;;EACAG,MAAAA,MAAM,CAACC,MAAP;EACD,KATM,MASA;EACL,aADK;EAEN,KAtBoB;;;EAyBrB,QAAI7tB,OAAO,CAACutB,QAAR,KAAqB,IAAzB,EAA+B;EAC7B,UAAIO,OAAO,GAAGn0B,CAAC,CAACwO,IAAF,CAAO;EAAE5D,QAAAA,KAAK,EAAE;EAAEnG,UAAAA,IAAI,EAAE;EAAR;EAAT,OAAP,EAAkCmG,KAAhD;EACAkpB,MAAAA,UAAU,CAAC,CAAD,CAAV,CAAclpB,KAAd,GAAsB9J,OAAtB,CAA8B,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtC,YAAIw1B,OAAO,CAACx1B,CAAD,CAAX,EAAgB;EACdyB,UAAAA,CAAC,CAACg0B,OAAF,CAAUD,OAAO,CAACx1B,CAAD,CAAP,CAAW8F,IAArB,EAA2B,SAA3B,EAAsC,KAAI,CAACW,KAA3C;EACD;EACF,OAJD;EAKD;;EACDpF,IAAAA,CAAC,CAAC4B,OAAF,CAAUkyB,UAAU,CAAC,CAAD,CAApB,EAAyB,KAAzB,EAjCqB;EAkCtB,GAlCD;EAmCA,SAAO,IAAP;EACD,CApDD;EAsDA;;;EACA,aAAe,GAAG,iBAAS5nB,KAAT,EAAgBtK,QAAhB,EAAyByE,OAAzB,EAAkC;;EAElD,MAAIzE,QAAO,KAAKwC,SAAhB,EAA2B;EACzB,WAAO,KAAKiwB,WAAL,CAAiBnoB,KAAjB,EAAwB7F,OAAxB,CAAP;EACD;;EACD,OAAK6F,KAAL,CAAWA,KAAX,EAAkBmoB,WAAlB,CAA8BzyB,QAA9B,EAAuCyE,OAAvC;EACA,SAAO,IAAP;GANF;;;;;;;;EC5DA;EACAtD,EAAAA,cAAA,GAAiB,UAAStE,GAAT,EAAc;EAAA;;EAC7B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH4B;;;EAK7B,SAAKo1B,OAAL,GAL6B;;EAO7B,SAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI6N,MAAM,GAAGklB,YAAQ,CAACt0B,GAAD,EAAM,KAAI,CAAC2G,KAAX,EAAkB,KAAI,CAACyF,IAAL,EAAlB,CAAR,CAAuC,CAAvC,CAAb,CAFqB;;;EAIrB,UAAIopB,MAAM,GAAG,KAAI,CAAC/oB,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAb;;EACAomB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBl0B,MAAAA,CAAC,CAACiO,MAAF,CAASJ,MAAT,EAAiB,KAAjB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA9K,EAAAA,mBAAA,GAAsBA,OAAO,CAACkL,MAA9B;EACAlL,EAAAA,gBAAA,GAAmBA,OAAO,CAACkL,MAA3B;EAEA;;EACAlL,EAAAA,eAAA,GAAkB,UAAStE,GAAT,EAAc;EAAA;;EAC9B,QAAI,CAACA,GAAL,EAAU;EACR,aAAO,IAAP;EACD,KAH6B;;;EAK9B,SAAKo1B,OAAL,GAL8B;;EAO9B,SAAKhnB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,UAAI6N,MAAM,GAAGklB,YAAQ,CAACt0B,GAAD,EAAM,MAAI,CAAC2G,KAAX,EAAkB,MAAI,CAACyF,IAAL,EAAlB,CAAR,CAAuC,CAAvC,CAAb,CAFqB;;;EAIrB,UAAIopB,MAAM,GAAG,MAAI,CAAC/oB,SAAL,CAAe,CAAC2C,MAAD,CAAf,CAAb;;EACAomB,MAAAA,MAAM,CAACC,MAAP,GALqB;;EAOrBl0B,MAAAA,CAAC,CAACkO,OAAF,CAAUL,MAAV,EAAkB,MAAlB;EACD,KARD;EASA,WAAO,IAAP;EACD,GAjBD;;EAkBA9K,EAAAA,oBAAA,GAAuBA,OAAO,CAACmL,OAA/B;EAEA;;EACAnL,EAAAA,cAAA,GAAiB,YAAW;;EAE1B,SAAK8wB,OAAL;EACA,QAAIhnB,IAAI,GAAG,KAAKA,IAAL,CAAUyB,KAAV,CAAgB,CAAhB,CAAX,CAH0B;;EAK1B,SAAK,IAAI3P,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG21B,SAAS,CAACv1B,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,UAAI41B,GAAG,GAAGD,SAAS,CAAC31B,CAAD,CAAnB,CADyC;;EAGzC,UAAI,OAAO41B,GAAP,KAAe,QAAnB,EAA6B;EAC3B,YAAIvrB,GAAG,GAAG+pB,YAAQ,CAACwB,GAAD,EAAM,KAAKnvB,KAAX,CAAlB,CAD2B;;EAG3ByH,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYpE,GAAZ,CAAP;EACD,OAJD,MAIO,IAAIurB,GAAG,CAAC1sB,GAAJ,KAAY,KAAhB,EAAuB;EAC5BgF,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYmnB,GAAG,CAAC1nB,IAAhB,CAAP;EACD,OAFM,MAEA,IAAI0nB,GAAG,CAAC1sB,GAAJ,KAAY,QAAhB,EAA0B;EAC/BgF,QAAAA,IAAI,CAAC7B,IAAL,CAAUupB,GAAV;EACD;EACF;;EACD,WAAO,KAAKrpB,SAAL,CAAe2B,IAAf,CAAP;EACD,GAnBD;EAqBA;;;EACA9J,EAAAA,iBAAA,GAAiB,UAASmJ,KAAT,EAAgB;EAAA;;;EAE/B,SAAK2nB,OAAL;EACA,QAAIW,QAAQ,GAAG,IAAf;;EACA,QAAItoB,KAAJ,EAAW;EACTsoB,MAAAA,QAAQ,GAAG,KAAKtoB,KAAL,CAAWA,KAAX,CAAX;EACD;;EACDsoB,IAAAA,QAAQ,CAAC3nB,IAAT,CAAc/L,OAAd,CAAsB,UAAA+M,MAAM;EAAA,aAAIA,MAAM,UAAN,CAAc,MAAd,CAAJ;EAAA,KAA5B;EACA,WAAO,IAAP;EACD,GATD;;;EAWA9K,EAAAA,cAAA,GAAiBA,OAAO,UAAxB;;;;;;;;;;EC/EA,IAAM0xB,UAAU,GAAG;EACjBjzB,EAAAA,KAAK,EAAE,IADU;EAEjBK,EAAAA,OAAO,EAAE,IAFQ;EAGjB0C,EAAAA,IAAI,EAAE;EAHW,CAAnB;EAMA;;EACA,UAAY,GAAG,aAAA,CAAS8B,OAAT,EAAkB;EAAA;;EAC/BA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAD+B;;EAG/B,MAAIquB,QAAQ,GAAG,KAAf;;EACA,MAAI,KAAKrnB,OAAL,GAAetO,MAAf,KAA0B,CAA9B,EAAiC;EAC/B21B,IAAAA,QAAQ,GAAG,IAAX;EACD,GAN8B;;;EAQ/B,MAAIruB,OAAO,KAAK,MAAZ,IAAuB,QAAOA,OAAP,MAAmB,QAAnB,IAA+BA,OAAO,CAAC9B,IAAlE,EAAyE;EACvE,SAAKsI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,MAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,YAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,UAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACD;EACF,OAJD;EAKD,KAND;EAOD;;EAED,MAAIyG,GAAG,GAAG,KAAKgB,IAAL,CAAUnK,MAAV,CAAiB,UAACjE,GAAD,EAAMuB,CAAN,EAASrB,CAAT,EAAe;EACxC,QAAMg2B,OAAO,GAAG,CAACD,QAAD,IAAa/1B,CAAC,KAAK,CAAnC;EACA,QAAMi2B,QAAQ,GAAG,CAACF,QAAD,IAAa/1B,CAAC,KAAK,KAAI,CAACkO,IAAL,CAAU9N,MAAV,GAAmB,CAAvD;EACA,WAAON,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO2H,OAAP,EAAgBsuB,OAAhB,EAAyBC,QAAzB,CAAb;EACD,GAJS,EAIP,EAJO,CAAV,CAlB+B;;EAyB/B,MAAIH,UAAU,CAACpuB,OAAD,CAAV,KAAwB,IAAxB,IAAgCA,OAAO,CAACxE,OAAR,KAAoB,IAApD,IAA4DwE,OAAO,CAAC7E,KAAR,KAAkB,IAA9E,IAAsF6E,OAAO,CAAC9B,IAAR,KAAiB,IAA3G,EAAiH;EAC/GsH,IAAAA,GAAG,GAAGA,GAAG,CAACnK,IAAJ,EAAN;EACD;;EACD,SAAOmK,GAAP;GA5BF;;;;;;ECPA;EACA,IAAMgpB,WAAW,GAAG,SAAdA,WAAc,CAAS7nB,GAAT,EAAc;EAChC,MAAI8nB,OAAO,GAAG,CAAd;EACA,MAAI/wB,KAAK,GAAG,CAAZ;EACA,MAAIgxB,OAAO,GAAG,EAAd;EACA/nB,EAAAA,GAAG,CAACimB,QAAJ,GAAenyB,OAAf,CAAuB,UAAA2G,IAAI,EAAI;EAC7BstB,IAAAA,OAAO,CAACttB,IAAI,CAACzD,EAAN,CAAP,GAAmB;EACjBD,MAAAA,KAAK,EAAEA,KADU;EAEjBG,MAAAA,KAAK,EAAE4wB,OAAO,GAAGrtB,IAAI,CAACrF,GAAL,CAASrD,MAFT;EAGjBA,MAAAA,MAAM,EAAE0I,IAAI,CAAC/I,IAAL,CAAUK;EAHD,KAAnB;EAKA+1B,IAAAA,OAAO,IAAIrtB,IAAI,CAACrF,GAAL,CAASrD,MAAT,GAAkB0I,IAAI,CAAC/I,IAAL,CAAUK,MAA5B,GAAqC0I,IAAI,CAACpF,IAAL,CAAUtD,MAA1D;EACAgF,IAAAA,KAAK,IAAI,CAAT;EACD,GARD;EASA,SAAOgxB,OAAP;EACD,CAdD;;EAgBA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAShoB,GAAT,EAAc/H,MAAd,EAAsBoB,OAAtB,EAA+B;;EAEhD,MAAI0uB,OAAO,GAAGF,WAAW,CAAC7nB,GAAG,CAAC2B,GAAJ,EAAD,CAAzB,CAFgD;;EAIhD,MAAItI,OAAO,CAACuE,KAAR,CAAc7G,KAAd,IAAuBsC,OAAO,CAACtC,KAAnC,EAA0C;EACxCkB,IAAAA,MAAM,CAACnE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,MAAAA,CAAC,CAAC6K,KAAF,CAAQ9J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,QAAAA,CAAC,CAAC2D,KAAF,GAAUgxB,OAAO,CAAC30B,CAAC,CAAC4D,EAAH,CAAP,CAAcD,KAAxB;EACD,OAFD;EAGAhE,MAAAA,CAAC,CAACgE,KAAF,GAAUhE,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7G,KAArB;EACD,KALD;EAMD,GAX+C;;;EAahD,MAAIsC,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAApC,EAA4C;EAC1C9C,IAAAA,MAAM,CAACnE,OAAP,CAAe,UAAAf,CAAC,EAAI;EAClBA,MAAAA,CAAC,CAAC6K,KAAF,CAAQ9J,OAAR,CAAgB,UAAAV,CAAC,EAAI;EACnBA,QAAAA,CAAC,CAAC2H,MAAF,GAAWgtB,OAAO,CAAC30B,CAAC,CAAC4D,EAAH,CAAP,IAAiB,EAA5B;EACD,OAFD,EADkB;;;;;;;EAUlBjE,MAAAA,CAAC,CAACgI,MAAF,GAAWhI,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7C,MAAtB;EACAhI,MAAAA,CAAC,CAACgI,MAAF,CAAShJ,MAAT,GAAkBgB,CAAC,CAACrB,IAAF,CAAOK,MAAzB;EACD,KAZD;EAaD;EACF,CA5BD;;EA6BA,WAAc,GAAGi2B,UAAjB;;;EC7CA,MAAMC,YAAY,GAAG;EAAEv2B,IAAAA,IAAI,EAAE,IAAR;EAAckM,IAAAA,KAAK,EAAE,IAArB;EAA2BlJ,IAAAA,IAAI,EAAE;EAAjC,GAArB;;EAGA,MAAMwzB,UAAU,GAAG,SAAbA,UAAa,CAAS7uB,OAAT,EAAkB;EACnCA,IAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBgtB,YAAlB,EAAgC5uB,OAAhC,CAAV;;EAEA,QAAIA,OAAO,CAACuG,MAAZ,EAAoB;EAClBvG,MAAAA,OAAO,CAACxE,OAAR,GAAkB,IAAlB;EACD,KALkC;;;EAOnC,QAAIwE,OAAO,CAAC0B,MAAZ,EAAoB;EAClB1B,MAAAA,OAAO,CAAC3H,IAAR,GAAe,IAAf;;EACA,UAAI,CAAC2H,OAAO,CAACuE,KAAT,IAAkBvE,OAAO,CAACuE,KAAR,KAAkB,IAAxC,EAA8C;EAC5CvE,QAAAA,OAAO,CAACuE,KAAR,GAAgB,EAAhB;EACD;;EACDvE,MAAAA,OAAO,CAACuE,KAAR,CAAc7C,MAAd,GAAuB,IAAvB;EACD;;EACD,QAAI1B,OAAO,CAACtC,KAAR,IAAiBsC,OAAO,CAACuE,KAAR,CAAc7G,KAAnC,EAA0C;EACxCsC,MAAAA,OAAO,CAACuE,KAAR,GAAgBvE,OAAO,CAACuE,KAAR,KAAkB,IAAlB,GAAyB,EAAzB,GAA8BvE,OAAO,CAACuE,KAAtD;EACAvE,MAAAA,OAAO,CAACuE,KAAR,CAAc5G,EAAd,GAAmB,IAAnB;EACD;;EACD,WAAOqC,OAAP;EACD,GAnBD;EAqBA;;;EACAtD,EAAAA,YAAA,GAAe,YAAuB;EAAA;;EAAA,QAAdsD,OAAc,uEAAJ,EAAI;;;EAEpC,QAAI,OAAOA,OAAP,KAAmB,QAAnB,IAA+B,KAAKwG,IAAL,CAAUxG,OAAV,CAAnC,EAAuD;EACrD,aAAO,KAAKwG,IAAL,CAAUxG,OAAV,EAAmBmI,IAAnB,CAAwBymB,YAAxB,CAAP;EACD;;EAED5uB,IAAAA,OAAO,GAAG6uB,UAAU,CAAC7uB,OAAD,CAApB,CANoC;;EASpC,QAAIA,OAAO,CAAC9B,IAAR,KAAiB,IAArB,EAA2B;EACzB,WAAKsI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrBA,QAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC,EAAI;EACrB,cAAIA,CAAC,CAACmE,IAAF,KAAW,IAAf,EAAqB;EACnBnE,YAAAA,CAAC,CAACuzB,OAAF,CAAU,KAAI,CAACvuB,KAAf;EACD;EACF,SAJD;EAKD,OAND;EAOD;;EAED,QAAIH,MAAM,GAAG,KAAK4H,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EAC9B,aAAOA,CAAC,CAACwO,IAAF,CAAOnI,OAAP,EAAgB,KAAI,CAACjB,KAArB,CAAP;EACD,KAFY,CAAb,CAnBoC;;EAuBpC,QAAIiB,OAAO,CAACuE,KAAR,CAAc7C,MAAd,IAAwB1B,OAAO,CAAC0B,MAAhC,IAA0C1B,OAAO,CAACuE,KAAR,CAAc7G,KAAxD,IAAiEsC,OAAO,CAACtC,KAA7E,EAAoF;EAClFgxB,MAAAA,OAAO,CAAC,IAAD,EAAO9vB,MAAP,EAAeoB,OAAf,CAAP;EACD,KAzBmC;;;EA2BpC,QAAIA,OAAO,CAAC8uB,SAAR,IAAqB9uB,OAAO,CAAC+uB,IAA7B,IAAqC/uB,OAAO,CAAC6I,KAAjD,EAAwD;EACtD,UAAI7E,GAAG,GAAG,EAAV;EACA,WAAKwC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,YAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAV;EACA2L,QAAAA,GAAG,CAAC5L,GAAD,CAAH,GAAW4L,GAAG,CAAC5L,GAAD,CAAH,IAAY,CAAvB;EACA4L,QAAAA,GAAG,CAAC5L,GAAD,CAAH,IAAY,CAAZ;EACD,OAJD;EAKA,WAAKoO,IAAL,CAAU/L,OAAV,CAAkB,UAACd,CAAD,EAAIrB,CAAJ,EAAU;EAC1BsG,QAAAA,MAAM,CAACtG,CAAD,CAAN,CAAUuQ,KAAV,GAAkB7E,GAAG,CAACrK,CAAC,CAACtB,IAAF,CAAO,SAAP,CAAD,CAArB;EACD,OAFD;EAGD,KArCmC;;;EAuCpC,QAAI2H,OAAO,CAACuG,MAAZ,EAAoB;EAClB,UAAIyoB,OAAO,GAAG,EAAd;EACApwB,MAAAA,MAAM,GAAGA,MAAM,CAACsG,MAAP,CAAc,UAAAxL,CAAC,EAAI;EAC1B,YAAIs1B,OAAO,CAACt1B,CAAC,CAAC8B,OAAH,CAAP,KAAuB,IAA3B,EAAiC;EAC/B,iBAAO,KAAP;EACD;;EACDwzB,QAAAA,OAAO,CAACt1B,CAAC,CAAC8B,OAAH,CAAP,GAAqB,IAArB;EACA,eAAO,IAAP;EACD,OANQ,CAAT;EAOD;;EACD,WAAOoD,MAAP;EACD,GAlDD;;;EAqDAlC,EAAAA,YAAA,GAAeA,OAAO,CAACyL,IAAvB;;;;;;EC/EA;EACA,MAAM8mB,KAAK,GAAG,SAAd;;EAEA,MAAM5sB,MAAM,GAAG,SAATA,MAAS,CAASjK,GAAT,EAAckK,KAAd,EAAqB;EAClClK,IAAAA,GAAG,GAAGA,GAAG,CAACmK,QAAJ,EAAN;;EACA,WAAOnK,GAAG,CAACM,MAAJ,GAAa4J,KAApB,EAA2B;EACzBlK,MAAAA,GAAG,IAAI,GAAP;EACD;;EACD,WAAOA,GAAP;EACD,GAND;;EAQA,WAAS8J,YAAT,GAAwB;EACtB,WAAO,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACC,QAA/C;EACD;;;EAGD,MAAM8sB,GAAG,GAAG;EACVnH,IAAAA,KAAK,EAAE,SADG;EAEVE,IAAAA,GAAG,EAAE,SAFK;EAGVkH,IAAAA,IAAI,EAAE,SAHI;EAIVC,IAAAA,OAAO,EAAE,SAJC;EAKVC,IAAAA,IAAI,EAAE,SALI;EAMVrH,IAAAA,MAAM,EAAE,SANE;EAOVsH,IAAAA,KAAK,EAAE;EAPG,GAAZ;;EAUA,MAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAS5oB,GAAT,EAAc;EAClC,QAAI1D,MAAM,GAAG0D,GAAG,CAAC5H,KAAJ,CAAUX,IAAvB;EACAuI,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB8I,MAAAA,OAAO,CAACC,GAAR,CAAY,UAAU/I,CAAC,CAACtB,IAAF,EAAV,GAAqB,GAAjC,EAAsC,iBAAtC;EACA,UAAIkM,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,YAAIhB,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG+F,MAAM,CAAC/F,IAAD,EAAO,CAAP,CAAb;EACA,YAAIL,KAAK,GAAGmC,IAAI,CAACqJ,IAAL,CAAU,UAAAtJ,GAAG;EAAA,iBAAI8E,MAAM,CAAC9E,GAAD,CAAN,IAAe8E,MAAM,CAAC9E,GAAD,CAAN,CAAYmV,KAA/B;EAAA,SAAb,CAAZ;EACA,YAAIA,KAAK,GAAG,WAAZ;;EACA,YAAIrQ,MAAM,CAAChH,KAAD,CAAV,EAAmB;EACjBqX,UAAAA,KAAK,GAAGrQ,MAAM,CAAChH,KAAD,CAAN,CAAcqX,KAAtB;EACAA,UAAAA,KAAK,GAAG4b,GAAG,CAAC5b,KAAD,CAAX;EACD;;EACD7Q,QAAAA,OAAO,CAACC,GAAR,cAAkBpG,IAAlB,oBAAgC8B,IAAI,CAACzD,IAAL,CAAU,IAAV,CAAhC,oBAA6D2Y,KAAK,IAAI,WAAtE;EACD,OAfD;EAgBD,KAnBD;EAoBD,GAtBD;;;EAyBA,MAAMkc,GAAG,GAAG;EACVzH,IAAAA,KAAK,EAAE,eAAS3vB,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAHS;EAIVhH,IAAAA,GAAG,EAAE,aAAS7vB,GAAT,EAAc;EACjB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KANS;EAOVE,IAAAA,IAAI,EAAE,cAAS/2B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KATS;EAUVG,IAAAA,OAAO,EAAE,iBAASh3B,GAAT,EAAc;EACrB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAZS;EAaVI,IAAAA,IAAI,EAAE,cAASj3B,GAAT,EAAc;EAClB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAfS;EAgBVjH,IAAAA,MAAM,EAAE,gBAAS5vB,GAAT,EAAc;EACpB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD,KAlBS;EAmBVK,IAAAA,KAAK,EAAE,eAASl3B,GAAT,EAAc;EACnB,aAAO,aAAaA,GAAb,GAAmB62B,KAA1B;EACD;EArBS,GAAZ;;EAwBA,MAAMQ,SAAS,GAAG,SAAZA,SAAY,CAASrxB,IAAT,EAAeW,KAAf,EAAsB;EACtCX,IAAAA,IAAI,GAAGA,IAAI,CAAC2G,GAAL,CAAS,UAAA5G,GAAG,EAAI;EACrB,UAAI,CAACY,KAAK,CAACX,IAAN,CAAWJ,cAAX,CAA0BG,GAA1B,CAAL,EAAqC;EACnC,eAAOA,GAAP;EACD;;EACD,UAAMrF,CAAC,GAAGiG,KAAK,CAACX,IAAN,CAAWD,GAAX,EAAgBmV,KAAhB,IAAyB,MAAnC;EACA,aAAOkc,GAAG,CAAC12B,CAAD,CAAH,CAAOqF,GAAP,CAAP;EACD,KANM,CAAP;EAOA,WAAOC,IAAI,CAACzD,IAAL,CAAU,IAAV,CAAP;EACD,GATD;;;EAYA,MAAM+0B,KAAK,GAAG,SAARA,KAAQ,CAAS/oB,GAAT,EAAc;EAC1B,QAAIzE,YAAY,EAAhB,EAAoB;EAClBqtB,MAAAA,aAAa,CAAC5oB,GAAD,CAAb;EACA,aAAOA,GAAP;EACD;;EACDlE,IAAAA,OAAO,CAACC,GAAR,CAAY8sB,GAAG,CAACL,IAAJ,CAAS,OAAT,CAAZ;EACAxoB,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB8I,MAAAA,OAAO,CAACC,GAAR,CAAY8sB,GAAG,CAACL,IAAJ,CAAS,SAAT,CAAZ;EACA,UAAI5qB,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAIqE,IAAI,GAAG7D,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAAX;EACA,YAAI/F,IAAI,GAAG0B,CAAC,CAAC1B,IAAF,IAAU,GAArB;;EACA,YAAI0B,CAAC,CAACuD,QAAN,EAAgB;EACdjF,UAAAA,IAAI,GAAG,MAAM0B,CAAC,CAACuD,QAAR,GAAmB,GAA1B;EACD;;EACD,QAAiC;EAC/BjF,UAAAA,IAAI,GAAGm3B,GAAG,CAACxH,MAAJ,CAAW3vB,IAAX,CAAP;EACD;;EACD,YAAIiE,IAAI,GAAG,MAAMjE,IAAN,GAAa,GAAxB;EACAiE,QAAAA,IAAI,GAAG+F,MAAM,CAAC/F,IAAD,EAAO,EAAP,CAAb;EACA,YAAIlE,GAAG,GAAGo3B,GAAG,CAACL,IAAJ,CAAS,MAAT,IAAmB7yB,IAAnB,GAA0B,MAA1B,GAAmCmzB,SAAS,CAACrxB,IAAD,EAAOuI,GAAG,CAAC5H,KAAX,CAAtD;EACA0D,QAAAA,OAAO,CAACC,GAAR,CAAYtK,GAAZ;EACD,OAbD;EAcD,KAjBD;EAkBAqK,IAAAA,OAAO,CAACC,GAAR,CAAY,EAAZ;EACA,WAAOiE,GAAP;EACD,GA1BD;;EA2BAgpB,EAAAA,cAAA,GAAiBD,KAAjB;;;EClHA,IAAME,IAAI,GAAG,SAAPA,IAAO,CAASjpB,GAAT,EAAc;EACzB,MAAIH,IAAI,GAAGG,GAAG,CAACwB,IAAJ,CAAS;EAAE9P,IAAAA,IAAI,EAAE,KAAR;EAAekM,IAAAA,KAAK,EAAE,KAAtB;EAA6B/I,IAAAA,OAAO,EAAE;EAAtC,GAAT,CAAX,CADyB;;EAGzB,MAAIwI,GAAG,GAAG,EAAV;EACAwC,EAAAA,IAAI,CAAC/L,OAAL,CAAa,UAAAf,CAAC,EAAI;EAChB,QAAI,CAACsK,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAR,EAAqB;EACnB9B,MAAAA,CAAC,CAACmP,KAAF,GAAU,CAAV;EACA7E,MAAAA,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAH,GAAiB9B,CAAjB;EACD;;EACDsK,IAAAA,GAAG,CAACtK,CAAC,CAAC8B,OAAH,CAAH,CAAeqN,KAAf,IAAwB,CAAxB;EACD,GAND;EAOA,MAAIlG,GAAG,GAAGpI,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,EAAiBe,GAAjB,CAAqB,UAAAzL,CAAC;EAAA,WAAI0K,GAAG,CAAC1K,CAAD,CAAP;EAAA,GAAtB,CAAV,CAXyB;;EAazBqJ,EAAAA,GAAG,CAACrB,IAAJ,CAAS,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACjB,QAAID,CAAC,CAACiQ,KAAF,GAAUhQ,CAAC,CAACgQ,KAAhB,EAAuB;EACrB,aAAO,CAAC,CAAR;EACD,KAFD,MAEO,IAAIjQ,CAAC,CAACiQ,KAAF,GAAUhQ,CAAC,CAACgQ,KAAhB,EAAuB;EAC5B,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAPD;EAQA,SAAOlG,GAAP;EACD,CAtBD;;EAuBA,SAAc,GAAGitB,IAAjB;;ECpBA;;EACA,WAAa,GAAG,gBAAA,GAAW;EACzBF,EAAAA,MAAK,CAAC,IAAD,CAAL;EACA,SAAO,IAAP;EACD,CAHD;EAKA;;;EACA,OAAW,GAAG,YAAA,CAASrxB,MAAT,EAAiB;EAC7B,MAAIA,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKhG,IAAL,EAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,QAAf,EAAyB;EACvB,WAAO,KAAKhG,IAAL,CAAU,QAAV,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAK8J,IAAL,EAAP;EACD;;EACD,MAAI9J,MAAM,KAAK,QAAX,IAAuBA,MAAM,KAAK,SAAtC,EAAiD;EAC/C,WAAO,KAAK8J,IAAL,CAAU;EAAEzG,MAAAA,MAAM,EAAE;EAAV,KAAV,CAAP;EACD;;EACD,MAAIrD,MAAM,KAAK,OAAf,EAAwB;EACtB,WAAO,KAAK8J,IAAL,CAAU;EAAE5D,MAAAA,KAAK,EAAE;EAAT,KAAV,EAA4BQ,GAA5B,CAAgC,UAAAf,GAAG;EAAA,aAAIA,GAAG,CAAC3L,IAAR;EAAA,KAAnC,CAAP;EACD;;EACD,MAAIgG,MAAM,KAAK,MAAX,IAAqBA,MAAM,KAAK,WAApC,EAAiD;EAC/C,WAAOuxB,KAAI,CAAC,IAAD,CAAX;EACD;;EACD,MAAIvxB,MAAM,KAAK,OAAf,EAAwB;EACtB,QAAImI,IAAI,GAAG,EAAX;EACA,SAAK2B,IAAL,CAAU;EAAE9P,MAAAA,IAAI,EAAE,KAAR;EAAekM,MAAAA,KAAK,EAAE;EAAElM,QAAAA,IAAI,EAAE;EAAR;EAAtB,KAAV,EAAkDoC,OAAlD,CAA0D,UAAAuJ,GAAG,EAAI;EAC/D,UAAIO,KAAK,GAAGP,GAAG,CAACO,KAAJ,CAAUQ,GAAV,CAAc,UAAAhL,CAAC;EAAA,eAAIA,CAAC,CAAC1B,IAAN;EAAA,OAAf,CAAZ;EACAkM,MAAAA,KAAK,GAAGA,KAAK,CAACW,MAAN,CAAa,UAAAnL,CAAC;EAAA,eAAIA,CAAJ;EAAA,OAAd,CAAR;EACAyM,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYxC,KAAZ,CAAP;EACD,KAJD;EAKA,WAAOiC,IAAP;EACD;;EACD,MAAInI,MAAM,KAAK,MAAf,EAAuB;EACrB,WAAO,KAAKmI,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EACxB,aAAOA,CAAC,CAAC4K,KAAF,GAAUlI,MAAV,CAAiB,UAAClD,CAAD,EAAIY,CAAJ,EAAU;EAChCZ,QAAAA,CAAC,CAACY,CAAC,CAACoB,KAAF,IAAWpB,CAAC,CAACuD,QAAd,CAAD,GAA2B/C,MAAM,CAACC,IAAP,CAAYT,CAAC,CAACqE,IAAd,CAA3B;EACA,eAAOjF,CAAP;EACD,OAHM,EAGJ,EAHI,CAAP;EAID,KALM,CAAP;EAMD;;EACD,MAAIkF,MAAM,KAAK,OAAf,EAAwB;EACtBqxB,IAAAA,MAAK,CAAC,IAAD,CAAL;EACA,WAAO,IAAP;EACD;;EACD,SAAO,KAAKr3B,IAAL,EAAP;GAxCF;;;;;;;ECVA,IAAM+L,SAAO,GAAG;;EAEdyrB,EAAAA,KAAK,EAAE,eAACj3B,CAAD,EAAIC,CAAJ,EAAU;EACf,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACP,IAAF,CAAO,OAAP,CAAX;EACA,QAAI03B,KAAK,GAAGl3B,CAAC,CAACR,IAAF,CAAO,OAAP,CAAZ;;EACA,QAAIy3B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,WAAO,CAAP;EACD,GAZa;;;EAedr3B,EAAAA,MAAM,EAAE,gBAACE,CAAD,EAAIC,CAAJ,EAAU;EAChB,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACP,IAAF,GAASgD,IAAT,GAAgB3C,MAA3B;EACA,QAAIq3B,KAAK,GAAGl3B,CAAC,CAACR,IAAF,GAASgD,IAAT,GAAgB3C,MAA5B;;EACA,QAAIo3B,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAzBa;;;EA4BdjF,EAAAA,SAAS,EAAE,mBAAClyB,CAAD,EAAIC,CAAJ,EAAU;EACnB,QAAIi3B,IAAI,GAAGl3B,CAAC,CAACkyB,SAAF,EAAX;EACA,QAAIiF,KAAK,GAAGl3B,CAAC,CAACiyB,SAAF,EAAZ;;EACA,QAAIgF,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD;EAtCa,CAAhB;EAyCA;;EACA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASrpB,GAAT,EAAc;EAC3B,MAAIspB,MAAM,GAAG,EAAb;EACA,MAAMjwB,OAAO,GAAG;EACd,YAAM,IADQ;EAEdY,IAAAA,WAAW,EAAE,KAFC;EAGdF,IAAAA,UAAU,EAAE,IAHE;EAIdpG,IAAAA,OAAO,EAAE;EAJK,GAAhB;EAMAqM,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO2H,OAAP,CAAV;EACAiwB,IAAAA,MAAM,CAAC73B,GAAD,CAAN,GAAc63B,MAAM,CAAC73B,GAAD,CAAN,IAAe,CAA7B;EACA63B,IAAAA,MAAM,CAAC73B,GAAD,CAAN,IAAe,CAAf;EACD,GAJD,EAR2B;;EAc3BuO,EAAAA,GAAG,CAACH,IAAJ,CAASlF,IAAT,CAAc,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACtB,QAAIi3B,IAAI,GAAGG,MAAM,CAACr3B,CAAC,CAACP,IAAF,CAAO2H,OAAP,CAAD,CAAjB;EACA,QAAI+vB,KAAK,GAAGE,MAAM,CAACp3B,CAAC,CAACR,IAAF,CAAO2H,OAAP,CAAD,CAAlB;;EACA,QAAI8vB,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAP;EACD;;EACD,QAAID,IAAI,GAAGC,KAAX,EAAkB;EAChB,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAVD;EAWA,SAAOppB,GAAP;EACD,CA1BD;;;EA6BA,IAAMupB,cAAc,GAAG,SAAjBA,cAAiB,CAASvpB,GAAT,EAAc;EACnC,MAAIwpB,KAAK,GAAG,EAAZ;EACAxpB,EAAAA,GAAG,CAACwB,IAAJ,CAAS;EAAE5D,IAAAA,KAAK,EAAE;EAAE7C,MAAAA,MAAM,EAAE;EAAV;EAAT,GAAT,EAAsCjH,OAAtC,CAA8C,UAAAf,CAAC,EAAI;EACjDy2B,IAAAA,KAAK,CAACz2B,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW5G,EAAZ,CAAL,GAAuBjE,CAAC,CAAC6K,KAAF,CAAQ,CAAR,EAAW7C,MAAX,CAAkB7D,KAAzC;EACD,GAFD;EAGA8I,EAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAASlF,IAAT,CAAc,UAAC1I,CAAD,EAAIC,CAAJ,EAAU;EACjC,QAAIs3B,KAAK,CAACv3B,CAAC,CAACiF,KAAH,CAAL,GAAiBsyB,KAAK,CAACt3B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EACnC,aAAO,CAAP;EACD,KAFD,MAEO,IAAIsyB,KAAK,CAACv3B,CAAC,CAACiF,KAAH,CAAL,GAAiBsyB,KAAK,CAACt3B,CAAC,CAACgF,KAAH,CAA1B,EAAqC;EAC1C,aAAO,CAAC,CAAR;EACD;;EACD,WAAO,CAAP;EACD,GAPU,CAAX;EAQA,SAAO8I,GAAP;EACD,CAdD;;;AAiBAvC,WAAO,CAACgsB,YAAR,GAAuBhsB,SAAO,CAACyrB,KAA/B;AACAzrB,WAAO,CAACisB,SAAR,GAAoBjsB,SAAO,CAAC0mB,SAA5B;;EAGA,IAAMwF,QAAQ,GAAG;EACf5yB,EAAAA,KAAK,EAAE,IADQ;EAEf6yB,EAAAA,QAAQ,EAAE,IAFK;EAGfnc,EAAAA,GAAG,EAAE,IAHU;EAIfoc,EAAAA,UAAU,EAAE,IAJG;EAKfC,EAAAA,KAAK,EAAE,IALQ;EAMfC,EAAAA,aAAa,EAAE;EANA,CAAjB;EASA;;EACA,QAAY,GAAG,aAAA,CAAS1kB,KAAT,EAAgB;EAC7BA,EAAAA,KAAK,GAAGA,KAAK,IAAI,OAAjB,CAD6B;;EAG7B,MAAIA,KAAK,KAAK,MAAV,IAAoBA,KAAK,KAAK,WAA9B,IAA6CA,KAAK,KAAK,MAA3D,EAAmE;EACjE,WAAOgkB,MAAM,CAAC,IAAD,CAAb;EACD;;EACD,MAAIM,QAAQ,CAACtyB,cAAT,CAAwBgO,KAAxB,CAAJ,EAAoC;EAClC,WAAOkkB,cAAc,CAAC,IAAD,CAArB;EACD;;EAEDlkB,EAAAA,KAAK,GAAG5H,SAAO,CAAC4H,KAAD,CAAP,IAAkBA,KAA1B,CAV6B;;EAY7B,MAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;EAC/B,SAAKxF,IAAL,GAAY,KAAKA,IAAL,CAAUlF,IAAV,CAAe0K,KAAf,CAAZ;EACA,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAjBD;EAmBA;;;EACA,WAAe,GAAG,gBAAA,GAAW;EAC3B,MAAIxF,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACAA,EAAAA,IAAI,GAAGA,IAAI,CAACokB,OAAL,EAAP;EACA,SAAO,KAAK/lB,SAAL,CAAe2B,IAAf,CAAP;EACD,CAJD;EAMA;;;EACA,YAAc,GAAG,eAAA,GAAW;EAC1B,MAAIA,IAAI,GAAG,GAAGO,MAAH,CAAU,KAAKP,IAAf,CAAX;EACA,MAAIxC,GAAG,GAAG,EAAV;EACAwC,EAAAA,IAAI,GAAGA,IAAI,CAACtB,MAAL,CAAY,UAAAvL,CAAC,EAAI;EACtB,QAAIvB,GAAG,GAAGuB,CAAC,CAACtB,IAAF,CAAO,SAAP,EAAkBgD,IAAlB,EAAV;;EACA,QAAI2I,GAAG,CAAChG,cAAJ,CAAmB5F,GAAnB,MAA4B,IAAhC,EAAsC;EACpC,aAAO,KAAP;EACD;;EACD4L,IAAAA,GAAG,CAAC5L,GAAD,CAAH,GAAW,IAAX;EACA,WAAO,IAAP;EACD,GAPM,CAAP;EAQA,SAAO,KAAKyM,SAAL,CAAe2B,IAAf,CAAP;GAXF;;;;;;;;EChIA,IAAMmqB,OAAO,GAAG,mEAAhB;EACA,IAAMC,MAAM,GAAG,eAAf;EAEA,IAAMxsB,SAAO,GAAG;;EAEd1D,EAAAA,UAAU,EAAE,oBAASiG,GAAT,EAAc;EACxB,QAAIkqB,OAAO,GAAGlqB,GAAG,CAACH,IAAJ,CAASzB,GAAT,CAAa,UAAAwH,EAAE;EAAA,aAAIA,EAAE,CAAChI,KAAH,EAAJ;EAAA,KAAf,CAAd;EACAssB,IAAAA,OAAO,CAACp2B,OAAR,CAAgB,UAAC8J,KAAD,EAAQ7K,CAAR,EAAc;EAC5B6K,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtB,YAAIyB,CAAC,CAAC+2B,OAAF,OAAgB,IAApB,EAA0B;EACxB/2B,UAAAA,CAAC,CAACiC,IAAF,GAAS,KAAT;EACA;EACD,SALqB;;;EAOtBjC,QAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAR;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT,CARsB;;EAUtB,YAAIgJ,KAAK,CAAC7L,MAAN,GAAe,CAAf,KAAqBJ,CAArB,IAA0B,CAACu4B,OAAO,CAACn3B,CAAC,GAAG,CAAL,CAAtC,EAA+C;EAC7C;EACD,SAZqB;;;EActB,YAAIK,CAAC,CAACuD,QAAF,IAAcD,OAAO,CAACtD,CAAC,CAAC1B,IAAH,CAAP,KAAoB,IAAtC,EAA4C;EAC1C;EACD,SAhBqB;;;EAkBtB,YAAI0B,CAAC,CAAC2U,SAAF,OAAkB,IAAtB,EAA4B;EAC1B;EACD;;EAED3U,QAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD,OAvBD;EAwBD,KAzBD;EA0BD,GA9Ba;EAgCd4E,EAAAA,WAAW,EAAE,qBAASgsB,QAAT,EAAmB;EAC9BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;;EAEpB,UAAIA,CAAC,CAAC2U,SAAF,OAAkB,IAAtB,EAA4B;EAC1B3U,QAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;;EACDjC,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAco1B,OAAd,EAAuB,EAAvB,CAAR;EACA52B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAeo1B,OAAf,EAAwB,EAAxB,CAAT,CANoB;;EAQpB52B,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT,CARoB;;EAUpB,UAAI,IAAIN,IAAJ,CAASlB,CAAC,CAACiC,IAAX,MAAqB,IAAzB,EAA+B;EAC7BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,OAbmB;;;EAepB,UAAI,KAAKf,IAAL,CAAUlB,CAAC,CAACiC,IAAZ,MAAsB,IAA1B,EAAgC;EAC9BjC,QAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,QAAf,EAAyB,EAAzB,CAAT;EACAxB,QAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD;EACF,KAnBD;EAoBD,GArDa;EAuDd1B,EAAAA,OAAO,EAAE,iBAASsyB,QAAT,EAAmB;EAC1BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpB,UAAIA,CAAC,CAACiQ,UAAF,OAAmB,IAAvB,EAA6B;EAC3B;EACD;;EACDjQ,MAAAA,CAAC,CAAC1B,IAAF,GAASqC,SAAW,CAACX,CAAC,CAAC1B,IAAH,CAApB;EACD,KALD;EAMD,GA9Da;EAgEd04B,EAAAA,UAAU,EAAE,oBAASnE,QAAT,EAAmB;EAC7BA,IAAAA,QAAQ,CAACnyB,OAAT,CAAiB,UAAAV,CAAC,EAAI;EACpBA,MAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAeq1B,MAAf,EAAuB,EAAvB,CAAT;EACA72B,MAAAA,CAAC,CAACgC,GAAF,GAAQhC,CAAC,CAACgC,GAAF,CAAMR,OAAN,CAAcq1B,MAAd,EAAsB,EAAtB,CAAR;EACD,KAHD;EAID,GArEa;EAuEdI,EAAAA,OAAO,EAAE,iBAASrqB,GAAT,EAAc;EACrBA,IAAAA,GAAG,CACAd,KADH,CACS,SADT,EAEGimB,GAFH,CAEO,oDAFP,EAGGmF,MAHH;EAID,GA5Ea;;EA+EdnwB,EAAAA,aAAa,EAAE,uBAAS6F,GAAT,EAAc;EAC3BA,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAA8R,EAAE,EAAI;EACrB,UAAIhI,KAAK,GAAGgI,EAAE,CAAChI,KAAH,EAAZ;EACAA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIyB,CAAC,CAACqE,IAAF,CAAO2C,YAAP,KAAwB,IAAxB,IAAgCwD,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAzC,EAAkD;EAChDyB,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;EACF,OAJD;EAKD,KAPD;EAQD;EAxFa,CAAhB;EA0FA,YAAc,GAAG6I,SAAjB;;EC5FA,IAAM8sB,QAAQ,GAAG;;EAEfxwB,EAAAA,UAAU,EAAE,IAFG;EAGfpG,EAAAA,OAAO,EAAE,IAHM;EAIfsG,EAAAA,WAAW,EAAE,IAJE;EAKfuwB,EAAAA,KAAK,EAAE,IALQ;EAMf1wB,EAAAA,QAAQ,EAAE,IANK;EAOfK,EAAAA,aAAa,EAAE,IAPA;;EAUf,UAAM,KAVS;EAWfswB,EAAAA,YAAY,EAAE,KAXC;EAYfC,EAAAA,WAAW,EAAE,KAZE;EAafN,EAAAA,UAAU,EAAE,KAbG;EAcfC,EAAAA,OAAO,EAAE,KAdM;;EAiBfM,EAAAA,WAAW,EAAE,KAjBE;EAkBfrd,EAAAA,KAAK,EAAE,KAlBQ;EAmBfD,EAAAA,KAAK,EAAE,KAnBQ;EAoBfud,EAAAA,UAAU,EAAE,KApBG;;EAAA,CAAjB;EAwBA,IAAMtW,SAAO,GAAG;EACdyF,EAAAA,KAAK,EAAE,EADO;EAEd8Q,EAAAA,MAAM,EAAE;EAAE,YAAM,IAAR;EAAcJ,IAAAA,YAAY,EAAE,IAA5B;EAAkCC,IAAAA,WAAW,EAAE,IAA/C;EAAqDN,IAAAA,UAAU,EAAE,IAAjE;EAAuEC,IAAAA,OAAO,EAAE;EAAhF;EAFM,CAAhB;AAIA/V,WAAO,CAACwW,KAAR,GAAgBl3B,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBqZ,SAAO,CAACuW,MAA1B,EAAkC;EAAEF,EAAAA,WAAW,EAAE,IAAf;EAAqBrd,EAAAA,KAAK,EAAE,IAA5B;EAAkCD,EAAAA,KAAK,EAAE,IAAzC;EAA+Cud,EAAAA,UAAU,EAAE;EAA3D,CAAlC,CAAhB;EAEA;;EACA,aAAiB,GAAG,kBAAA,CAASvxB,OAAT,EAAkB;EACpCA,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CADoC;;EAGpC,MAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;EAC/BA,IAAAA,OAAO,GAAGib,SAAO,CAACjb,OAAD,CAAP,IAAoB,EAA9B;EACD,GALmC;;;EAOpCA,EAAAA,OAAO,GAAGzF,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBsvB,QAAlB,EAA4BlxB,OAA5B,CAAV,CAPoC;;EASpC,OAAKwtB,OAAL;EAEA,MAAIZ,QAAQ,GAAG,KAAKA,QAAL,EAAf,CAXoC;;EAcpC,MAAI5sB,OAAO,QAAX,EAAkB;EAChB,SAAK5E,WAAL;EACD,GAhBmC;;;EAmBpC,MAAI4E,OAAO,CAACU,UAAZ,EAAwB;EACtB0D,IAAAA,QAAO,CAAC1D,UAAR,CAAmB,IAAnB;EACD,GArBmC;;;EAwBpC,MAAIV,OAAO,CAAC1F,OAAZ,EAAqB;EACnB8J,IAAAA,QAAO,CAAC9J,OAAR,CAAgBsyB,QAAhB;EACD,GA1BmC;;;EA6BpC,MAAI5sB,OAAO,CAACY,WAAZ,EAAyB;EACvBwD,IAAAA,QAAO,CAACxD,WAAR,CAAoBgsB,QAApB;EACD,GA/BmC;;;EAkCpC,MAAI5sB,OAAO,CAACmxB,KAAZ,EAAmB;EACjB,SAAKF,MAAL,CAAY,oBAAZ;EACD,GApCmC;;;EAuCpC,MAAIjxB,OAAO,CAACS,QAAZ,EAAsB;EACpB,SAAKA,QAAL,GAAgBixB,KAAhB,GADoB;EAGrB,GA1CmC;;;EA4CpC,MAAI1xB,OAAO,CAACc,aAAZ,EAA2B;EACzBsD,IAAAA,QAAO,CAACtD,aAAR,CAAsB,IAAtB;EACD,GA9CmC;;;;EAmDpC,MAAId,OAAO,CAAC2xB,WAAR,IAAuB3xB,OAAO,CAACoxB,YAAnC,EAAiD;EAC/C,SAAKA,YAAL,GAAoBQ,MAApB;EACD,GArDmC;;;EAwDpC,MAAI5xB,OAAO,CAACqxB,WAAZ,EAAyB;EACvB,SAAKA,WAAL,GAAmBQ,MAAnB;EACD,GA1DmC;;;EA4DpC,MAAI7xB,OAAO,CAAC+wB,UAAR,IAAsB/wB,OAAO,CAAC4wB,MAAlC,EAA0C;EACxCxsB,IAAAA,QAAO,CAAC2sB,UAAR,CAAmBnE,QAAnB;EACD,GA9DmC;;;EAiEpC,MAAI5sB,OAAO,CAACgxB,OAAZ,EAAqB;EACnB5sB,IAAAA,QAAO,CAAC4sB,OAAR,CAAgB,IAAhB;EACD,GAnEmC;;;;EAwEpC,MAAIhxB,OAAO,CAAC8xB,UAAR,IAAsB9xB,OAAO,CAACsxB,WAAlC,EAA+C;EAC7C,SAAKA,WAAL,GAAmBI,KAAnB;EACD,GA1EmC;;;EA4EpC,MAAI1xB,OAAO,CAACiU,KAAZ,EAAmB;EACjB,SAAKA,KAAL,GAAapU,YAAb;EACD,GA9EmC;;;EAgFpC,MAAIG,OAAO,CAACgU,KAAR,IAAiBhU,OAAO,CAACmqB,OAA7B,EAAsC;EACpC,SAAKnW,KAAL,GAAa7U,UAAb;EACD,GAlFmC;;;EAoFpC,MAAIa,OAAO,CAACuxB,UAAZ,EAAwB;EACtB,SAAKN,MAAL,CAAY,YAAZ;EACD;;EAED,SAAO,IAAP;GAxFF;;;;;;;EC/BA;;;EAGAv0B,EAAAA,eAAA,GAAkB,UAASe,GAAT,EAAc;;EAE9B,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAAC8qB,OAAP,CAAe,IAAf,CAAP;EACD,KAL6B;;;EAO9B,QAAI3pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAV,EAAkB;EAChB+J,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD;;EACD,YAAI8xB,KAAK,CAACpsB,KAAV,EAAiB;EACfqE,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAACpsB,KAAnB;EACD,SARsB;;;EAUvBmJ,QAAAA,KAAK,GAAGijB,KAAK,CAAC/1B,KAAd;EACD,OAXD,EATqB;;EAsBrB,UAAI8S,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KAzBD;EA0BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GApCD;EAsCA;;;;;EAGAxN,EAAAA,kBAAA,GAAqB,UAASe,GAAT,EAAc;;EAEjC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACirB,UAAP,CAAkB,IAAlB,CAAP;EACD,KALgC;;;EAOjC,QAAI9pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAN,IAAgB8xB,KAAK,CAACpsB,KAA1B,EAAiC;;EAE/BosB,UAAAA,KAAK,CAAC9xB,MAAN,CAAazH,MAAb,IAAuBu5B,KAAK,CAACpsB,KAAN,CAAYnN,MAAnC;EACAwR,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD,SAJD,MAIO,IAAI8xB,KAAK,CAACpsB,KAAV,EAAiB;EACtBqE,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAACpsB,KAAnB;EACD,SATsB;;;EAWvBmJ,QAAAA,KAAK,GAAGijB,KAAK,CAAC/1B,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAI8S,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GArCD;;EAsCAxN,EAAAA,aAAA,GAAgBA,OAAO,CAACw1B,UAAxB;;EAEA;;EACAx1B,EAAAA,mBAAA,GAAsB,UAASe,GAAT,EAAc;;EAElC,QAAI,CAACA,GAAL,EAAU;EACR,UAAIwJ,MAAM,GAAG,KAAKA,MAAL,EAAb;EACA,aAAOA,MAAM,CAACkrB,WAAP,CAAmB,IAAnB,CAAP;EACD,KALiC;;;EAOlC,QAAI/pB,IAAI,GAAGwjB,QAAW,CAACnuB,GAAD,CAAtB;EACA,QAAIyM,OAAO,GAAG,EAAd;EACA,SAAK1D,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIq4B,OAAO,GAAGr4B,CAAC,CAACkM,KAAF,CAAQuC,IAAR,CAAd,CADqB;;EAGrB,UAAI4pB,OAAO,CAACt5B,MAAR,KAAmB,CAAvB,EAA0B;EACxBwR,QAAAA,OAAO,CAACvF,IAAR,CAAahL,CAAb;EACA;EACD,OANoB;;;EAQrB,UAAIqV,KAAK,GAAGrV,CAAZ;EACAq4B,MAAAA,OAAO,CAACv3B,OAAR,CAAgB,UAAAwB,KAAK,EAAI;EACvB,YAAIg2B,KAAK,GAAGjjB,KAAK,CAAC+iB,OAAN,CAAc91B,KAAd,CAAZ,CADuB;;EAGvB,YAAIg2B,KAAK,CAAC9xB,MAAV,EAAkB;EAChB+J,UAAAA,OAAO,CAACvF,IAAR,CAAastB,KAAK,CAAC9xB,MAAnB;EACD,SALsB;;;EAOvB,YAAI8xB,KAAK,CAACpsB,KAAN,IAAeosB,KAAK,CAAC/1B,KAAzB,EAAgC;EAC9B+1B,UAAAA,KAAK,CAACpsB,KAAN,CAAYnN,MAAZ,IAAsBu5B,KAAK,CAAC/1B,KAAN,CAAYxD,MAAlC;EACD,SATsB;;;EAWvBsW,QAAAA,KAAK,GAAGijB,KAAK,CAACpsB,KAAd;EACD,OAZD,EATqB;;EAuBrB,UAAImJ,KAAJ,EAAW;EACT9E,QAAAA,OAAO,CAACvF,IAAR,CAAaqK,KAAb;EACD;EACF,KA1BD;EA2BA,WAAO,KAAKnK,SAAL,CAAeqF,OAAf,CAAP;EACD,GArCD;EAuCA;;;EACAxN,EAAAA,eAAA,GAAkB,UAAS0L,IAAT,EAAepI,OAAf,EAAwB;EACxCoI,IAAAA,IAAI,GAAGA,IAAI,IAAI,EAAf;EACApI,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE;EAAR,KAArB;EACA,QAAIsO,GAAG,GAAG,IAAV;EACA,QAAInM,IAAI,GAAGD,MAAM,CAACC,IAAP,CAAY4N,IAAZ,CAAX,CAJwC;;EAMxC5N,IAAAA,IAAI,CAACC,OAAL,CAAa,UAAAnB,CAAC,EAAI;EAChBqN,MAAAA,GAAG,GAAGA,GAAG,CAACorB,OAAJ,CAAYz4B,CAAZ,CAAN;EACD,KAFD,EANwC;;EAUxCqN,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,WAAK,IAAIrB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGkC,IAAI,CAAC9B,MAAzB,EAAiCJ,CAAC,IAAI,CAAtC,EAAyC;EACvC,YAAIqB,CAAC,CAACoyB,GAAF,CAAMvxB,IAAI,CAAClC,CAAD,CAAV,CAAJ,EAAoB;EAClBqB,UAAAA,CAAC,CAACy4B,OAAF,GAAYhqB,IAAI,CAAC5N,IAAI,CAAClC,CAAD,CAAL,CAAhB;EACA;EACD;EACF;EACF,KAPD;EAQA,WAAOqO,GAAG,CAACH,IAAJ,CAASzB,GAAT,CAAa,UAAApL,CAAC,EAAI;EACvB,UAAIuO,GAAG,GAAGvO,CAAC,CAACwO,IAAF,CAAOnI,OAAP,CAAV;EACAkI,MAAAA,GAAG,CAACkqB,OAAJ,GAAcz4B,CAAC,CAACy4B,OAAF,IAAa,IAA3B;EACA,aAAOlqB,GAAP;EACD,KAJM,CAAP;KAlBF;;;;;;;;EC/HA,IAAMmqB,QAAQ,GAAG,SAAXA,QAAW,CAAS1rB,GAAT,EAAcsjB,EAAd,EAAkB;EACjC,MAAIlrB,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpBA,IAAAA,CAAC,CAAC4K,KAAF,GAAU9J,OAAV,CAAkB,UAAAV,CAAC;EAAA,aAAIA,CAAC,CAACkwB,EAAD,CAAD,CAAMlrB,KAAN,CAAJ;EAAA,KAAnB;EACD,GAFD;EAGA,SAAO4H,GAAP;EACD,CAND;EAQA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAO0rB,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAIA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,SAAOA,QAAQ,CAAC,IAAD,EAAO,aAAP,CAAf;EACD,CAFD;EAGA;;;EACA,eAAmB,GAAG,oBAAA,GAAW;EAC/B,OAAK7rB,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;;EAErB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,IAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,UAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,QAAAA,CAAC,CAACu4B,WAAF;EACD;;EACD,UAAIh6B,CAAC,KAAKiM,KAAK,CAAC7L,MAAN,GAAe,CAAzB,EAA4B;EAC1BqB,QAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT;EACD;EACF,KAPD;EAQD,GAXD,EAD+B;;EAc/B,SAAO,IAAP;GAdF;;;;;;;;;;ECvBA;EACAU,EAAAA,WAAA,GAAc,UAAStE,GAAT,EAAc2O,MAAd,EAAsB;EAClC,QAAI3O,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKyI,IAAL,CAAU,CAAV,EAAajC,KAAb,CAAmB,CAAnB,EAAsBxI,GAA7B;EACD;;EACD,SAAKyK,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIyH,IAAI,GAAGzH,CAAC,CAAC4K,KAAF,CAAQ,CAAR,CAAX;;EACA,UAAIwC,MAAM,KAAK,IAAf,EAAqB;EACnB3F,QAAAA,IAAI,CAACrF,GAAL,IAAY3D,GAAZ;EACD,OAFD,MAEO;EACLgJ,QAAAA,IAAI,CAACrF,GAAL,GAAW3D,GAAX;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAbD;EAeA;;;EACAsE,EAAAA,YAAA,GAAe,UAAStE,GAAT,EAAc2O,MAAd,EAAsB;;EAEnC,QAAI3O,GAAG,KAAK2F,SAAZ,EAAuB;EACrB,aAAO,KAAKyI,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC,EAAI;EACxB,YAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,YAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACA,eAAO0I,IAAI,CAACpF,IAAZ;EACD,OAJM,CAAP;EAKD,KARkC;;;EAUnC,SAAKwK,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACA,UAAInD,IAAI,GAAGmD,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;;EACA,UAAIqO,MAAM,KAAK,IAAf,EAAqB;EACnB3F,QAAAA,IAAI,CAACpF,IAAL,IAAa5D,GAAb;EACD,OAFD,MAEO;EACLgJ,QAAAA,IAAI,CAACpF,IAAL,GAAY5D,GAAZ;EACD;EACF,KARD;EASA,WAAO,IAAP;EACD,GApBD;EAsBA;;;EACAsE,EAAAA,YAAA,GAAe,YAAW;EACxB,SAAK8J,IAAL,GAAY,KAAKA,IAAL,CAAUzB,GAAV,CAAc,UAAApL,CAAC;EAAA,aAAIA,CAAC,CAAC0B,IAAF,EAAJ;EAAA,KAAf,CAAZ;EACA,WAAO,IAAP;EACD,GAHD;EAKA;;;EACAqB,EAAAA,iBAAA,GAAoB,YAAW;EAC7B,SAAK8J,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;EACtB,YAAIA,CAAC,KAAK,CAAV,EAAa;EACXyB,UAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACD;;EACD,YAAIwI,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAT,EAAkB;EAChByB,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAPD;EAQD,KAXD;EAYA,WAAO,IAAP;EACD,GAdD;EAgBA;;;EACAU,EAAAA,mBAAA,GAAsB,YAAW;EAC/B,QAAMgS,SAAS,GAAG,SAAlB;EACA,SAAKlI,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrBA,MAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,YAAI2U,SAAS,CAACzT,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1BjC,UAAAA,CAAC,CAACiC,IAAF,GAAS,GAAT;EACD;EACF,OAJD;EAKD,KARD;EASA,WAAO,IAAP;EACD,GAZD;;EAaAU,EAAAA,mBAAA,GAAsBA,OAAO,CAAC61B,WAA9B;EAEA;;EACA71B,EAAAA,oBAAA,GAAuB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC1CD,IAAAA,KAAK,GAAGA,KAAK,QAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,QAAT;EACA,SAAK0I,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAe8B,KAAK,GAAG0G,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAhC;EACA,UAAI4E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACAiI,MAAAA,IAAI,CAAC3E,IAAL,GAAY8B,GAAG,GAAG6C,IAAI,CAAC3E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;EACD,GAVD;;EAWAU,EAAAA,mBAAA,GAAsBA,OAAO,CAAC81B,YAA9B;EAEA;;EACA91B,EAAAA,qBAAA,GAAwB,UAASmB,KAAT,EAAgBC,GAAhB,EAAqB;EAC3CD,IAAAA,KAAK,GAAGA,KAAK,OAAb;EACAC,IAAAA,GAAG,GAAGA,GAAG,OAAT;EACA,SAAK0I,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,MAAAA,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAT,GAAe8B,KAAK,GAAG0G,KAAK,CAAC,CAAD,CAAL,CAASxI,GAAhC;EACA,UAAI4E,IAAI,GAAG4D,KAAK,CAACA,KAAK,CAAC7L,MAAN,GAAe,CAAhB,CAAhB;EACAiI,MAAAA,IAAI,CAAC3E,IAAL,GAAY8B,GAAG,GAAG6C,IAAI,CAAC3E,IAAvB;EACD,KALD;EAMA,WAAO,IAAP;KATF;;;;;;;;;;;;EC7FA;EACA,QAAY,GAAG,aAAA,CAAS5D,GAAT,EAAc;;EAE3B,OAAKo1B,OAAL,GAF2B;;EAI3B,MAAIrmB,IAAI,GAAG,KAAKX,IAAL,CAAU,CAAV,CAAX;EACA,MAAIrG,MAAM,GAAGgH,IAAI,CAACzO,MAAlB;EACA,MAAI+5B,OAAO,GAAG,EAAd;;EACA,OAAK,IAAIn6B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKkO,IAAL,CAAU9N,MAA9B,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMqB,CAAC,GAAG,KAAK6M,IAAL,CAAUlO,CAAV,CAAV;EACAm6B,IAAAA,OAAO,CAAC94B,CAAC,CAACkE,KAAH,CAAP,GAAmB,IAAnB;EACA,QAAIuD,IAAI,GAAG+F,IAAI,CAACzB,QAAL,EAAX,CAHyC;;EAKzC,QAAItN,GAAJ,EAAS;EACPgJ,MAAAA,IAAI,CAACpF,IAAL,IAAa5D,GAAb;EACD,KAPwC;;;EASzCgJ,IAAAA,IAAI,CAAC8C,IAAL,GAAYvK,CAAC,CAACkE,KAAd,CATyC;;EAWzClE,IAAAA,CAAC,CAAC4K,KAAF,CAAQ,CAAR,EAAWN,IAAX,GAAkB7C,IAAI,CAACzD,EAAvB;EACAwJ,IAAAA,IAAI,CAACzO,MAAL,IAAeiB,CAAC,CAACjB,MAAjB;EACAyO,IAAAA,IAAI,CAAC7C,KAAL,GAAa,EAAb;EACD,GArB0B;;;;EAyB3B,MAAIouB,QAAQ,GAAGvrB,IAAI,CAACzO,MAAL,GAAcyH,MAA7B;EACA,OAAK6G,OAAL,GAAevM,OAAf,CAAuB,UAAAkM,GAAG,EAAI;;EAE5BA,IAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,WAAK,IAAIjM,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,EAAC,EAAnC,EAAuC;EACrC,YAAIiM,KAAK,CAACjM,EAAD,CAAL,CAASqF,EAAT,KAAgBwJ,IAAI,CAACtJ,KAAzB,EAAgC;EAC9BlE,UAAAA,CAAC,CAACjB,MAAF,IAAYg6B,QAAZ;EACA;EACD;EACF;;EACD/4B,MAAAA,CAAC,CAAC2K,KAAF,GAAU,EAAV;EACD,KATD,EAF4B;;EAa5BqC,IAAAA,GAAG,CAACH,IAAJ,GAAWG,GAAG,CAACH,IAAJ,CAAStB,MAAT,CAAgB,UAAAvL,CAAC;EAAA,aAAI84B,OAAO,CAAC94B,CAAC,CAACkE,KAAH,CAAP,KAAqB,IAAzB;EAAA,KAAjB,CAAX;EACD,GAdD,EA1B2B;;EA0C3B,SAAO,KAAKgH,SAAL,CAAe,CAACsC,IAAD,CAAf,CAAP;GA1CF;;;;;;ECDA,IAAMwrB,SAAS,GAAG,kBAAlB;EAEA;EACA;EACA;;EAEA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAASp5B,CAAT,EAAYq5B,MAAZ,EAAoB;EACzC,MAAI,CAACr5B,CAAC,CAACyC,KAAP,EAAc;EACZ;EACD;;EACD,MAAIsI,KAAK,GAAG/K,CAAC,CAACozB,QAAF,EAAZ,CAJyC;;EAMzC,OAAK,IAAIt0B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnC,EAAsCJ,CAAC,EAAvC,EAA2C;EACzC,QAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,QAAIq6B,SAAS,CAAC13B,IAAV,CAAelB,CAAC,CAACiC,IAAjB,CAAJ,EAA4B;EAC1B;EACD;EACF,GAXwC;;;EAczCuI,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAACoB,KAAf;EACD,GAFD,EAdyC;;EAkBzCoJ,EAAAA,KAAK,CAAC,CAAD,CAAL,CAASlM,IAAT,IAAiBw6B,MAAjB,CAlByC;;EAoBzCtuB,EAAAA,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAexN,OAAf,CAAuB,UAAAV,CAAC,EAAI;EAC1BA,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACD,GAFD;;EAGA,OAAK,IAAIC,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnC,EAAsCJ,EAAC,EAAvC,EAA2C;EACzC,QAAMyB,EAAC,GAAGwK,KAAK,CAACjM,EAAD,CAAf;EACAyB,IAAAA,EAAC,CAACiC,IAAF,GAASjC,EAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,GAAf,EAAoB,EAApB,CAAT;EACD;EACF,CA3BD;EA6BA;;;EACA,YAAgB,GAAG,iBAAA,GAAW;EAC5B,MAAIoL,GAAG,GAAG,KAAKmlB,GAAL,CAAS,iBAAT,CAAV,CAD4B;;EAG5B,MAAItyB,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,mBAAV,CAAR;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAJ4B;;EAM5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,8BAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAP4B;;EAS5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,wBAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAV4B;;EAY5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,YAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAb4B;;EAe5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,eAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CAhB4B;;EAkB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,0DAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAnB4B;;EAqB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,kBAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAtB4B;;EAwB5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,2BAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,QAAd,CAzB4B;;EA2B5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,MAAV,CAAJ;EACA+sB,EAAAA,cAAc,CAACp5B,CAAD,OAAd,CA5B4B;;EA8B5BA,EAAAA,CAAC,GAAGmN,GAAG,CAACd,KAAJ,CAAU,UAAV,CAAJ;EACA,SAAO,IAAP;GA/BF;;;;;;ECpCA,aAAc,GAAGtL,MAAM,CAACqH,MAAP,CACf,EADe,EAEfC,UAFe,EAGfC,YAHe,EAIfC,QAJe,EAKfC,MALe,EAMfC,QANe,EAOfuG,SAPe,EAQfghB,QARe,EAUfsJ,UAVe,EAWfC,SAXe,EAafC,OAbe,EAcfC,OAde,EAefC,MAfe,EAiBfC,OAjBe,EAkBfC,YAlBe,EAmBfC,QAnBe,EAoBfC,OApBe,EAqBfC,aArBe,EAsBfC,OAtBe,EAuBfC,WAvBe,CAAjB;;ECAA,IAAIrvB,SAAO,GAAG,EAAd;;EAGA,IAAMzB,GAAG,GAAG,CACV,CAAC,OAAD,EAAU,GAAV,CADU,EAEV,CAAC,YAAD,EAAe,cAAf,CAFU,EAGV,CAAC,YAAD,EAAe,YAAf,CAHU,EAIV,CAAC,UAAD,EAAa,UAAb,CAJU,EAKV,CAAC,QAAD,EAAW,QAAX,CALU,EAMV,CAAC,OAAD,EAAU,QAAV,CANU,EAOV,CAAC,WAAD,EAAc,WAAd,CAPU,EAQV,CAAC,YAAD,EAAe,YAAf,CARU,EASV,CAAC,MAAD,EAAS,MAAT,CATU,EAUV,CAAC,SAAD,EAAY,SAAZ,CAVU,EAWV,CAAC,UAAD,EAAa,UAAb,CAXU,EAYV,CAAC,cAAD,EAAiB,cAAjB,CAZU,EAaV,CAAC,cAAD,EAAiB,cAAjB,CAbU,CAAZ;EAeAA,GAAG,CAAClI,OAAJ,CAAY,UAAA7B,CAAC,EAAI;EACfwL,EAAAA,SAAO,CAACxL,CAAC,CAAC,CAAD,CAAF,CAAP,GAAgB,UAASa,CAAT,EAAY;EAC1B,QAAID,CAAC,GAAG,KAAKqM,KAAL,CAAWjN,CAAC,CAAC,CAAD,CAAZ,CAAR;;EACA,QAAI,OAAOa,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,WAAOD,CAAP;EACD,GAND;EAOD,CARD;;AAUA4K,WAAO,CAACsvB,MAAR,GAAiBtvB,SAAO,CAAC+sB,KAAzB;AACA/sB,WAAO,CAACuvB,UAAR,GAAqBvvB,SAAO,CAACwvB,UAA7B;AACAxvB,WAAO,CAACuH,KAAR,GAAgBvH,SAAO,CAACG,KAAxB;EAEA;;AACAH,WAAO,CAACyvB,YAAR,GAAuB,UAASp6B,CAAT,EAAY;EACjC,MAAID,CAAC,GAAG,KAAK04B,UAAL,CAAgB,WAAhB,CAAR;EACA14B,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,eAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;EASA;;;AACA4K,WAAO,CAAC0vB,KAAR,GAAgB,UAASr6B,CAAT,EAAY;EAC1B,MAAID,CAAC,GAAG,KAAKqM,KAAL,CAAW,mBAAX,CAAR;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAND;EAQA;;;AACA4K,WAAO,CAAC2vB,MAAR,GAAiB,UAASt6B,CAAT,EAAY;;EAE3B,MAAIwmB,IAAI,GAAG,KAAKpa,KAAL,CAAW,yCAAX,CAAX,CAF2B;;EAI3B,MAAIrM,CAAC,GAAG,KAAKsyB,GAAL,CAAS7L,IAAT,EAAeiS,UAAf,CAA0B,WAA1B,CAAR,CAJ2B;;EAM3B14B,EAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EACAzmB,EAAAA,CAAC,CAAC8H,IAAF,CAAO,OAAP;EACA9H,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,SAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAbD;EAeA;;;AACA4K,WAAO,CAAC4vB,aAAR,GAAwB,UAASv6B,CAAT,EAAY;EAClC,MAAID,CAAC,GAAG,KAAKy6B,OAAL,EAAR;EACAz6B,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,gBAAR,CAAJ;;EACA,MAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBD,IAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,SAAOD,CAAP;EACD,CAPD;;;AAUA4K,WAAO,CAAC8vB,QAAR,GAAmB,UAASz6B,CAAT,EAAY;EAC7B,MAAII,CAAC,GAAG,KAAKo6B,OAAL,EAAR,CAD6B;;EAG7B,MAAIE,GAAG,GAAGt6B,CAAC,CAACu6B,MAAF,EAAV;EACAD,EAAAA,GAAG,GAAGA,GAAG,CAACptB,MAAJ,CAAWlN,CAAC,CAACk6B,MAAF,EAAX,CAAN;EACAI,EAAAA,GAAG,GAAGA,GAAG,CAACptB,MAAJ,CAAWlN,CAAC,CAACm6B,aAAF,EAAX,CAAN;EACA,MAAIK,MAAM,GAAG,CAAC,SAAD,EAAY,KAAZ,EAAmB,OAAnB,EAA4B,QAA5B,EAAsC,SAAtC,EAAiD,QAAjD,EAA2D,QAA3D,CAAb;EACAF,EAAAA,GAAG,GAAGA,GAAG,CAACrI,GAAJ,CAAQuI,MAAR,CAAN,CAP6B;;EAS7BF,EAAAA,GAAG,CAAC7yB,IAAJ,CAAS,UAAT,EAT6B;;EAW7B,MAAI,OAAO7H,CAAP,KAAa,QAAjB,EAA2B;EACzB06B,IAAAA,GAAG,GAAGA,GAAG,CAAC1vB,GAAJ,CAAQhL,CAAR,CAAN;EACD;;EACD,SAAO06B,GAAP;EACD,CAfD;;;AAiBA/vB,WAAO,CAACkwB,MAAR,GAAiBlwB,SAAO,CAAC8vB,QAAzB;AACA9vB,WAAO,CAACmwB,MAAR,GAAiBnwB,SAAO,CAAC8vB,QAAzB;EAEA,WAAc,GAAG9vB,SAAjB;;EClGA,IAAMowB,SAAS,GAAG,iBAAlB;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAASlwB,KAAT,EAAgBxK,CAAhB,EAAmBgF,KAAnB,EAA0B;EAC5C,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB,CAD4C;;EAG5C,MAAInG,GAAG,GAAGjB,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAT,GAAmB,GAAnB,GAAyB+I,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAAhD;;EACA,MAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,IAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,aAAvB,EAAsCzG,KAAtC;EACAwF,IAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,aAA3B,EAA0CzG,KAA1C;EACA,WAAO,CAAP;EACD,GAR2C;;;EAU5C,MAAIhF,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAAlB,EAA0B;EACxB8M,IAAAA,GAAG,IAAI,MAAMjB,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,eAAvB,EAAwCzG,KAAxC;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,eAA3B,EAA4CzG,KAA5C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,eAA3B,EAA4CzG,KAA5C;EACA,aAAO,CAAP;EACD;EACF,GAlB2C;;;EAoB5C,MAAIhF,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAAlB,EAA0B;EACxB8M,IAAAA,GAAG,IAAI,MAAMjB,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAayB,OAA1B;;EACA,QAAI6Z,GAAG,CAAC7P,GAAD,CAAH,KAAazH,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmBwH,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DjB,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC7P,GAAD,CAAhB,EAAuB,cAAvB,EAAuCzG,KAAvC;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACAwF,MAAAA,KAAK,CAACxK,CAAC,GAAG,CAAL,CAAL,CAAaoE,GAAb,CAAiBkX,GAAG,CAAC7P,GAAD,CAApB,EAA2B,cAA3B,EAA2CzG,KAA3C;EACA,aAAO,CAAP;EACD;EACF;;EACD,SAAO,CAAP;EACD,CA/BD;EAiCA;;;EACA,IAAM21B,YAAY,GAAG,SAAfA,YAAe,CAASnwB,KAAT,EAAgBxF,KAAhB,EAAuB;EAC1C,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB;EACA,MAAI6J,WAAW,GAAGzW,KAAK,CAACyW,WAAxB,CAF0C;;;EAI1C,OAAK,IAAIzb,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwK,KAAK,CAAC7L,MAA1B,EAAkCqB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI3B,GAAG,GAAGmM,KAAK,CAACxK,CAAD,CAAL,CAASoB,KAAnB,CADwC;;EAGxC,QAAIqa,WAAW,CAACpd,GAAD,CAAX,KAAqB,IAArB,IAA6B2B,CAAC,GAAG,CAAJ,GAAQwK,KAAK,CAAC7L,MAA/C,EAAuD;EACrD,UAAIi8B,UAAU,GAAGF,WAAW,CAAClwB,KAAD,EAAQxK,CAAR,EAAWgF,KAAX,CAA5B;;EACA,UAAI41B,UAAU,GAAG,CAAjB,EAAoB;EAClB56B,QAAAA,CAAC,IAAI46B,UAAL,CADkB;;EAElB;EACD;EACF,KATuC;;;EAWxC,QAAItf,GAAG,CAACjd,GAAD,CAAH,KAAa2F,SAAb,IAA0BsX,GAAG,CAACrX,cAAJ,CAAmB5F,GAAnB,MAA4B,IAA1D,EAAgE;EAC9DmM,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAACjd,GAAD,CAAhB,EAAuB,SAAvB,EAAkC2G,KAAlC;EACA;EACD,KAduC;;;EAgBxC,QAAI3G,GAAG,KAAKmM,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAjB,IAA4B6Z,GAAG,CAACrX,cAAJ,CAAmBuG,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAA5B,MAAyC,IAAzE,EAA+E;EAC7E+I,MAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAAC9Q,KAAK,CAACxK,CAAD,CAAL,CAASyB,OAAV,CAAhB,EAAoC,SAApC,EAA+CuD,KAA/C;EACA;EACD,KAnBuC;;;EAqBxC,QAAIy1B,SAAS,CAACv5B,IAAV,CAAe7C,GAAf,MAAwB,IAA5B,EAAkC;EAChC,UAAIw8B,QAAQ,GAAGx8B,GAAG,CAACmD,OAAJ,CAAYi5B,SAAZ,EAAuB,EAAvB,CAAf;;EACA,UAAInf,GAAG,CAACrX,cAAJ,CAAmB42B,QAAnB,MAAiC,IAArC,EAA2C;EACzCrwB,QAAAA,KAAK,CAACxK,CAAD,CAAL,CAASoE,GAAT,CAAakX,GAAG,CAACuf,QAAD,CAAhB,EAA4B,kBAA5B,EAAgD71B,KAAhD;EACD;EACF;EACF;;EACD,SAAOwF,KAAP;EACD,CAjCD;;EAkCA,cAAc,GAAGmwB,YAAjB;;ECvEA,IAAMG,WAAW,GAAG,cAApB;;EAGA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB,CAASvwB,KAAT,EAAgBjM,CAAhB,EAAmByG,KAAnB,EAA0B;EACjD,MAAIqC,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CADiD;;;;;;;;;;;EAcjD,MAAIu8B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAAC/I,IAAtB,CAAJ,EAAiC;EAC/B,QAAI,CAACw8B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAACrF,GAAtB,CAAD,IAA+B,CAAC84B,WAAW,CAAC55B,IAAZ,CAAiBmG,IAAI,CAACpF,IAAtB,CAAhC,IAA+DoF,IAAI,CAACjG,KAAL,CAAWzC,MAAX,GAAoB,CAAvF,EAA0F;EACxF,UAAIq8B,OAAO,GAAG3zB,IAAI,CAACjG,KAAL,CAAWiG,IAAI,CAACjG,KAAL,CAAWzC,MAAX,GAAoB,CAA/B,CAAd,CADwF;;EAGxF,UAAIq8B,OAAO,KAAK,GAAhB,EAAqB;EACnB3zB,QAAAA,IAAI,CAACjD,GAAL,CAAS,CAAC,YAAD,EAAe,MAAf,CAAT,EAAiC,UAAjC,EAA6CY,KAA7C;EACA;EACD,OANuF;;;EAQxF,UAAIg2B,OAAO,KAAK,GAAhB,EAAqB;EACnB3zB,QAAAA,IAAI,CAACjD,GAAL,CAAS,CAAC,QAAD,CAAT,EAAqB,SAArB,EAAgCY,KAAhC;EACD;EACF;EACF,GA3BgD;;;;;;;;;EAoClD,CApCD;;EAqCA,oBAAc,GAAG+1B,gBAAjB;;ECxCA;EACA;EACA,cAAc,GAAG;EAEf,CAAC,uBAAD,EAA0B,OAA1B,CAFe;EAGf,CAAC,+BAAD,EAAkC,SAAlC,CAHe,EAIf,CAAC,WAAD,EAAc,WAAd,CAJe,EAKf,CAAC,qCAAD,EAAwC,KAAxC,CALe;EAMf,CAAC,+DAAD,EAAkE,KAAlE,CANe;;EASf,CAAC,yCAAD,EAA4C,MAA5C,CATe;EAUf,CAAC,oDAAD,EAAuD,MAAvD,CAVe;EAWf,CAAC,oDAAD,EAAuD,MAAvD,CAXe;EAYf,CAAC,YAAD,EAAe,MAAf,CAZe;EAaf,CAAC,qBAAD,EAAwB,MAAxB,CAbe;EAcf,CAAC,wBAAD,EAA2B,MAA3B,CAde;EAef,CAAC,oCAAD,EAAuC,MAAvC,CAfe;EAgBf,CAAC,sCAAD,EAAyC,MAAzC,CAhBe;;EAmBf,CAAC,WAAD,EAAc,UAAd,CAnBe;EAoBf,CAAC,eAAD,EAAkB,UAAlB,CApBe;EAqBf,CAAC,eAAD,EAAkB,UAAlB,CArBe;;EAwBf,CAAC,cAAD,EAAiB,YAAjB,CAxBe;EAyBf,CAAC,aAAD,EAAgB,YAAhB,CAzBe;EA0Bf,CAAC,qCAAD,EAAwC,MAAxC,CA1Be;EA4Bf,CAAC,sCAAD,EAAyC,MAAzC,CA5Be;;EA+Bf,CAAC,qBAAD,EAAwB,aAAxB,CA/Be;EAgCf,CAAC,kCAAD,EAAqC,aAArC,CAhCe;;;;;EAuCf,CACE,yLADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CAvCe;EA4Cf,CACE,yKADF,EAEE,CAAC,OAAD,EAAU,OAAV,CAFF,CA5Ce;EAiDf,CAAC,0EAAD,EAA6E,CAAC,OAAD,EAAU,OAAV,CAA7E,CAjDe;;EAqDf,CAAC,yCAAD,EAA4C,CAAC,UAAD,EAAa,cAAb,CAA5C,CArDe,EAsDf,CAAC,mDAAD,EAAsD,CAAC,SAAD,EAAY,cAAZ,CAAtD,CAtDe;EAwDf,CAAC,eAAD,EAAkB,CAAC,UAAD,EAAa,cAAb,CAAlB,CAxDe;EA2Df,CAAC,0CAAD,EAA6C,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAA7C,CA3De;EA4Df,CAAC,aAAD,EAAgB,CAAC,SAAD,EAAY,UAAZ,EAAwB,cAAxB,CAAhB,CA5De;;EA8Df,CAAC,0BAAD,EAA6B,UAA7B,CA9De;;EAgEf,CAAC,6BAAD,EAAgC,CAAC,OAAD,EAAU,aAAV,CAAhC,CAhEe;EAiEf,CAAC,2DAAD,EAA8D,aAA9D,CAjEe;;EAmEf,CAAC,uBAAD,EAA0B,OAA1B,CAnEe;;;;EAAA,CAAjB;;ECAA,IAAME,YAAY,GAAG,iBAArB;EACA,IAAMC,aAAa,GAAG,0DAAtB;EAEA;;EACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAS9zB,IAAT,EAAerC,KAAf,EAAsB;EACvC,MAAI3G,GAAG,GAAGgJ,IAAI,CAAC/I,IAAf,CADuC;;EAGvC,OAAK,IAAIwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyE,UAAK,CAAC5F,MAA1B,EAAkCmB,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyE,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,EAAYoB,IAAZ,CAAiB7C,GAAjB,MAA0B,IAA9B,EAAoC;EAClCgJ,MAAAA,IAAI,CAAC2sB,OAAL,CAAazvB,UAAK,CAACzE,CAAD,CAAL,CAAS,CAAT,CAAb,EAA0B,aAAaA,CAAvC,EAA0CkF,KAA1C;EACA;EACD;EACF,GARsC;;;;EAWvC,MAAIqC,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAApB,IAAyBs8B,YAAY,CAAC/5B,IAAb,CAAkB7C,GAAlB,CAAzB,IAAmD68B,aAAa,CAACh6B,IAAd,CAAmB7C,GAAnB,CAAvD,EAAgF;EAC9EgJ,IAAAA,IAAI,CAACjD,GAAL,CAAS,cAAT,EAAyB,MAAzB,EAAiCY,KAAjC;EACD;EACF,CAdD;;EAeA,eAAc,GAAGm2B,UAAjB;;ECrBA;EACA;EACA;EACA,IAAMC,GAAG,GAAG,WAAZ;EACA,IAAMC,GAAG,GAAG,YAAZ;EACA,IAAMC,IAAI,GAAG,cAAb;EACA,IAAMC,IAAI,GAAG,UAAb;EACA,IAAMC,IAAI,GAAG,WAAb;EACA,IAAMtjB,MAAM,GAAG,QAAf;EACA,IAAMujB,GAAG,GAAG,YAAZ;EACA,IAAM51B,KAAK,GAAG,OAAd;EACA,IAAMR,IAAI,GAAG,MAAb;EACA,IAAMkQ,IAAI,GAAG,MAAb;EACA,IAAMmmB,IAAI,GAAG,UAAb;EAGA;;EACA,cAAc,GAAG;EACf78B,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgB0W,IAAhB,CADC,EAED,CAAC,iBAAD,EAAoBmmB,IAApB,CAFC;EAGD,GAAC,eAAD,EAAkBH,IAAlB,CAHC,EAID,CAAC,aAAD,EAAgBE,GAAhB,CAJC;EAAA,GADY;EAOf18B,EAAAA,CAAC,EAAE,CAAC,CAAC,cAAD,EAAiBq8B,GAAjB,CAAD,CAPY;EAQfp8B,EAAAA,CAAC,EAAE;;EAGD,GAAC,2CAAD,EAA8Cw8B,IAA9C,CAHC;;EAKD,GAAC,yBAAD,EAA4BA,IAA5B,CALC;;EAOD,GAAC,kBAAD,EAAqBA,IAArB,CAPC;;EASD,GAAC,cAAD,EAAiBA,IAAjB,CATC;EAUD,GAAC,iBAAD,EAAoBA,IAApB,CAVC;;EAYD,GAAC,eAAD,EAAkBA,IAAlB,CAZC;EAaD,GAAC,eAAD,EAAkBA,IAAlB,CAbC;;EAeD,GAAC,YAAD,EAAeA,IAAf,CAfC;EAgBD,GAAC,kBAAD,EAAqBA,IAArB,CAhBC;;EAkBD,GAAC,sBAAD,EAAyBA,IAAzB,CAlBC;;EAoBD,GAAC,oBAAD,EAAuBA,IAAvB,CApBC;;EAsBD,GAAC,kBAAD,EAAqBA,IAArB,CAtBC;;EAwBD,GAAC,cAAD,EAAiBA,IAAjB,CAxBC;EAyBD,GAAC,yBAAD,EAA4BA,IAA5B,CAzBC;;EA2BD,GAAC,mBAAD,EAAsBA,IAAtB,CA3BC;EA6BD,GAAC,cAAD,EAAiBD,IAAjB,CA7BC;EA8BD,GAAC,oBAAD,EAAuBH,GAAvB,CA9BC,EA+BD,CAAC,WAAD,EAAcA,GAAd,CA/BC,CARY;EAyCfn8B,EAAAA,CAAC,EAAE,CACD,CAAC,YAAD,EAAeo8B,GAAf,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,aAAD,EAAgBA,GAAhB,CAHC,EAID,CAAC,mBAAD,EAAsBD,GAAtB,CAJC,EAKD,CAAC,iBAAD,EAAoBA,GAApB,CALC,EAMD,CAAC,WAAD,EAAcA,GAAd,CANC,CAzCY;EAiDfh8B,EAAAA,CAAC,EAAE,CACD,CAAC,gBAAD,EAAmBg8B,GAAnB,CADC,EAED,CAAC,WAAD,EAAcM,IAAd,CAFC;EAGD,GAAC,SAAD,EAAYD,GAAZ,CAHC;EAID,GAAC,aAAD,EAAgBA,GAAhB,CAJC;EAAA,GAjDY;EAuDfl9B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoBm9B,IAApB,CADC;EAAA,GAvDY;EA0Dfn8B,EAAAA,CAAC,EAAE,CACD,CAAC,QAAD,EAAWk8B,GAAX,CADC;EAAA,GA1DY;EA6Dfj8B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc47B,GAAd,CADC,EAED,CAAC,eAAD,EAAkBA,GAAlB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,kBAAD,EAAqBA,GAArB,CAJC,CA7DY;EAmEf37B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB87B,IAAlB,CADC,EAED,CAAC,cAAD,EAAiBA,IAAjB,CAFC,EAGD,CAAC,UAAD,EAAaE,GAAb,CAHC;EAID,GAAC,cAAD,EAAiB,MAAjB,CAJC,CAnEY;EAyEf/7B,EAAAA,CAAC,EAAE,CACD,CAAC,eAAD,EAAkB07B,GAAlB,CADC,EAED,CAAC,gBAAD,EAAmBv1B,KAAnB,CAFC,EAGD,CAAC,kBAAD,EAAqB,QAArB,CAHC;EAAA,GAzEY;EA8EflG,EAAAA,CAAC,EAAE,CACD,CAAC,OAAD,EAAU87B,GAAV,CADC;EAED,GAAC,SAAD,EAAYA,GAAZ,CAFC;EAGD,GAAC,aAAD,EAAgBA,GAAhB,CAHC;EAAA,GA9EY;EAmFf37B,EAAAA,CAAC,EAAE,CACD,CAAC,iBAAD,EAAoB,MAApB,CADC,EAED,CAAC,WAAD,EAAc,aAAd,CAFC,EAGD,CAAC,iBAAD,EAAoBy7B,IAApB,CAHC,EAID,CAAC,UAAD,EAAaF,GAAb,CAJC,EAKD,CAAC,oBAAD,EAAuBx1B,KAAvB,CALC,CAnFY;EA0Ff7F,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc,aAAd,CADC,EAED,CAAC,iBAAD,EAAoBo7B,GAApB,CAFC,EAGD,CAAC,eAAD,EAAkBA,GAAlB,CAHC,EAID,CAAC,WAAD,EAAc/1B,IAAd,CAJC,CA1FY;EAgGftF,EAAAA,CAAC,EAAE,CACD,CAAC,aAAD,EAAgBu7B,IAAhB,CADC,EAED,CAAC,WAAD,EAAcj2B,IAAd,CAFC,EAGD,CAAC,aAAD,EAAgBk2B,IAAhB,CAHC,EAID,CAAC,cAAD,EAAiBD,IAAjB,CAJC;EAKD,GAAC,cAAD,EAAiBA,IAAjB,CALC;EAMD,GAAC,oBAAD,EAAuBC,IAAvB,CANC,EAOD,CAAC,WAAD,EAAchmB,IAAd,CAPC,EAQD,CAAC,QAAD,EAAWkmB,GAAX,CARC;EAAA,GAhGY;EA0Gfv7B,EAAAA,CAAC,EAAE,CACD,CAAC,uBAAD,EAA0Bw7B,IAA1B,CADC;EAAA,GA1GY;EA6Gfr7B,EAAAA,CAAC,EAAE,CACD,CAAC,WAAD,EAAc+6B,GAAd,CADC,EAED,CAAC,UAAD,EAAaA,GAAb,CAFC,EAGD,CAAC,SAAD,EAAYA,GAAZ,CAHC,EAID,CAAC,YAAD,EAAeA,GAAf,CAJC,EAKD,CAAC,UAAD,EAAaG,IAAb,CALC,EAMD,CAAC,eAAD,EAAkBrjB,MAAlB,CANC,EAOD,CAAC,SAAD,EAAYA,MAAZ,CAPC,EAQD,CAAC,cAAD,EAAiBkjB,GAAjB,CARC,EASD,CAAC,gBAAD,EAAmBA,GAAnB,CATC,EAUD,CAAC,aAAD,EAAgBA,GAAhB,CAVC,EAWD,CAAC,YAAD,EAAeA,GAAf,CAXC,EAYD,CAAC,eAAD,EAAkBG,IAAlB,CAZC;EA7GY,CAAjB;;ECjBA;EACA,IAAMH,KAAG,GAAG,WAAZ;EACA,IAAMC,KAAG,GAAG,YAAZ;EACA,IAAMC,MAAI,GAAG,cAAb;EACA,IAAMC,MAAI,GAAG,UAAb;EACA,IAAMC,MAAI,GAAG,WAAb;EACA,IAAMG,GAAG,GAAG,QAAZ;EACA,IAAMC,IAAI,GAAG,QAAb;EACA,IAAM/1B,OAAK,GAAG,OAAd;EACA,IAAMg2B,EAAE,GAAG,MAAX;EACA,IAAMtmB,MAAI,GAAG,MAAb;EACA,IAAMmmB,MAAI,GAAG,UAAb;EACA,IAAM1kB,KAAK,GAAG,OAAd;;EAGA,aAAc,GAAG,CACf,IADe;EAEf,IAFe;EAGf;;EAEE8kB,EAAAA,EAAE,EAAEP,MAFN;EAGEQ,EAAAA,EAAE,EAAExmB,MAHN;EAIEymB,EAAAA,EAAE,EAAEZ,KAJN;EAKEa,EAAAA,EAAE,EAAEN,GALN;EAME,QAAME,EANR;EAOE,QAAMA;EAPR,CAHe,EAYf;;EAEEK,EAAAA,GAAG,EAAEV,MAFP;EAGEW,EAAAA,GAAG,EAAEX,MAHP;EAIEY,EAAAA,GAAG,EAAEZ,MAJP;EAME,SAAOG,GANT;EAOE,SAAO3kB,KAPT;EAQE,SAAO,QART;EASEqlB,EAAAA,GAAG,EAAEjB,KATP;EAUEr3B,EAAAA,GAAG,EAAE83B,EAVP;EAWES,EAAAA,GAAG,EAAEd,MAXP;EAYEe,EAAAA,GAAG,EAAEnB,KAZP;EAaEoB,EAAAA,GAAG,EAAEnB,KAbP;EAcEoB,EAAAA,GAAG,EAAE,QAdP;;EAeEC,EAAAA,GAAG,EAAErB,KAfP;EAgBEsB,EAAAA,GAAG,EAAEvB,KAhBP;EAiBEwB,EAAAA,GAAG,EAAExB,KAjBP;EAkBEyB,EAAAA,GAAG,EAAEvB,MAlBP;EAmBEwB,EAAAA,GAAG,EAAE1B,KAnBP;EAoBE2B,EAAAA,GAAG,EAAE3B,KApBP;EAqBE4B,EAAAA,GAAG,EAAE5B,KArBP;EAsBE6B,EAAAA,GAAG,EAAE7B,KAtBP;EAuBE8B,EAAAA,GAAG,EAAE9B,KAvBP;EAwBE+B,EAAAA,GAAG,EAAE5B,MAxBP;EAyBE6B,EAAAA,GAAG,EAAE7B,MAzBP;EA0BE8B,EAAAA,GAAG,EAAE/B;EA1BP,CAZe,EAwCf;;EAEEgC,EAAAA,IAAI,EAAE9B,MAFR;EAGE+B,EAAAA,IAAI,EAAE/B,MAHR;EAIEgC,EAAAA,IAAI,EAAEhC,MAJR;EAKEiC,EAAAA,IAAI,EAAEjC,MALR;EAMEkC,EAAAA,IAAI,EAAElC,MANR;EAOEmC,EAAAA,IAAI,EAAEnC,MAPR;EAQEoC,EAAAA,IAAI,EAAEpC,MARR;EAUEqC,EAAAA,IAAI,EAAEnC,MAVR;;EAWEoC,EAAAA,IAAI,EAAEzC,KAXR;EAYE0C,EAAAA,IAAI,EAAErC,MAZR;;EAaEsC,EAAAA,IAAI,EAAEtC,MAbR;;EAcEuC,EAAAA,IAAI,EAAE3C,MAdR;EAeE4C,EAAAA,IAAI,EAAErC,EAfR;EAgBEsC,EAAAA,IAAI,EAAEzC,MAhBR;;EAiBE0C,EAAAA,IAAI,EAAE7C,MAjBR;EAkBE8C,EAAAA,IAAI,EAAE/C,MAlBR;EAmBEgD,EAAAA,IAAI,EAAE3C,GAnBR;EAoBE4C,EAAAA,IAAI,EAAElD,KApBR;EAqBEmD,EAAAA,IAAI,EAAEpD,KArBR;EAsBEqD,EAAAA,IAAI,EAAE7C,IAtBR;EAuBE8C,EAAAA,IAAI,EAAE9C,IAvBR;EAwBE+C,EAAAA,IAAI,EAAE/C,IAxBR;EAyBEgD,EAAAA,IAAI,EAAEjD,GAzBR;EA0BEkD,EAAAA,IAAI,EAAEzD,KA1BR;EA2BE0D,EAAAA,IAAI,EAAE1D,KA3BR;EA4BE2D,EAAAA,IAAI,EAAErD,MA5BR;;EA6BEsD,EAAAA,IAAI,EAAE1D,MA7BR;EA8BE2D,EAAAA,IAAI,EAAEjoB,KA9BR;EA+BEpS,EAAAA,IAAI,EAAEw2B,KA/BR;EAgCE8D,EAAAA,IAAI,EAAExD,MAhCR;;EAiCEyD,EAAAA,IAAI,EAAE9D,KAjCR;EAkCE+D,EAAAA,IAAI,EAAE,OAlCR;EAmCEC,EAAAA,IAAI,EAAE9D,MAnCR;EAoCE+D,EAAAA,IAAI,EAAElE,KApCR;EAqCEmE,EAAAA,IAAI,EAAEhqB,MArCR;EAsCEiqB,EAAAA,IAAI,EAAEjE;EAtCR,CAxCe,EAgFf;;EAEEkE,EAAAA,KAAK,EAAEjE,MAFT;EAGEkE,EAAAA,KAAK,EAAElE,MAHT;EAIEmE,EAAAA,KAAK,EAAEnE,MAJT;EAMEoE,EAAAA,KAAK,EAAEhE,IANT;EAOEiE,EAAAA,KAAK,EAAEzE,KAPT;EAQE0E,EAAAA,KAAK,EAAElE,IART;EASEmE,EAAAA,KAAK,EAAEpE,GATT;EAUEqE,EAAAA,KAAK,EAAE1E,MAVT;EAWE2E,EAAAA,KAAK,EAAErE,IAXT;EAYEsE,EAAAA,KAAK,EAAExE,MAZT;;EAaEyE,EAAAA,KAAK,EAAEzE,MAbT;;EAcE0E,EAAAA,KAAK,EAAE7qB,MAdT;EAeE8qB,EAAAA,KAAK,EAAEzE,IAfT;EAgBE0E,EAAAA,KAAK,EAAElF,KAhBT;EAiBEmF,EAAAA,KAAK,EAAEjF,MAjBT;EAkBEkF,EAAAA,KAAK,EAAE,SAlBT;EAmBEC,EAAAA,KAAK,EAAE7E,IAnBT;EAoBE8E,EAAAA,KAAK,EAAE/E,GApBT;EAqBEgF,EAAAA,KAAK,EAAEhF;EArBT,CAhFe,EAuGf;;EAEEiF,EAAAA,MAAM,EAAElF,MAFV;;EAGEmF,EAAAA,MAAM,EAAEh7B,OAHV;EAIEi7B,EAAAA,MAAM,EAAEj7B,OAJV;EAKEk7B,EAAAA,MAAM,EAAE;EALV,CAvGe,EA8Gf;;EAEEC,EAAAA,OAAO,EAAEtF,MAFX;;EAGEuF,EAAAA,OAAO,EAAEvF,MAHX;;EAAA,CA9Ge,CAAjB;;ECZA,IAAMwF,SAAS,GAAG,SAAZA,SAAY,CAAS75B,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI3G,GAAG,GAAGgJ,IAAI,CAACjG,KAAf;EACA,MAAI+/B,KAAI,GAAG9iC,GAAG,CAACA,GAAG,CAACM,MAAJ,GAAa,CAAd,CAAd;;EACA,MAAIutB,UAAQ,CAACjoB,cAAT,CAAwBk9B,KAAxB,MAAkC,IAAtC,EAA4C;EAC1C,QAAI9yB,IAAI,GAAG6d,UAAQ,CAACiV,KAAD,CAAnB;;EACA,SAAK,IAAIrhC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGuO,IAAI,CAAC1P,MAAzB,EAAiCmB,CAAC,IAAI,CAAtC,EAAyC;EACvC,UAAIuO,IAAI,CAACvO,CAAD,CAAJ,CAAQ,CAAR,EAAWoB,IAAX,CAAgB7C,GAAhB,MAAyB,IAA7B,EAAmC;EACjCgJ,QAAAA,IAAI,CAAC2sB,OAAL,CAAa3lB,IAAI,CAACvO,CAAD,CAAJ,CAAQ,CAAR,CAAb,mBAAmCqhC,KAAnC,eAA4CrhC,CAA5C,GAAiDkF,KAAjD;EACA;EACD;EACF;EACF;EACF,CAZD;;;EAeA,IAAMo8B,aAAa,GAAG,SAAhBA,aAAgB,CAAS/5B,IAAT,EAAerC,KAAf,EAAsB;EAC1C,MAAMoG,GAAG,GAAG/D,IAAI,CAACjG,KAAL,CAAWzC,MAAvB;EACA,MAAIoQ,GAAG,GAAG,CAAV;;EACA,MAAI3D,GAAG,IAAI2D,GAAX,EAAgB;EACdA,IAAAA,GAAG,GAAG3D,GAAG,GAAG,CAAZ;EACD;;EACD,OAAK,IAAI7M,CAAC,GAAGwQ,GAAb,EAAkBxQ,CAAC,GAAG,CAAtB,EAAyBA,CAAC,IAAI,CAA9B,EAAiC;EAC/B,QAAIF,GAAG,GAAGgJ,IAAI,CAACjG,KAAL,CAAW4H,MAAX,CAAkBoC,GAAG,GAAG7M,CAAxB,EAA2B6M,GAA3B,CAAV;;EACA,QAAIi2B,SAAS,CAAChjC,GAAG,CAACM,MAAL,CAAT,CAAsBsF,cAAtB,CAAqC5F,GAArC,MAA8C,IAAlD,EAAwD;EACtD,UAAI+F,GAAG,GAAGi9B,SAAS,CAAChjC,GAAG,CAACM,MAAL,CAAT,CAAsBN,GAAtB,CAAV;EACAgJ,MAAAA,IAAI,CAAC2sB,OAAL,CAAa5vB,GAAb,EAAkB,aAAa/F,GAA/B,EAAoC2G,KAApC;EACA;EACD;EACF;EACF,CAdD;;;EAiBA,IAAMm2B,YAAU,GAAG,SAAbA,UAAa,CAAS9zB,IAAT,EAAerC,KAAf,EAAsB;EACvCo8B,EAAAA,aAAa,CAAC/5B,IAAD,EAAOrC,KAAP,CAAb;EACAk8B,EAAAA,SAAS,CAAC75B,IAAD,EAAOrC,KAAP,CAAT;EACD,CAHD;;EAIA,eAAc,GAAGm2B,YAAjB;;ECvCA;EACA;EACA;EACA,aAAc,GAAG;EACf,QAAM,IADS;EAEf,QAAM,IAFS;EAGf,QAAM,IAHS;EAIf,QAAM,IAJS;EAKf,QAAM,IALS;EAMf,QAAM,IANS;EAOf,QAAM,IAPS;EAQf,QAAM,IARS;EASf,SAAO,IATQ;EAUf,QAAM,IAVS;EAWf,QAAM,IAXS;EAYf,QAAM,IAZS;EAaf,SAAO,IAbQ;EAcf,SAAO,IAdQ;EAef,SAAO,IAfQ;EAgBf,SAAO,IAhBQ;EAiBf,SAAO,IAjBQ;EAkBf,SAAO,IAlBQ;EAmBf,SAAO,IAnBQ;EAoBf,SAAO,IApBQ;EAqBf,UAAQ,IArBO;EAsBf,SAAO,IAtBQ;EAuBf,SAAO,IAvBQ;EAwBf,SAAO,IAxBQ;EAyBf,SAAO,IAzBQ;EA0Bf,SAAO,IA1BQ;EA2Bf,SAAO,IA3BQ;EA4Bf,SAAO,IA5BQ;EA6Bf,SAAO,IA7BQ;EA8Bf,SAAO,IA9BQ;EA+Bf,SAAO,IA/BQ;EAgCf,SAAO,IAhCQ;EAiCf,UAAQ,IAjCO;EAkCf,SAAO,IAlCQ;EAmCf,SAAO,IAnCQ;EAoCf,SAAO,IApCQ;EAqCf,QAAM,IArCS;EAsCf,QAAM,IAtCS;EAuCf,QAAM,IAvCS;EAwCf,QAAM,IAxCS;EAyCf,SAAO,IAzCQ;EA0Cf,SAAO,IA1CQ;EA2Cf,SAAO,IA3CQ;EA4Cf,SAAO,IA5CQ;EA6Cf,SAAO,IA7CQ;EA8Cf,SAAO,IA9CQ;EA+Cf,SAAO,IA/CQ;EAgDf,SAAO,IAhDQ;EAiDf,QAAM,IAjDS;EAkDf,SAAO,IAlDQ;EAmDf,UAAQ;EAnDO,CAAjB;;ECFA,IAAMmG,QAAQ,GAAG,oGAAjB;EAGA;EACA;EACA;EAEA;EACA;;EACA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAAC,GAAG,EAAI;EAC1B,MAAIA,GAAG,CAACz4B,MAAJ,CAAW,CAAX,MAAkB,GAAtB,EAA2B;;EAEzB,QAAIy4B,GAAG,CAAC11B,KAAJ,CAAU,MAAV,MAAsB,IAA1B,EAAgC;EAC9B,aAAO,KAAP;EACD,KAJwB;;;EAMzB,QAAI01B,GAAG,CAAC11B,KAAJ,CAAU,GAAV,CAAJ,EAAoB;EAClB,aAAO,KAAP;EACD,KARwB;;;EAUzB,QAAI01B,GAAG,CAAC7iC,MAAJ,GAAa,EAAjB,EAAqB;EACnB,aAAO,KAAP;EACD;;EACD,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAjBD;;;EAoBA,IAAM8iC,UAAU,GAAG,SAAbA,UAAa,CAAApjC,GAAG,EAAI;EACxBA,EAAAA,GAAG,GAAGA,GAAG,CAACmD,OAAJ,CAAY,OAAZ,EAAqB,GAArB,CAAN,CADwB;;EAExB,SAAOkgC,SAAQ,CAACz9B,cAAT,CAAwB5F,GAAxB,CAAP;EACD,CAHD;;EAKA,IAAMsjC,QAAQ,GAAG,SAAXA,QAAW,CAACt6B,IAAD,EAAOrC,KAAP,EAAiB;EAChC,MAAIw8B,GAAG,GAAGn6B,IAAI,CAACrF,GAAL,GAAWqF,IAAI,CAAC/I,IAAhB,GAAuB+I,IAAI,CAACpF,IAAtC;EACAu/B,EAAAA,GAAG,GAAGA,GAAG,CAAClgC,IAAJ,EAAN,CAFgC;;EAIhCkgC,EAAAA,GAAG,GAAGA,GAAG,CAAChgC,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,CAAN,CAJgC;;EAMhC,MAAI+/B,YAAY,CAACC,GAAD,CAAZ,KAAsB,IAA1B,EAAgC;EAC9Bn6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,OAAT,EAAkB,aAAlB,EAAiCY,KAAjC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACAn6B,IAAAA,IAAI,CAACrF,GAAL,GAAWqF,IAAI,CAACrF,GAAL,CAASR,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAX;EACA6F,IAAAA,IAAI,CAACpF,IAAL,GAAYoF,IAAI,CAACpF,IAAL,CAAUT,OAAV,CAAkB,GAAlB,EAAuB,EAAvB,CAAZ;EACD,GAX+B;;;EAahC,MAAI6F,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgBw1B,QAAhB,CAAJ,EAA+B;EAC7Bj6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,OAAT,EAAkB,eAAlB,EAAmCY,KAAnC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACD,GAhB+B;;;EAkBhC,MAAIC,UAAU,CAACD,GAAD,CAAV,KAAoB,IAAxB,EAA8B;EAC5Bn6B,IAAAA,IAAI,CAACjD,GAAL,CAAS,UAAT,EAAqB,gBAArB,EAAuCY,KAAvC;EACAqC,IAAAA,IAAI,CAAC/I,IAAL,GAAYkjC,GAAZ;EACD;EACF,CAtBD;;EAwBA,YAAc,GAAGG,QAAjB;;EC3DA,IAAMC,KAAK,GAAG;EACZpmB,EAAAA,OAAO,EAAE1T,UADG;EAEZjB,EAAAA,WAAW,EAAEkB,gBAFD;EAGZxD,EAAAA,KAAK,EAAEyD,WAHK;EAIZ8wB,EAAAA,MAAM,EAAE7wB,WAJI;EAKZmvB,EAAAA,KAAK,EAAElvB;EALK,CAAd;;EASA,IAAM25B,OAAO,GAAG,SAAVA,OAAU,CAASj1B,GAAT,EAAcpC,KAAd,EAAqB;EACnC,MAAIxF,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB,CADmC;;EAGnC48B,EAAAA,KAAK,CAACpmB,OAAN,CAAchR,KAAd,EAAqBxF,KAArB,EAHmC;;EAMnC,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CADwC;;EAGxCqjC,IAAAA,KAAK,CAAC/6B,WAAN,CAAkB2D,KAAlB,EAAyBjM,CAAzB,EAA4ByG,KAA5B,EAHwC;;EAKxC48B,IAAAA,KAAK,CAACr9B,KAAN,CAAY8C,IAAZ,EAAkBrC,KAAlB,EALwC;;EAOxC48B,IAAAA,KAAK,CAAC9I,MAAN,CAAazxB,IAAb,EAAmBrC,KAAnB,EAPwC;;EASxC48B,IAAAA,KAAK,CAACxK,KAAN,CAAY/vB,IAAZ,EAAkBrC,KAAlB;EACD;;EACD,SAAO4H,GAAP;EACD,CAlBD;;EAmBA,WAAc,GAAGi1B,OAAjB;;EC5BA;EACA;EACA;EAEA;EACA,IAAIC,aAAa,GAAG;EAClBvjC,EAAAA,CAAC,EAAE,MADe;;EAElBwjC,EAAAA,KAAK,EAAE,MAFW;;EAGlBC,EAAAA,EAAE,EAAE,MAHc;;EAIlBC,EAAAA,KAAK,EAAE,MAJW;;EAKlBlQ,EAAAA,GAAG,EAAE,MALa;;EAMlBmQ,EAAAA,OAAO,EAAE,MANS;;EAOlB,QAAI,MAPc;;EAQlBC,EAAAA,GAAG,EAAE,MARa;;EASlBC,EAAAA,GAAG,EAAE,MATa;;EAUlB,UAAM,MAVY;;EAWlBC,EAAAA,GAAG,EAAE,MAXa;;EAYlBC,EAAAA,IAAI,EAAE,MAZY;;EAalBC,EAAAA,GAAG,EAAE,MAba;;EAclBC,EAAAA,IAAI,EAAE,WAdY;;EAelBC,EAAAA,GAAG,EAAE,MAfa;;EAgBlBC,EAAAA,KAAK,EAAE,MAhBW;;EAiBlBt8B,EAAAA,MAAM,EAAE,MAjBU;;EAAA,CAApB;;EAqBA,IAAIu8B,cAAc,GAAG;EACnBV,EAAAA,KAAK,EAAE,MADY;;EAEnBW,EAAAA,EAAE,EAAE,MAFe;;EAGnB7jB,EAAAA,GAAG,EAAE,WAHc;;EAInB8jB,EAAAA,IAAI,EAAE,MAJa;;EAKnBC,EAAAA,GAAG,EAAE,MALc;;EAMnBC,EAAAA,IAAI,EAAE,MANa;;EAOnBC,EAAAA,IAAI,EAAE,MAPa;;EAQnBC,EAAAA,OAAO,EAAE,MARU;;EASnBC,EAAAA,IAAI,EAAE,MATa;;EAUnBd,EAAAA,GAAG,EAAE,MAVc;;EAWnBe,EAAAA,EAAE,EAAE;EAXe,CAArB;;EAeA,IAAIC,YAAY,GAAG;EACjBvrB,EAAAA,SAAS,EAAE,MADM;;EAEjB1Q,EAAAA,UAAU,EAAE,MAFK;;EAGjBoR,EAAAA,UAAU,EAAE,MAHK;;EAIjBL,EAAAA,MAAM,EAAE,MAJS;;EAKjBxB,EAAAA,OAAO,EAAE,MALQ;;EAMjBW,EAAAA,KAAK,EAAE,MANU;;EAOjBC,EAAAA,OAAO,EAAE,MAPQ;;EAQjBN,EAAAA,KAAK,EAAE,MARU;;EASjBgB,EAAAA,WAAW,EAAE,MATI;;EAUjBnB,EAAAA,OAAO,EAAE,MAVQ;;EAWjBd,EAAAA,SAAS,EAAE,QAXM;;EAAA,CAAnB;;EAeA,IAAIstB,aAAa,GAAG;EAClBtsB,EAAAA,MAAM,EAAE,MADU;;EAElBtR,EAAAA,SAAS,EAAE,MAFO;;EAGlB+S,EAAAA,WAAW,EAAE,MAHK;;EAIlBxB,EAAAA,KAAK,EAAE,MAJW;;EAKlBE,EAAAA,UAAU,EAAE,MALM;;EAMlBD,EAAAA,YAAY,EAAE,MANI;;EAAA,CAApB;EAQA,UAAc,GAAG;EACf0rB,EAAAA,cAAc,EAAEA,cADD;EAEfb,EAAAA,aAAa,EAAEA,aAFA;EAIfwB,EAAAA,aAAa,EAAED,aAJA;EAKfE,EAAAA,YAAY,EAAEH;EALC,CAAjB;;EC/DA,IAAMI,SAAS,GAAGhjC,MAAM,CAACC,IAAP,CAAYgjC,MAAM,CAACF,YAAnB,CAAlB;EACA,IAAMG,UAAU,GAAGljC,MAAM,CAACC,IAAP,CAAYgjC,MAAM,CAACH,aAAnB,CAAnB;;EAEA,IAAMK,eAAe,GAAG,SAAlBA,eAAkB,CAASn5B,KAAT,EAAgBxF,KAAhB,EAAuB;EAAA,6BACpCzG,CADoC;EAE3C,QAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB,CAF2C;;EAI3C,QAAI8I,IAAI,CAACu8B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAN0C;;;;EAS3C,QAAIj4B,QAAQ,GAAGnB,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAIoN,QAAJ,EAAc;;EAEZ,UAAI83B,MAAM,CAAC3B,aAAP,CAAqB79B,cAArB,CAAoC0H,QAAQ,CAACvK,KAA7C,MAAwD,IAA5D,EAAkE;EAChE,YAAIgD,GAAG,GAAGq/B,MAAM,CAAC3B,aAAP,CAAqBn2B,QAAQ,CAACvK,KAA9B,CAAV;EACAiG,QAAAA,IAAI,CAACjD,GAAL,CAASA,GAAT,EAAc,WAAWuH,QAAQ,CAACvK,KAAlC,EAAyC4D,KAAzC;EACA;EACD,OANW;;;;EASZ,UAAI6+B,QAAQ,GAAGL,SAAS,CAAC91B,IAAV,CAAe,UAAAtJ,GAAG;EAAA,eAAIuH,QAAQ,CAACtH,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAlB,CAAf;;EACA,UAAIy/B,QAAQ,KAAK7/B,SAAjB,EAA4B;EAC1B,YAAII,IAAG,GAAGq/B,MAAM,CAACF,YAAP,CAAoBM,QAApB,CAAV;EACAx8B,QAAAA,IAAI,CAACjD,GAAL,CAASA,IAAT,EAAc,WAAWy/B,QAAzB,EAAmC7+B,KAAnC;EACA;EACD;EACF,KAzB0C;;;EA4B3C,QAAI8+B,QAAQ,GAAGt5B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,QAAIulC,QAAJ,EAAc;;EAEZ,UAAIL,MAAM,CAACd,cAAP,CAAsB1+B,cAAtB,CAAqC6/B,QAAQ,CAAC1iC,KAA9C,MAAyD,IAA7D,EAAmE;EACjE,YAAIgD,KAAG,GAAGq/B,MAAM,CAACd,cAAP,CAAsBmB,QAAQ,CAAC1iC,KAA/B,CAAV;EACAiG,QAAAA,IAAI,CAACjD,GAAL,CAASA,KAAT,EAAc,YAAY0/B,QAAQ,CAAC1iC,KAAnC,EAA0C4D,KAA1C;EACA;EACD,OANW;;;;EASZ,UAAI6+B,SAAQ,GAAGH,UAAU,CAACh2B,IAAX,CAAgB,UAAAtJ,GAAG;EAAA,eAAI0/B,QAAQ,CAACz/B,IAAT,CAAcD,GAAd,CAAJ;EAAA,OAAnB,CAAf;;EACA,UAAIy/B,SAAQ,KAAK7/B,SAAjB,EAA4B;EAC1B,YAAII,KAAG,GAAGq/B,MAAM,CAACH,aAAP,CAAqBO,SAArB,CAAV;EACAx8B,QAAAA,IAAI,CAACjD,GAAL,CAASA,KAAT,EAAc,YAAYy/B,SAA1B,EAAoC7+B,KAApC;EACA;EACD;EACF;EA5C0C;;EAC7C,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EAAA,qBAAjCA,CAAiC;;EAAA,6BAyCpC;EAGL;EACF,CA9CD;;EA+CA,iBAAc,GAAGolC,eAAjB;;ECnDA,IAAMlhC,WAAS,GAAG,2BAAlB;EACA,IAAMshC,SAAS,GAAG,OAAlB;EAEA;;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASp3B,GAAT,EAAc;EAC9B,MAAI5H,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAM8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAlB;;EACA,UAAIkE,WAAS,CAACvB,IAAV,CAAemG,IAAI,CAAC/I,IAApB,MAA8B,IAA9B,IAAsCylC,SAAS,CAAC7iC,IAAV,CAAemG,IAAI,CAAC/I,IAApB,MAA8B,KAAxE,EAA+E;EAC7E+I,QAAAA,IAAI,CAACjD,GAAL,CAAS,YAAT,EAAuB,gBAAvB,EAAyCY,KAAzC;EACD;EACF;EACF,GARD;EASD,CAXD;;EAYA,WAAc,GAAGg/B,SAAjB;;EChBA,IAAMC,SAAS,GAAG,8BAAlB;EACA,IAAMC,MAAM,GAAG,YAAf;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS35B,KAAT,EAAgBxF,KAAhB,EAAuB;EACzC,MAAIsW,GAAG,GAAGtW,KAAK,CAAC4M,KAAhB;EACApH,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAA2G,IAAI,EAAI;;EAEpB,QAAIA,IAAI,CAACu8B,OAAL,OAAmB,IAAvB,EAA6B;EAC3B;EACD,KAJmB;;;EAMpB,QAAIK,SAAS,CAAC/iC,IAAV,CAAemG,IAAI,CAACjG,KAApB,MAA+B,IAAnC,EAAyC;;EAEvC,UAAIgjC,IAAI,GAAG/8B,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB0iC,MAAnB,EAA2B,EAA3B,CAAX;;EACA,UAAIE,IAAI,IAAIA,IAAI,CAACzlC,MAAL,GAAc,CAAtB,IAA2B2c,GAAG,CAAC8oB,IAAD,CAAH,KAAcpgC,SAAzC,IAAsDsX,GAAG,CAACrX,cAAJ,CAAmBmgC,IAAnB,MAA6B,IAAvF,EAA6F;EAC3F/8B,QAAAA,IAAI,CAACjD,GAAL,CAASkX,GAAG,CAAC8oB,IAAD,CAAZ,EAAoB,UAAUA,IAA9B,EAAoCp/B,KAApC;EACD;EACF;EACF,GAbD;EAcD,CAhBD;;EAiBA,WAAc,GAAGm/B,WAAjB;;ECrBA;EACA,IAAME,QAAQ,GAAG,CACf,WADe,EAEf,QAFe,EAGf,QAHe,EAIf,uCAJe,EAKf,4CALe,EAMf,4BANe,EAOf,kDAPe,EAQf,uBARe,EASf,qBATe,EAUf,wBAVe,EAWf,MAXe,EAYf,OAZe,EAaf,QAbe,EAcf,QAde,EAef,WAfe,EAgBf,WAhBe,EAiBf,mBAjBe,EAkBf,YAlBe,EAmBf,oBAnBe,EAoBf,oBApBe,EAqBf,OArBe,CAAjB;;EAyBA,IAAMC,UAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,eAbiB;EAcjB,iBAdiB,EAejB,kBAfiB,EAgBjB,+BAhBiB,EAiBjB,aAjBiB,EAkBjB,YAlBiB,EAmBjB,sCAnBiB,EAoBjB,QApBiB,EAqBjB,0BArBiB,CAAnB;EAuBA,cAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,UADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EChDA,IAAME,SAAS,GAAG,CAAC,aAAD,EAAgB,SAAhB,EAA2B,OAA3B,EAAoC,OAApC,EAA6C,QAA7C,EAAuD,OAAvD,EAAgE,SAAhE,EAA2E,SAA3E,CAAlB;EAEA,IAAMC,SAAS,GAAG,CAAC,KAAD,EAAQ,MAAR,EAAgB,gBAAhB,EAAkC,KAAlC,CAAlB;EACA,IAAMC,WAAW,GAAG,CAAC,IAAD,EAAO,KAAP,CAApB;EAEA;;EACA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS1kC,CAAT,EAAYgF,KAAZ,EAAmB;EACrC,MAAIhF,CAAC,CAACqE,IAAF,CAAOkR,IAAP,IAAe,CAACvV,CAAC,CAACqE,IAAF,CAAOmC,OAA3B,EAAoC;EAClC,QAAInI,GAAG,GAAG2B,CAAC,CAACoB,KAAZ,CADkC;;EAGlC,QAAIpB,CAAC,CAACqE,IAAF,CAAOmR,QAAP,IAAmBxV,CAAC,CAACqE,IAAF,CAAOc,MAA9B,EAAsC;EACpC;EACD,KALiC;;;EAOlC,QAAI9G,GAAG,CAACM,MAAJ,IAAc,CAAlB,EAAqB;EACnBqB,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCY,KAApC;EACA;EACD,KAViC;;;EAYlC,QAAIu/B,SAAS,CAAC72B,IAAV,CAAe,UAAAtJ,GAAG;EAAA,aAAIpE,CAAC,CAACqE,IAAF,CAAOD,GAAP,CAAJ;EAAA,KAAlB,CAAJ,EAAwC;EACtC;EACD,KAdiC;;;EAgBlC,QAAIwqB,UAAK,CAACyV,QAAN,CAAe32B,IAAf,CAAoB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAvB,CAAJ,EAA+C;EAC7C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,cAAhB,EAAgCY,KAAhC;EACA;EACD,KAnBiC;;;EAqBlC,QAAI4pB,UAAK,CAAC0V,UAAN,CAAiB52B,IAAjB,CAAsB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAAzB,CAAJ,EAAiD;EAC/C2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,gBAAlB,EAAoCY,KAApC;EACA;EACD,KAxBiC;;;EA2BlC,QAAI,KAAK9D,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;;EAE3B,UAAImmC,SAAS,CAAC92B,IAAV,CAAe,UAAAhK,GAAG;EAAA,eAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,OAAlB,CAAJ,EAA0C;EACxC;EACD;;EACD2B,MAAAA,CAAC,CAACoE,GAAF,CAAM,QAAN,EAAgB,iBAAhB,EAAmCY,KAAnC;EACA;EACD,KAlCiC;;;EAoClC,QAAIy/B,WAAW,CAAC/2B,IAAZ,CAAiB,UAAAhK,GAAG;EAAA,aAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,KAApB,CAAJ,EAA4C;EAC1C;EACD;;EACD2B,IAAAA,CAAC,CAACoE,GAAF,CAAM,UAAN,EAAkB,mBAAlB,EAAuCY,KAAvC;EACD;EACF,CA1CD;;EA2CA,cAAc,GAAG0/B,WAAjB;;EClDA;EACA;EACA,IAAMC,QAAQ,GAAG,CACf,SADe,EAEf,gBAFe,EAGf,QAHe,EAIf,SAJe,EAKf,UALe,EAMf,QANe,EAOf,UAPe,EAQf,SARe,EASf,MATe,EAUf,OAVe,EAWf,YAXe,EAYf,aAZe,EAaf,WAbe,EAcf,WAde,EAef,UAfe,EAgBf,UAhBe,EAiBf,MAjBe,EAkBf,QAlBe,EAmBf,OAnBe,EAoBf,MApBe,EAqBf,QArBe,EAsBf,SAtBe,EAuBf,aAvBe,EAwBf,UAxBe,EAyBf,kBAzBe,EA0Bf,QA1Be,EA2Bf,MA3Be,EA4Bf,QA5Be,EA6Bf,SA7Be,EA8Bf,MA9Be,EA+Bf,WA/Be,EAgCf,QAhCe,EAiCf,cAjCe,EAkCf,QAlCe,EAmCf,WAnCe,EAoCf,OApCe,EAqCf,WArCe,EAsCf,QAtCe,EAuCf,QAvCe,EAwCf,QAxCe,EAyCf,UAzCe,EA0Cf,MA1Ce,EA2Cf,IA3Ce,EA4Cf,WA5Ce,EA6Cf,QA7Ce,EA8Cf,YA9Ce,EA+Cf,SA/Ce,EAgDf,YAhDe,EAiDf,WAjDe,EAkDf,gBAlDe,EAmDf,WAnDe,EAoDf,SApDe,EAqDf,eArDe,EAsDf,WAtDe,EAuDf,eAvDe,EAwDf,YAxDe,EAyDf,SAzDe,EA0Df,YA1De,EA2Df,YA3De,EA4Df,aA5De,EA6Df,OA7De,EA8Df,MA9De,EA+Df,SA/De,EAgEf,MAhEe,EAiEf,YAjEe,EAkEf,MAlEe,EAmEf,aAnEe,EAoEf,YApEe,EAqEf,kBArEe,EAsEf,aAtEe,EAuEf,QAvEe,EAwEf,aAxEe,EAyEf,aAzEe,EA0Ef,UA1Ee,EA2Ef,UA3Ee,EA4Ef,WA5Ee,EA6Ef,QA7Ee,EA8Ef,UA9Ee,EA+Ef,aA/Ee,EAgFf,QAhFe,EAiFf,UAjFe,EAkFf,YAlFe,EAmFf,aAnFe,EAoFf,eApFe,EAqFf,QArFe,EAsFf,MAtFe,EAuFf,cAvFe,EAwFf,SAxFe,EAyFf,YAzFe,EA0Ff,WA1Fe,EA2Ff,IA3Fe,EA4Ff,YA5Fe,EA6Ff,MA7Fe,EA8Ff,KA9Fe,EA+Ff,SA/Fe,EAgGf,OAhGe,EAiGf,YAjGe,EAkGf,OAlGe,EAmGf,OAnGe,EAoGf,kBApGe,EAqGf,QArGe,EAsGf,UAtGe,EAuGf,UAvGe,EAwGf,OAxGe,EAyGf,QAzGe,EA0Gf,KA1Ge,EA2Gf,YA3Ge,EA4Gf,UA5Ge,EA6Gf,WA7Ge,EA8Gf,yBA9Ge,EA+Gf,YA/Ge,EAgHf,WAhHe,EAiHf,eAjHe,EAkHf,YAlHe,EAmHf,YAnHe,EAoHf,aApHe,EAqHf,WArHe,EAsHf,SAtHe,EAuHf,YAvHe,EAwHf,MAxHe;EA0Hf,iBA1He,EA2Hf,SA3He,EA4Hf,iBA5He,EA6Hf,wBA7He,EA8Hf,UA9He,EA+Hf,UA/He,EAgIf,YAhIe,EAiIf,QAjIe,EAkIf,WAlIe,EAmIf,SAnIe,EAoIf,OApIe,EAqIf,UArIe,EAsIf,qBAtIe,EAuIf,WAvIe,EAwIf,UAxIe,EAyIf,UAzIe,EA0If,QA1Ie,EA2If,OA3Ie,EA4If,QA5Ie,EA6If,OA7Ie,EA8If,QA9Ie;EAgJf,MAhJe,EAiJf,cAjJe,EAkJf,aAlJe,EAmJf,QAnJe,EAoJf,KApJe,EAqJf,SArJe,EAsJf,WAtJe,EAuJf,cAvJe,EAwJf,UAxJe,EAyJf,aAzJe;EA2Jf,gBA3Je,EA4Jf,QA5Je,EA6Jf,WA7Je,EA8Jf,YA9Je,EA+Jf,gBA/Je,EAgKf,iBAhKe,EAiKf,OAjKe,EAkKf,KAlKe,EAmKf,QAnKe,EAoKf,aApKe,EAqKf,MArKe,EAsKf,OAtKe,EAuKf,OAvKe,EAwKf,aAxKe,EAyKf,SAzKe,EA0Kf,OA1Ke,EA2Kf,oBA3Ke,EA4Kf,2BA5Ke,EA6Kf,SA7Ke,EA8Kf,WA9Ke,EA+Kf,YA/Ke,EAgLf,aAhLe,EAiLf,SAjLe,EAkLf,QAlLe,EAmLf,YAnLe,EAoLf,SApLe,EAqLf,UArLe,EAsLf,aAtLe,EAuLf,SAvLe,EAwLf,SAxLe,EAyLf,MAzLe,EA0Lf,UA1Le,EA2Lf,cA3Le,EA4Lf,kBA5Le,EA6Lf,gBA7Le,EA8Lf,cA9Le,EA+Lf,UA/Le,EAgMf,SAhMe,EAiMf,oBAjMe,EAkMf,WAlMe,EAmMf,YAnMe,EAoMf,OApMe,EAqMf,UArMe,EAsMf,IAtMe,EAuMf,OAvMe,EAwMf,YAxMe,EAyMf,WAzMe,EA0Mf,SA1Me,CAAjB;EA6MA,iBAAc,GAAGA,QAAQ,CAACriC,MAAT,CAAgB,UAASlD,CAAT,EAAYf,GAAZ,EAAiB;EAChDe,EAAAA,CAAC,CAACf,GAAD,CAAD,GAAS,MAAT;EACA,SAAOe,CAAP;EACD,CAHgB,EAGd,EAHc,CAAjB;;EC5MA,IAAMwlC,QAAQ,GAAG,SAAXA,QAAW,CAAS5kC,CAAT,EAAY;;EAE3B,MAAI,CAACA,CAAC,CAACqE,IAAF,CAAOkR,IAAZ,EAAkB;EAChB,WAAO,KAAP;EACD,GAJ0B;;;EAM3B,MAAIvV,CAAC,CAACqE,IAAF,CAAOqS,OAAP,IAAkB1W,CAAC,CAACqE,IAAF,CAAOwgC,KAAzB,IAAkC7kC,CAAC,CAACqE,IAAF,CAAO8C,UAA7C,EAAyD;EACvD,WAAO,KAAP;EACD,GAR0B;;;EAU3B,MAAInH,CAAC,CAACqE,IAAF,CAAOgS,YAAP,IAAuBrW,CAAC,CAACqE,IAAF,CAAOmC,OAA9B,IAAyCxG,CAAC,CAACqE,IAAF,CAAO2R,KAAhD,IAAyDhW,CAAC,CAACyC,SAAF,EAA7D,EAA4E;EAC1E,WAAO,IAAP;EACD;;EACD,SAAO,KAAP;EACD,CAdD;;EAgBA,IAAMqiC,OAAO,GAAG,SAAVA,OAAU,CAASt6B,KAAT,EAAgBxF,KAAhB,EAAuB;EACrC,OAAK,IAAIzG,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,QAAIyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAb;;EACA,QAAIomC,aAAQ,CAAC3kC,CAAC,CAACoB,KAAH,CAAR,KAAsB4C,SAAtB,IAAmC2gC,aAAQ,CAAC1gC,cAAT,CAAwBjE,CAAC,CAACoB,KAA1B,MAAqC,IAA5E,EAAkF;;EAEhF,UAAIuK,QAAQ,GAAGnB,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAIoN,QAAQ,KAAK3H,SAAb,IAA0B4gC,QAAQ,CAACj5B,QAAD,CAAR,KAAuB,IAArD,EAA2D;EACzDA,QAAAA,QAAQ,CAACqoB,OAAT,CAAiB,cAAjB,EAAiC,YAAjC,EAA+ChvB,KAA/C;EACAhF,QAAAA,CAAC,CAACg0B,OAAF,CAAU,cAAV,EAA0B,YAA1B,EAAwChvB,KAAxC;EACA;EACD,OAP+E;;;EAShF,UAAI8+B,QAAQ,GAAGt5B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAApB;;EACA,UAAIulC,QAAQ,KAAK9/B,SAAb,IAA0B8/B,QAAQ,CAAC1iC,KAAT,KAAmB,IAAjD,EAAuD;EACrD,YAAIoJ,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,IAAgBqmC,QAAQ,CAACp6B,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAN,CAA5B,EAA4C;EAC1CyB,UAAAA,CAAC,CAACg0B,OAAF,CAAU,cAAV,EAA0B,eAA1B,EAA2ChvB,KAA3C;EACA8+B,UAAAA,QAAQ,CAAC9P,OAAT,CAAiB,cAAjB,EAAiC,eAAjC,EAAkDhvB,KAAlD;EACAwF,UAAAA,KAAK,CAACjM,CAAC,GAAG,CAAL,CAAL,CAAay1B,OAAb,CAAqB,cAArB,EAAqC,eAArC,EAAsDhvB,KAAtD;EACA;EACD;EACF;EACF;EACF;EACF,CAvBD;;EAwBA,oBAAc,GAAG8/B,OAAjB;;EC3CA,IAAMhkC,kBAAgB,GAAG,gBAAzB;EACA,IAAMikC,eAAe,GAAG,qBAAxB;EAEA,IAAMC,aAAa,GAAG;EACpB3lC,EAAAA,CAAC,EAAE,IADiB;EAEpB4lC,EAAAA,CAAC,EAAE;EAFiB,CAAtB;;EAKA,IAAMhkC,WAAS,GAAG,SAAZA,SAAY,CAASoG,IAAT,EAAerC,KAAf,EAAsB;EACtC,MAAI3G,GAAG,GAAGgJ,IAAI,CAAC5F,OAAf,CADsC;;EAGtC,MAAI4F,IAAI,CAAChD,IAAL,CAAUmC,OAAd,EAAuB;EACrB,WAAO,IAAP;EACD,GALqC;;;;;;EAUtC,MAAIxB,KAAK,CAAC4M,KAAN,CAAYvT,GAAZ,CAAJ,EAAsB;EACpB,WAAO,KAAP;EACD;;EACD,SAAOgJ,IAAI,CAACpG,SAAL,EAAP;EACD,CAdD;;;EAiBA,IAAMikC,YAAY,GAAG,SAAfA,YAAe,CAAS16B,KAAT,EAAgBxF,KAAhB,EAAuB;EAC1CwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAA2G,IAAI,EAAI;;EAEpB,QAAIA,IAAI,CAAChD,IAAL,CAAUmT,YAAV,KAA2B,IAA/B,EAAqC;EACnC;EACD,KAJmB;;;EAMpB,QAAIutB,eAAe,CAAC7jC,IAAhB,CAAqBmG,IAAI,CAAC/I,IAA1B,MAAoC,IAAxC,EAA8C;EAC5C+I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,gBAApB,EAAsCY,KAAtC;EACD,KARmB;;;EAUpB,QAAIqC,IAAI,CAACrB,WAAL,MAAsB/E,WAAS,CAACoG,IAAD,EAAOrC,KAAP,CAAnC,EAAkD;EAChDqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,cAApB,EAAoCY,KAApC;EACAqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,MAAT,EAAiB,eAAjB,EAAkCY,KAAlC;EACD,KAHD,MAGO,IAAI,CAACggC,aAAa,CAAC/gC,cAAd,CAA6BoD,IAAI,CAAC/I,IAAlC,CAAD,IAA4CwC,kBAAgB,CAACI,IAAjB,CAAsBmG,IAAI,CAAC/I,IAA3B,CAAhD,EAAkF;EACvF+I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,oBAApB,EAA0CY,KAA1C;EACAqC,MAAAA,IAAI,CAACjD,GAAL,CAAS,MAAT,EAAiB,kBAAjB,EAAqCY,KAArC;EACD,KAhBmB;;;EAkBpB,QAAIqC,IAAI,CAAChD,IAAL,CAAUgS,YAAV,IAA0BhP,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAAlD,EAAqD;EACnD0I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,aAApB,EAAmCY,KAAnC;EACD;;EACD,QAAIqC,IAAI,CAAChD,IAAL,CAAUgS,YAAV,IAA0BhP,IAAI,CAACrB,WAAL,EAA1B,IAAgDqB,IAAI,CAAC/I,IAAL,CAAUK,MAAV,IAAoB,CAAxE,EAA2E;EACzE0I,MAAAA,IAAI,CAACjD,GAAL,CAAS,SAAT,EAAoB,kBAApB,EAAwCY,KAAxC;EACD;EACF,GAxBD;EAyBD,CA1BD;;EA2BA,eAAc,GAAGkgC,YAAjB;;ECpDA,IAAMC,IAAI,GAAG;EACXC,EAAAA,UAAU,EAAEt9B,aADD;EAEX,UAAMC,OAFK;EAGXq8B,EAAAA,IAAI,EAAEp8B,OAHK;EAIX0T,EAAAA,MAAM,EAAEzT,UAJG;EAKXgyB,EAAAA,aAAa,EAAE/xB,gBALJ;EAMXxB,EAAAA,QAAQ,EAAE+H;EANC,CAAb;;EASA,IAAM42B,SAAS,GAAG,SAAZA,SAAY,CAASz4B,GAAT,EAAcpC,KAAd,EAAqB;EACrC,MAAIxF,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB,CADqC;;EAIrCmgC,EAAAA,IAAI,CAACC,UAAL,CAAgB56B,KAAhB,EAAuBxF,KAAvB,EAJqC;;EAOrCmgC,EAAAA,IAAI,QAAJ,CAAUv4B,GAAV,EAPqC;;EAUrCu4B,EAAAA,IAAI,CAACf,IAAL,CAAU55B,KAAV,EAAiBxF,KAAjB,EAVqC;;EAarCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,QAAIA,CAAC,CAAC4jC,OAAF,OAAgB,KAApB,EAA2B;EACzB5jC,MAAAA,CAAC,CAACoE,GAAF,CAAM,MAAN,EAAc,eAAd,EAA+BwI,GAAG,CAAC5H,KAAnC;EACD;EACF,GAJD,EAbqC;;EAoBrCmgC,EAAAA,IAAI,CAAClL,aAAL,CAAmBzvB,KAAnB,EAA0BxF,KAA1B,EApBqC;;EAuBrCmgC,EAAAA,IAAI,CAACz+B,QAAL,CAAc8D,KAAd,EAAqBxF,KAArB,EAvBqC;;EA0BrCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBmlC,IAAAA,IAAI,CAACzpB,MAAL,CAAY1b,CAAZ,EAAe4M,GAAG,CAAC5H,KAAnB;EACD,GAFD;EAIA,SAAO4H,GAAP;EACD,CA/BD;;EAgCA,gBAAc,GAAGy4B,SAAjB;;ECzCA,IAAMC,WAAW,GAAG,MAApB;EAEA,IAAMtpB,YAAU,GAAG;EACjB,WAAS,CAAC,MAAD,EAAS,KAAT,CADQ;EAEjBupB,EAAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CAFW;EAGjB,WAAS,CAAC,KAAD,EAAQ,KAAR,CAHQ;EAIjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAJW;EAKjBC,EAAAA,MAAM,EAAE,CAAC,KAAD,EAAQ,KAAR,CALS;EAMjB,YAAU,CAAC,QAAD,EAAW,KAAX,CANO;EAOjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CAPW;EAQjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,KAAP,CARY;;EAAA,CAAnB;;EAaA,IAAMC,MAAM,GAAG,SAATA,MAAS,CAASv+B,IAAT,EAAeoG,MAAf,EAAuB;EACpC,MAAIjD,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,MAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,MAAIjB,MAAM,GAAGoE,KAAK,CAAC0D,KAAN,CAAY,CAAZ,EAAevK,KAAf,CAAb,CAHoC;;EAKpC,MAAIkiC,IAAI,GAAGz/B,MAAM,CAACsH,IAAP,CAAY,UAAA1N,CAAC,EAAI;EAC1B,WAAOA,CAAC,CAACqE,IAAF,CAAOkR,IAAd;EACD,GAFU,CAAX;;EAGA,MAAIswB,IAAI,IAAIA,IAAI,CAACxhC,IAAL,CAAUc,MAAtB,EAA8B;EAC5B,WAAO,CAAC,KAAD,EAAQ,KAAR,CAAP;EACD;;EACD,SAAO,CAAC,IAAD,EAAO,KAAP,CAAP;EACD,CAZD;;EAcA,IAAM2gC,aAAa,GAAG,SAAhBA,aAAgB,CAASz+B,IAAT,EAAeoG,MAAf,EAAuB;;EAE3C,MAAIuO,YAAU,CAAC/X,cAAX,CAA0BoD,IAAI,CAACjG,KAA/B,MAA0C,IAA9C,EAAoD;EAClD,WAAO4a,YAAU,CAAC3U,IAAI,CAACjG,KAAN,CAAjB;EACD,GAJ0C;;;EAM3C,MAAIiG,IAAI,CAACjG,KAAL,gBAA0BiG,IAAI,CAACjG,KAAL,KAAe,MAA7C,EAAqD;EACnD,WAAOwkC,MAAM,CAACv+B,IAAD,EAAOoG,MAAP,CAAb;EACD,GAR0C;;;EAU3C,MAAI63B,WAAW,CAACpkC,IAAZ,CAAiBmG,IAAI,CAACjG,KAAtB,MAAiC,IAArC,EAA2C;EACzC,QAAIgM,IAAI,GAAG/F,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB8jC,WAAnB,EAAgC,EAAhC,CAAX;EACA,WAAO,CAACl4B,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAfD;;EAgBA,eAAc,GAAG04B,aAAjB;;EC7CA,IAAMlO,WAAW,GAAG,yGAApB;;EAGA,IAAMmO,IAAI,GAAG;EACXC,EAAAA,EAAE,EAAE,MADO;EAEXC,EAAAA,EAAE,EAAE,MAFO;EAGXC,EAAAA,EAAE,EAAE,KAHO;EAIXzmC,EAAAA,CAAC,EAAE,IAJQ;EAKX,SAAO;EALI,CAAb;;EAQA,IAAM0mC,eAAe,GAAG,SAAlBA,eAAkB,CAAS9+B,IAAT,EAAe;EACrC,MAAI6wB,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB8rB,WAAhB,CAAZ;;EACA,MAAIM,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,IAAP;EACD;;EACD,MAAI6N,IAAI,CAAC9hC,cAAL,CAAoBi0B,KAAK,CAAC,CAAD,CAAzB,CAAJ,EAAmC;EACjC,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW6N,IAAI,CAAC7N,KAAK,CAAC,CAAD,CAAN,CAAf,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAGiO,eAAjB;;ECrBA,IAAMnqB,YAAU,GAAG;EACjBoqB,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,IAAT,CADU;EAEjBC,EAAAA,KAAK,EAAE,CAAC,OAAD,EAAU,IAAV,CAFU;EAGjBC,EAAAA,EAAE,EAAE,CAAC,GAAD,EAAM,IAAN,CAHa;EAIjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,KAAN,CAJW;EAKjBC,EAAAA,GAAG,EAAE,CAAC,GAAD,EAAM,MAAN,CALY;EAMjBC,EAAAA,IAAI,EAAE,CAAC,GAAD,EAAM,MAAN,CANW;EAQjB,aAAW,CAAC,OAAD,EAAU,KAAV,CARM;EASjBC,EAAAA,MAAM,EAAE,CAAC,OAAD,EAAU,KAAV,CATS;EAUjB,YAAU,CAAC,MAAD,EAAS,KAAT,CAVO;EAWjBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAXU;;;EAcjBC,EAAAA,IAAI,EAAE,CAAC,KAAD,EAAQ,KAAR,CAdW;EAejBC,EAAAA,KAAK,EAAE,CAAC,MAAD,EAAS,KAAT,CAfU;;;EAmBjBC,EAAAA,KAAK,EAAE,CAAC,IAAD,EAAO,KAAP,EAAc,MAAd,CAnBU;EAoBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,OAAP,EAAgB,MAAhB,CApBY;EAqBjBC,EAAAA,GAAG,EAAE,CAAC,KAAD,EAAQ,IAAR,EAAc,IAAd,CArBY;EAsBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,MAAP,EAAe,MAAf,CAtBY;EAuBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,QAAb,CAvBY;EAwBjBC,EAAAA,GAAG,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,SAAb,CAxBY;EAyBjBC,EAAAA,GAAG,EAAE,CAAC,OAAD,EAAU,GAAV,EAAe,SAAf,CAzBY;EA0BjBC,EAAAA,EAAE,EAAE,CAAC,OAAD,EAAU,KAAV,CA1Ba;EA2BjBC,EAAAA,IAAI,EAAE,CAAC,IAAD,EAAO,KAAP,CA3BW;EA4BjB,OAAK,CAAC,IAAD;EA5BY,CAAnB;;EAgCA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAASlgC,IAAT,EAAe;;EAErC,MAAI2U,YAAU,CAAC/X,cAAX,CAA0BoD,IAAI,CAACjG,KAA/B,CAAJ,EAA2C;EACzC,WAAO4a,YAAU,CAAC3U,IAAI,CAACjG,KAAN,CAAjB;EACD;;EACD,SAAO,IAAP;EACD,CAND;;EAOA,iBAAc,GAAGmmC,eAAjB;;ECvCA,IAAMC,cAAc,GAAG,8FAAvB;EAEA,IAAMC,SAAS,GAAG;EAChBC,EAAAA,IAAI,EAAE,IADU;EAEhBzF,EAAAA,KAAK,EAAE;EAFS,CAAlB;;EAIA,IAAM0F,YAAY,GAAG,SAAfA,YAAe,CAACtgC,IAAD,EAAOoD,IAAP,EAAgB;;EAEnC,MAAIpD,IAAI,CAAChD,IAAL,CAAU8C,UAAd,EAA0B;EACxB,WAAO,IAAP;EACD,GAJkC;;;EAMnC,MAAIE,IAAI,CAAChD,IAAL,CAAUqS,OAAV,IAAqBrP,IAAI,CAAChD,IAAL,CAAUqU,YAAnC,EAAiD;EAC/C,WAAO,KAAP;EACD;;EACD,MAAI+uB,SAAS,CAACxjC,cAAV,CAAyBoD,IAAI,CAACjG,KAA9B,CAAJ,EAA0C;EACxC,WAAO,KAAP;EACD,GAXkC;;;EAanC,MAAI0iC,QAAQ,GAAGr5B,IAAI,CAACC,GAAL,CAASrD,IAAI,CAAC8C,IAAd,CAAf;;EACA,MAAI,CAAC25B,QAAL,EAAe;EACb,WAAO,IAAP;EACD,GAhBkC;;;EAkBnC,MAAIA,QAAQ,CAACz/B,IAAT,CAAcgB,IAAlB,EAAwB;;EAEtB,QAAIy+B,QAAQ,CAACz/B,IAAT,CAAckB,UAAlB,EAA8B;EAC5B,aAAO,IAAP;EACD,KAJqB;;;EAMtB,QAAIu+B,QAAQ,CAACz/B,IAAT,CAAcsB,YAAlB,EAAgC;EAC9B,aAAO,IAAP;EACD;;EACD,WAAO,KAAP;EACD,GA5BkC;;;EA+BnC,MAAIm+B,QAAQ,CAACz/B,IAAT,CAAckR,IAAlB,EAAwB;EACtB,WAAO,IAAP;EACD,GAjCkC;;;EAmCnC,MAAIqyB,OAAO,GAAGn9B,IAAI,CAACC,GAAL,CAASo5B,QAAQ,CAAC35B,IAAlB,CAAd;;EACA,MAAIy9B,OAAO,IAAIA,OAAO,CAACvjC,IAAR,CAAakR,IAAxB,IAAgC,CAACqyB,OAAO,CAACvjC,IAAR,CAAaqS,OAAlD,EAA2D;EACzD,WAAO,IAAP;EACD,GAtCkC;;;EAwCnC,MAAIotB,QAAQ,CAACz/B,IAAT,CAAcwT,SAAd,IAA2BisB,QAAQ,CAACz/B,IAAT,CAAc6T,MAAzC,IAAmD4rB,QAAQ,CAACz/B,IAAT,CAAcgB,IAArE,EAA2E;EACzE,WAAO,KAAP;EACD;;EACD,SAAO,KAAP;EACD,CA5CD;;EA8CA,IAAMwiC,KAAK,GAAG,SAARA,KAAQ,CAACxgC,IAAD,EAAOoG,MAAP,EAAkB;EAC9B,MAAIjD,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,MAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,MAAIlF,KAAK,GAAGqI,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAH8B;;EAK9B,SAAOxB,KAAK,CAACuL,IAAN,CAAW,UAAA1N,CAAC,EAAI;EACrB,WAAOA,CAAC,CAACqE,IAAF,CAAOoB,SAAd;EACD,GAFM,CAAP;EAGD,CARD;;EAUA,IAAMqiC,eAAe,GAAG,SAAlBA,eAAkB,CAASzgC,IAAT,EAAeoG,MAAf,EAAuBzI,KAAvB,EAA8B;;EAEpD,MAAI9C,KAAK,GAAGmF,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB07B,cAAhB,CAAZ;;EACA,MAAItlC,KAAK,KAAK,IAAd,EAAoB;;EAElB,QAAIylC,YAAY,CAACtgC,IAAD,EAAOoG,MAAM,CAAChD,IAAd,CAAZ,KAAoC,IAAxC,EAA8C;EAC5CpD,MAAAA,IAAI,CAACjD,GAAL,CAAS,aAAT,EAAwB,cAAxB,EAAwCY,KAAxC;EACA,aAAO,IAAP;EACD,KALiB;;;EAOlB,QAAI9C,KAAK,KAAK,IAAd,EAAoB;EAClB,UAAI2lC,KAAK,CAACxgC,IAAD,EAAOoG,MAAP,CAAT,EAAyB;EACvB,eAAO,CAACvL,KAAK,CAAC,CAAD,CAAN,EAAW,KAAX,CAAP;EACD;;EACD,aAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,CAAP;EACD;EACF;;EACD,SAAO,IAAP;EACD,CAlBD;;EAmBA,iBAAc,GAAG4lC,eAAjB;;ECjFA,IAAMC,UAAU,GAAG,uBAAnB;EAEA,IAAMC,MAAM,GAAG;EACbC,EAAAA,GAAG,EAAE,IADQ;EAEbC,EAAAA,IAAI,EAAE;EAFO,CAAf;EAKA;;EACA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAAS9gC,IAAT,EAAeoG,MAAf,EAAuB;EAC1C,MAAIs6B,UAAU,CAAC7mC,IAAX,CAAgBmG,IAAI,CAACjG,KAArB,CAAJ,EAAiC;EAC/B,QAAI+C,IAAI,GAAGkD,IAAI,CAACjG,KAAL,CAAWI,OAAX,CAAmB,KAAnB,EAA0B,EAA1B,CAAX,CAD+B;;EAG/B,QAAIgJ,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACA,QAAI7G,KAAK,GAAG6G,KAAK,CAACvH,OAAN,CAAcoE,IAAd,CAAZ;EACA,QAAIlF,KAAK,GAAGqI,KAAK,CAAC0D,KAAN,CAAYvK,KAAK,GAAG,CAApB,EAAuBA,KAAK,GAAG,CAA/B,CAAZ,CAL+B;;EAO/B,SAAK,IAAIpF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4D,KAAK,CAACxD,MAA1B,EAAkCJ,CAAC,EAAnC,EAAuC;EACrC,UAAIyB,CAAC,GAAGmC,KAAK,CAAC5D,CAAD,CAAb;;EACA,UAAIyB,CAAC,CAACqE,IAAF,CAAOgB,IAAX,EAAiB;EACf,YAAIrF,CAAC,CAACqE,IAAF,CAAOoB,SAAX,EAAsB;EACpB,iBAAO,CAACtB,IAAD,EAAO,KAAP,CAAP;EACD,SAHc;;;EAKf,YAAI6jC,MAAM,CAAC7jC,IAAD,CAAN,KAAiB,IAArB,EAA2B;EACzB,iBAAO,CAACA,IAAD,EAAO,KAAP,CAAP;EACD;;EACD,eAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;EACF,KAnB8B;;;EAqB/B,WAAO,CAACA,IAAD,EAAO,OAAP,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CAzBD;;EA0BA,mBAAc,GAAGgkC,YAAjB;;EClCA,IAAMC,OAAO,GAAG,0BAAhB;;EAGA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAAShhC,IAAT,EAAe;EAChC,MAAIA,IAAI,CAAChD,IAAL,CAAUyU,WAAV,KAA0B,IAA9B,EAAoC;EAClC,WAAO,IAAP;EACD;;EACD,MAAIof,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgBs8B,OAAhB,CAAZ;;EACA,MAAIlQ,KAAK,KAAK,IAAd,EAAoB;EAClB,WAAO,CAACA,KAAK,CAAC,CAAD,CAAN,EAAW,IAAX,EAAiBA,KAAK,CAAC,CAAD,CAAtB,CAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAUA,aAAc,GAAGmQ,UAAjB;;ECbA,IAAMzQ,aAAW,GAAG,kHAApB;EAEA;;EAEA,IAAM0Q,MAAM,GAAG;EACb9oC,EAAAA,CAAC,EAAE,IADU;;EAEbT,EAAAA,CAAC,EAAE,IAFU;;EAGbC,EAAAA,CAAC,EAAE,IAHU;;EAIbM,EAAAA,CAAC,EAAE,IAJU;;EAKbG,EAAAA,CAAC,EAAE,IALU;;EAMbC,EAAAA,CAAC,EAAE,IANU;;EAOb6oC,EAAAA,EAAE,EAAE,KAPS;;EAQbxoC,EAAAA,CAAC,EAAE,IARU;;EASbC,EAAAA,CAAC,EAAE,IATU;;EAAA,CAAf;;EAYA,IAAMwoC,WAAW,GAAG,SAAdA,WAAc,CAASnhC,IAAT,EAAe;EACjC,MAAI6wB,KAAK,GAAG7wB,IAAI,CAAC/I,IAAL,CAAUwN,KAAV,CAAgB8rB,aAAhB,CAAZ;;EACA,MAAIM,KAAK,KAAK,IAAV,IAAkBoQ,MAAM,CAACrkC,cAAP,CAAsBi0B,KAAK,CAAC,CAAD,CAA3B,MAAoC,KAA1D,EAAiE;EAC/D,WAAO,IAAP;EACD;;EACD,MAAItvB,GAAG,GAAG,CAAC0/B,MAAM,CAACpQ,KAAK,CAAC,CAAD,CAAN,CAAP,EAAmBA,KAAK,CAAC,CAAD,CAAxB,CAAV;;EACA,MAAItvB,GAAG,CAAC,CAAD,CAAH,IAAUA,GAAG,CAAC,CAAD,CAAjB,EAAsB;EACpB,WAAOA,GAAP;EACD;;EACD,SAAO,IAAP;EACD,CAVD;;EAWA,aAAc,GAAG4/B,WAAjB;;EClBA,IAAMC,QAAQ,GAAG,UAAjB;;EAEA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASxmC,KAAT,EAAgB0K,GAAhB,EAAqB;;EAExC,MAAIa,MAAM,GAAGklB,YAAQ,CAACzwB,KAAK,CAACtB,IAAN,CAAW,GAAX,CAAD,EAAkBgM,GAAG,CAAC5H,KAAtB,EAA6B4H,GAAG,CAACnC,IAAJ,EAA7B,CAAR,CAAiD,CAAjD,CAAb,CAFwC;;EAIxC,MAAID,KAAK,GAAGiD,MAAM,CAACjD,KAAP,EAAZ;EACAmwB,EAAAA,UAAY,CAACnwB,KAAD,EAAQoC,GAAG,CAAC5H,KAAZ,CAAZ,CALwC;;EAOxCwF,EAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjBA,IAAAA,CAAC,CAACuD,QAAF,GAAavD,CAAC,CAAC1B,IAAf;EACA0B,IAAAA,CAAC,CAAC1B,IAAF,GAAS,EAAT;EACA0B,IAAAA,CAAC,CAACoB,KAAF,GAAU,EAAV,CAHiB;;EAKjBpB,IAAAA,CAAC,CAACgC,GAAF,GAAQ,EAAR;EACAhC,IAAAA,CAAC,CAACiC,IAAF,GAAS,EAAT,CANiB;;EAQjB,QAAIwmC,QAAQ,CAACvnC,IAAT,CAAclB,CAAC,CAACuD,QAAhB,CAAJ,EAA+B;EAC7BvD,MAAAA,CAAC,CAACqE,IAAF,CAAO0M,MAAP,GAAgB,IAAhB;EACA/Q,MAAAA,CAAC,CAACqE,IAAF,CAAOkT,QAAP,GAAkB,IAAlB;EACD;EACF,GAZD;EAaA,SAAO9J,MAAP;EACD,CArBD;;EAuBA,IAAM4pB,YAAY,GAAG,SAAfA,YAAe,CAASzqB,GAAT,EAAc;EACjC,MAAI5H,KAAK,GAAG4H,GAAG,CAAC5H,KAAhB;EACA4H,EAAAA,GAAG,CAACH,IAAJ,CAAS/L,OAAT,CAAiB,UAAAd,CAAC,EAAI;EACpB,QAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;;EACA,SAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,UAAI8I,IAAI,GAAGmD,KAAK,CAACjM,CAAD,CAAhB;EACA,UAAI2D,KAAK,GAAG4jC,WAAa,CAACz+B,IAAD,EAAOzH,CAAP,CAAzB;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAIikC,SAAe,CAAC9+B,IAAD,CAAhC;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAIqlC,aAAe,CAAClgC,IAAD,AAAA,CAAhC;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAI4lC,aAAe,CAACzgC,IAAD,EAAOzH,CAAP,EAAUoF,KAAV,CAAhC;EACA9C,MAAAA,KAAK,GAAGA,KAAK,IAAIimC,eAAY,CAAC9gC,IAAD,EAAOzH,CAAP,CAA7B;EACAsC,MAAAA,KAAK,GAAGA,KAAK,IAAImmC,SAAU,CAAChhC,IAAD,AAAA,CAA3B;EACAnF,MAAAA,KAAK,GAAGA,KAAK,IAAIsmC,SAAW,CAACnhC,IAAD,AAAA,CAA5B,CARwC;;EAUxC,UAAInF,KAAK,KAAK,IAAd,EAAoB;EAClB,YAAIyK,SAAS,GAAG+7B,YAAY,CAACxmC,KAAD,EAAQ0K,GAAR,CAA5B,CADkB;;EAGlB,YAAIhN,CAAC,CAACoyB,GAAF,CAAM,cAAN,MAA0B,IAA9B,EAAoC;EAClCplB,UAAAA,GAAG,CAAC9B,SAAJ,CAAc,CAAC6B,SAAD,CAAd,EAA2BvI,GAA3B,CAA+B,aAA/B;EACD,SALiB;;;EAOlB,YAAIukC,SAAS,GAAGh8B,SAAS,CAACnC,KAAV,CAAgB,CAAhB,CAAhB;EACAm+B,QAAAA,SAAS,CAACrqC,IAAV,GAAiB+I,IAAI,CAAC/I,IAAtB,CARkB;;EAUlB,YAAIwN,KAAK,GAAGlM,CAAC,CAACkL,SAAF,CAAYzD,IAAI,CAACzD,EAAjB,EAAqB,CAArB,EAAwBgJ,GAAG,CAACnC,IAAJ,EAAxB,CAAZ;EACAqB,QAAAA,KAAK,CAACtK,OAAN,CAAcmL,SAAd,EAAyBC,GAAzB,EAA8B,IAA9B;EACD;EACF;EACF,GA1BD;EA2BA,SAAOA,GAAP;EACD,CA9BD;;EA+BA,mBAAc,GAAGyqB,YAAjB;;ECjEA,IAAMuR,OAAO,GAAG,SAAVA,OAAU,CAASh8B,GAAT,EAAcrK,IAAd,EAAoB;EAClC,MAAIqG,GAAG,GAAGgE,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBrP,IAAjB,KAA0B,EAApC;EACAqG,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAzM,CAAC;EAAA,WAAIqO,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAJ;EAAA,GAAT,CAAN;EACA,SAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,CAJD;;EAKA,IAAMigC,MAAM,GAAG,SAATA,MAAS,CAASj8B,GAAT,EAAcxI,GAAd,EAAmB;EAChC,MAAIwE,GAAG,GAAGgE,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBD,GAAhB,KAAwB,EAAlC;EACAwE,EAAAA,GAAG,GAAGA,GAAG,CAACoC,GAAJ,CAAQ,UAAAzM,CAAC;EAAA,WAAIqO,GAAG,CAACH,IAAJ,CAASlO,CAAT,CAAJ;EAAA,GAAT,CAAN;EACA,SAAOqO,GAAG,CAAC9B,SAAJ,CAAclC,GAAd,CAAP;EACD,CAJD;;;EAOA,IAAMkgC,cAAc,GAAG,SAAjBA,cAAiB,CAASl8B,GAAT,EAAc;;EAEnC,MAAInN,CAAC,GAAGmpC,OAAO,CAACh8B,GAAD,EAAM,MAAN,CAAf;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,cAAR,EACGi9B,KADH,CACS,6DADT,EAEG3kC,GAFH,CAEO,QAFP,EAEiB,aAFjB,EAHmC;;EAQnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,WAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,yBAAR,EACGi9B,KADH,CACS,6BADT,EAEGv+B,KAFH,CAES,CAFT,EAGGpG,GAHH,CAGO,MAHP,EAGe,WAHf,EATmC;;EAenC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,WAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,CAAQ,+BAAR,EACGk9B,IADH,CACQ,cADR,EAEGA,IAFH,CAEQ,UAFR,EAGGr9B,QAHH,GAIGvH,GAJH,CAIO,WAJP,EAIoB,gBAJpB,EAhBmC;;EAuBnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,OAAN,CAAV;EACAnN,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,sBAAR,CAAJ;;EACA,MAAIrM,CAAC,CAACyC,KAAN,EAAa;EACX,QAAIzC,CAAC,CAACuyB,GAAF,CAAM,SAAN,MAAqB,IAAzB,EAA+B;EAC7BvyB,MAAAA,CAAC,CAAC+K,KAAF,CAAQ,CAAR,EAAWpG,GAAX,CAAe,UAAf,EAA2B,kBAA3B;EACD,KAFD,MAEO;EACL3E,MAAAA,CAAC,CAAC+K,KAAF,CAAQ,CAAR,EAAWpG,GAAX,CAAe,QAAf,EAAyB,oBAAzB;EACD;EACF,GA/BkC;;;EAkCnCwI,EAAAA,GAAG,CAACd,KAAJ,CAAU,iBAAV,EAA6B1H,GAA7B,CAAiC,YAAjC,EAA+C,OAA/C,EAlCmC;;EAqCnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,QAAN,CAAV;EACAnN,EAAAA,CAAC,CAACqM,KAAF,sCACGimB,GADH,CACO,QADP,EAEG3tB,GAFH,CAEO,WAFP,EAEoB,YAFpB,EAtCmC;;EA2CnCwI,EAAAA,GAAG,CACAd,KADH,CACS,oCADT,EAEGk9B,IAFH,CAEQ,uCAFR,EAGGr9B,QAHH,GAIGvH,GAJH,CAIO,OAJP,EAIgB,SAJhB,EA3CmC;;;EAmDnC3E,EAAAA,CAAC,GAAGopC,MAAM,CAACj8B,GAAD,EAAM,YAAN,CAAV;EACAnN,EAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,2BAAR,EAAqC,CAArC,CAAJ;;EACA,MAAI,CAACrM,CAAC,CAACyyB,UAAF,CAAa,2BAAb,EAA0ChwB,KAA/C,EAAsD;EACpDzC,IAAAA,CAAC,CAAC2E,GAAF,CAAM,MAAN,EAAc,WAAd;EACD;;EAED,SAAOwI,GAAP;EACD,CA1DD;;EA4DA,WAAc,GAAGk8B,cAAjB;;ECxEA,IAAMt8B,QAAM,GAAG,SAATA,MAAS,CAAS5D,GAAT,EAAc;EAC3B,MAAIqB,GAAG,GAAG,EAAV;;EACA,OAAK,IAAI1L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,CAAC,EAAjC,EAAqC;EACnC0L,IAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,GAAc,IAAd;EACD;;EACD,SAAOiC,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAP;EACD,CAND;;EAOA,WAAc,GAAGuC,QAAjB;;ECPA;EACA,IAAMC,IAAI,GAAG;EAEX;EAAEX,EAAAA,KAAK,EAAE,UAAT;EAAqB1H,EAAAA,GAAG,EAAE,kBAA1B;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CAFW;EAIX;EAAEqD,EAAAA,KAAK,EAAE,KAAT;EAAgB1H,EAAAA,GAAG,EAAE,gBAArB;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAJW;EAMX;EACEqD,EAAAA,KAAK,EAAE,oDADT;EAEE1H,EAAAA,GAAG,EAAE,4BAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CANW;EAaX;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,UAA3D;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAbW;EAeX;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,UAA5C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAfW;EAkBX;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkC1H,EAAAA,GAAG,EAAE,YAAvC;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAlBW;EAoBX;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyB1H,EAAAA,GAAG,EAAE,OAA9B;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CApBW,EAqBX;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,SAA5C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CArBW;EAuBX;EAAEqD,EAAAA,KAAK,EAAE,WAAT;EAAsByD,EAAAA,KAAK,EAAE,CAA7B;EAAgCnL,EAAAA,GAAG,EAAE,SAArC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAvBW;EA0BX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,YAA9C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CA1BW;EA4BX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,YAA9C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CA5BW,EA6BX;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuB1H,EAAAA,GAAG,EAAE,6BAA5B;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA7BW;;EAiCX;EAAEqD,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,aAA/D;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CAjCW;EAmCX;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+CyD,EAAAA,KAAK,EAAE,CAAtD;EAAyDnL,EAAAA,GAAG,EAAE,aAA9D;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCW,EAoCX;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,aAAvC;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CApCW;EAsCX;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,aAA9C;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CAtCW;EAwCX;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,aAA7C;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CAxCW;;EA4CX;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoCyD,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CA5CW;EA8CX;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,WAAxD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA9CW;;EAkDX;EAAEqD,EAAAA,KAAK,EAAE,MAAT;EAAiB1H,EAAAA,GAAG,EAAE,cAAtB;EAAsCqE,EAAAA,MAAM,EAAE;EAA9C,CAlDW,EAmDX;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,cAAzE;EAAyFqE,EAAAA,MAAM,EAAE;EAAjG,CAnDW;EAqDX;EAAEqD,EAAAA,KAAK,EAAE,QAAT;EAAmB1H,EAAAA,GAAG,EAAE,cAAxB;EAAwCqE,EAAAA,MAAM,EAAE;EAAhD,CArDW,EAsDX;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,cAAvD;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAtDW,EAuDX;EAAEqD,EAAAA,KAAK,EAAE,OAAT;EAAkB1H,EAAAA,GAAG,EAAE,cAAvB;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAvDW;EA0DX;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuByD,EAAAA,KAAK,EAAE,CAA9B;EAAiCnL,EAAAA,GAAG,EAAE,aAAtC;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA1DW;EA4DX;EACEqD,EAAAA,KAAK,EAAE,2EADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,aAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA5DW,EAkEX;EACEqD,EAAAA,KAAK,EAAE,yEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,aAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlEW,CAAb;EA0EA,WAAc,GAAGgE,IAAjB;;EC3EA;EACA,IAAMw8B,KAAK,GAAG,iCAAd;EAEA,IAAIx8B,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,SAApC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CAFS;;;EAMT;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,SAApC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CANS;EAQT;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,SAAvC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CARS;EAUT;EAAEqD,EAAAA,KAAK,EAAE,yCAAT;EAAoDyD,EAAAA,KAAK,EAAE,CAA3D;EAA8DnL,EAAAA,GAAG,EAAE,SAAnE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CAVS;EAYT;EAAEqD,EAAAA,KAAK,4DAAP;EAAqEyD,EAAAA,KAAK,EAAE,CAA5E;EAA+EnL,EAAAA,GAAG,EAAE,SAApF;EAA+FqE,EAAAA,MAAM,EAAE;EAAvG,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,SAAvC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAdS;;EAkBT;EAAEqD,EAAAA,KAAK,8BAAP;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,OAAtD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAlBS;EAoBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CApBS,EAqBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CArBS,EAsBT;EAAEqD,EAAAA,KAAK,sBAAP;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAtBS;EAwBT;EAAEqD,EAAAA,KAAK,6BAAP;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,OAArD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAxBS;EA0BT;EAAEqD,EAAAA,KAAK,4BAAP;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,OAApD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CA1BS;EA4BT;EAAEqD,EAAAA,KAAK,0BAAP;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,OAAlD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA5BS;EA8BT;EAAEqD,EAAAA,KAAK,0BAAP;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,OAAlD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CA9BS;EAgCT;EAAEqD,EAAAA,KAAK,yBAAP;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAhCS;EAkCT;EAAEqD,EAAAA,KAAK,yBAAP;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CAlCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6B1H,EAAAA,GAAG,EAAE,MAAlC;EAA0CqE,EAAAA,MAAM,EAAE;EAAlD,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6B1H,EAAAA,GAAG,EAAE,MAAlC;EAA0CqE,EAAAA,MAAM,EAAE;EAAlD,CAvCS;EAyCT;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoC1H,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAzCS;EA2CT;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA3CS;EA6CT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,MAA1C;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CA7CS;EA+CT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,MAA1C;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CA/CS;EAiDT;EAAEqD,EAAAA,KAAK,EAAE,kCAAT;EAA6C1H,EAAAA,GAAG,EAAE,MAAlD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAjDS;EAoDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CApDS,EAqDT;EAAEqD,EAAAA,KAAK,oBAAam9B,KAAb,MAAP;EAA8B15B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CArDS,EAsDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAtDS,EAuDT;EAAEqD,EAAAA,KAAK,gBAASm9B,KAAT,MAAP;EAA0B15B,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAvDS,EAwDT;EAAEqD,EAAAA,KAAK,oBAAam9B,KAAb,MAAP;EAA8B15B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxDS,EAyDT;EAAEqD,EAAAA,KAAK,mBAAYm9B,KAAZ,MAAP;EAA6B15B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,MAA5C;EAAoDqE,EAAAA,MAAM,EAAE;EAA5D,CAzDS;EA2DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,YAAP;EAA4B7kC,EAAAA,GAAG,EAAE,MAAjC;EAAyCqE,EAAAA,MAAM,EAAE;EAAjD,CA3DS,EA4DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,WAAP;EAA2B7kC,EAAAA,GAAG,EAAE,MAAhC;EAAwCqE,EAAAA,MAAM,EAAE;EAAhD,CA5DS;EA8DT;EAAEqD,EAAAA,KAAK,YAAKm9B,KAAL,iBAAP;EAAiC7kC,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,YAAxD;EAAsE4pB,EAAAA,IAAI,EAAE;EAA5E,CA9DS;EAgET;EAAEvmB,EAAAA,KAAK,YAAKm9B,KAAL,wCAAP;EAAwD7kC,EAAAA,GAAG,EAAE,QAA7D;EAAuEqE,EAAAA,MAAM,EAAE;EAA/E,CAhES,CAAX;EAmEA,YAAc,GAAGgE,MAAjB;;ECtEA,WAAc,GAAG;;EAGf;EAAEX,EAAAA,KAAK,EAAE,8CAAT;EAAyDyD,EAAAA,KAAK,EAAE,CAAhE;EAAmEnL,EAAAA,GAAG,EAAE,QAAxE;EAAkFqE,EAAAA,MAAM,EAAE;EAA1F,CAHe;;EAOf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,UAA7C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAPe;EASf;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,UAAjD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CATe;EAWf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,UAAxD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CAXe;;EAcf;EAAEqD,EAAAA,KAAK,EAAE,iDAAT;EAA4D1H,EAAAA,GAAG,EAAE,YAAjE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAde;EAgBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuC1H,EAAAA,GAAG,EAAE,YAA5C;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAhBe;EAkBf;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,YAArC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAlBe;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CArBe;EAuBf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAvBe;EAyBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiCyD,EAAAA,KAAK,EAAE,CAAxC;EAA2CnL,EAAAA,GAAG,EAAE,MAAhD;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAzBe;EA2Bf;EAAEqD,EAAAA,KAAK,EAAE,YAAT;EAAuB1H,EAAAA,GAAG,EAAE,MAA5B;EAAoCqE,EAAAA,MAAM,EAAE;EAA5C,CA3Be,EA4Bf;EAAEqD,EAAAA,KAAK,EAAE,qDAAT;EAAgEyD,EAAAA,KAAK,EAAE,CAAvE;EAA0EnL,EAAAA,GAAG,EAAE,MAA/E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA5Be;EA6Bf;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,MAArC;EAA6CqE,EAAAA,MAAM,EAAE;EAArD,CA7Be;EA8Bf;EAAEqD,EAAAA,KAAK,EAAE,SAAT;EAAoByD,EAAAA,KAAK,EAAE,CAA3B;EAA8BnL,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA9Be;EAiCf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8CyD,EAAAA,KAAK,EAAE,CAArD;EAAwDnL,EAAAA,GAAG,EAAE,MAA7D;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CAjCe;EAmCf;EAAEqD,EAAAA,KAAK,EAAE,2CAAT;EAAsDyD,EAAAA,KAAK,EAAE,CAA7D;EAAgEnL,EAAAA,GAAG,EAAE,MAArE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCe;EAqCf;EAAEqD,EAAAA,KAAK,EAAE,mDAAT;EAA8DyD,EAAAA,KAAK,EAAE,CAArE;EAAwEnL,EAAAA,GAAG,EAAE,MAA7E;EAAqFqE,EAAAA,MAAM,EAAE;EAA7F,CArCe;EAuCf;EAAEqD,EAAAA,KAAK,EAAE,0DAAT;EAAqEyD,EAAAA,KAAK,EAAE,CAA5E;EAA+EnL,EAAAA,GAAG,EAAE,MAApF;EAA4FqE,EAAAA,MAAM,EAAE;EAApG,CAvCe;EAyCf;EAAEqD,EAAAA,KAAK,EAAE,8CAAT;EAAyDyD,EAAAA,KAAK,EAAE,CAAhE;EAAmEnL,EAAAA,GAAG,EAAE,MAAxE;EAAgFqE,EAAAA,MAAM,EAAE;EAAxF,CAzCe;EA2Cf;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,MAA3D;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA3Ce;EA6Cf;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CA7Ce;EA+Cf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8CyD,EAAAA,KAAK,EAAE,CAArD;EAAwDnL,EAAAA,GAAG,EAAE,MAA7D;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA/Ce;EAiDf;EAAEqD,EAAAA,KAAK,EAAE,wBAAT;EAAmCyD,EAAAA,KAAK,EAAE,CAA1C;EAA6CnL,EAAAA,GAAG,EAAE,MAAlD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CAjDe;EAmDf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,MAAxD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAnDe;EAqDf;EACEqD,EAAAA,KAAK,EAAE,iEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,MAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CArDe;EA6Df;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CA7De;EA+Df;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0CyD,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,MAAzD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CA/De;EAkEf;EACEqD,EAAAA,KAAK,EAAE,kGADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,MAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlEe;EAyEf;EAAEqD,EAAAA,KAAK,EAAE,6CAAT;EAAwDyD,EAAAA,KAAK,EAAE,CAA/D;EAAkEnL,EAAAA,GAAG,EAAE,MAAvE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAzEe,EA0Ef;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,MAAzE;EAAiFqE,EAAAA,MAAM,EAAE;EAAzF,CA1Ee,EA2Ef;EAAEqD,EAAAA,KAAK,EAAE,4CAAT;EAAuDyD,EAAAA,KAAK,EAAE,CAA9D;EAAiEnL,EAAAA,GAAG,EAAE,MAAtE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CA3Ee;EA8Ef;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwC1H,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA9Ee;EAgFf;EAAEqD,EAAAA,KAAK,EAAE,eAAT;EAA0ByD,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,MAAzC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CAhFe;EAkFf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyByD,EAAAA,KAAK,EAAE,CAAhC;EAAmCnL,EAAAA,GAAG,EAAE,MAAxC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAlFe;EAoFf;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4CyD,EAAAA,KAAK,EAAE,CAAnD;EAAsDnL,EAAAA,GAAG,EAAE,MAA3D;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CApFe;EAsFf;EAAEqD,EAAAA,KAAK,EAAE,iDAAT;EAA4D1H,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAtFe;EAwFf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,MAAtD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAxFe;EA0Ff;EAAEqD,EAAAA,KAAK,EAAE,SAAT;EAAoByD,EAAAA,KAAK,EAAE,CAA3B;EAA8BnL,EAAAA,GAAG,EAAE,MAAnC;EAA2CqE,EAAAA,MAAM,EAAE;EAAnD,CA1Fe;EA4Ff;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,MAAvD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CA5Fe;EA8Ff;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CA9Fe;EAgGf;EAAEqD,EAAAA,KAAK,EAAE,8BAAT;EAAyCyD,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,WAAxD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CAhGe;EAkGf;EAAEqD,EAAAA,KAAK,EAAE,gCAAT;EAA2CyD,EAAAA,KAAK,EAAE,CAAlD;EAAqDnL,EAAAA,GAAG,EAAE,MAA1D;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAlGe,CAAjB;;ECAA,IAAMqT,YAAU,GAAG,gCAAnB;EACA,IAAIrP,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,WAApD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CAFS;EAIT;EAAEqD,EAAAA,KAAK,qBAAcgQ,YAAd,MAAP;EAAoCvM,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAJS;EAMT;EAAEqD,EAAAA,KAAK,YAAKgQ,YAAL,aAAP;EAAkC1X,EAAAA,GAAG,EAAE,QAAvC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CANS;EAQT;EAAEqD,EAAAA,KAAK,YAAKgQ,YAAL,2BAAP;EAAgD1X,EAAAA,GAAG,EAAE,QAArD;EAA+DqE,EAAAA,MAAM,EAAE;EAAvE,CARS;EAUT;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoCyD,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,WAAnD;EAAgEqE,EAAAA,MAAM,EAAE;EAAxE,CAVS;EAYT;EAAEqD,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,WAA/D;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,WAArD;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAdS;EAgBT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,WAApD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CAhBS;EAkBT;EAAEqD,EAAAA,KAAK,EAAE,kBAAT;EAA6ByD,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,WAA5C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAlBS;EAoBT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,WAAtC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CApBS;EAsBT;EAAEqD,EAAAA,KAAK,EAAE,kDAAT;EAA6DyD,EAAAA,KAAK,EAAE,CAApE;EAAuEnL,EAAAA,GAAG,EAAE,WAA5E;EAAyFqE,EAAAA,MAAM,EAAE;EAAjG,CAtBS,CAAX;EAyBA,gBAAc,GAAGgE,MAAjB;;EC1BA,aAAc,GAAG;EAEf;EAAEX,EAAAA,KAAK,EAAE,oBAAT;EAA+ByD,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAFe;EAIf;EAAEqD,EAAAA,KAAK,EAAE,eAAT;EAA0ByD,EAAAA,KAAK,EAAE,CAAjC;EAAoCnL,EAAAA,GAAG,EAAE,QAAzC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAJe;EAMf;EAAEqD,EAAAA,KAAK,EAAE,iBAAT;EAA4ByD,EAAAA,KAAK,EAAE,CAAnC;EAAsCnL,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CANe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,aAAT;EAAwByD,EAAAA,KAAK,EAAE,CAA/B;EAAkCnL,EAAAA,GAAG,EAAE,QAAvC;EAAiDqE,EAAAA,MAAM,EAAE;EAAzD,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyByD,EAAAA,KAAK,EAAE,CAAhC;EAAmCnL,EAAAA,GAAG,EAAE,QAAxC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CAZe;EAcf;EAAEqD,EAAAA,KAAK,EAAE,+CAAT;EAA0DyD,EAAAA,KAAK,EAAE,CAAjE;EAAoEnL,EAAAA,GAAG,EAAE,QAAzE;EAAmFqE,EAAAA,MAAM,EAAE;EAA3F,CAde;EAgBf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,QAA7C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAhBe,CAAjB;;ECAA,YAAc,GAAG;;EAGf;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkC1H,EAAAA,GAAG,EAAE,aAAvC;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAHe;EAKf;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuC1H,EAAAA,GAAG,EAAE,aAA5C;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CALe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,UAApC;EAAgDqE,EAAAA,MAAM,EAAE;EAAxD,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,SAA1C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,OAAnC;EAA4CqE,EAAAA,MAAM,EAAE;EAApD,CAZe;;EAef;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgCyD,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,MAA/C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CAfe,EAgBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiCyD,EAAAA,KAAK,EAAE,CAAxC;EAA2CnL,EAAAA,GAAG,EAAE,MAAhD;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAhBe;EAmBf;EAAEqD,EAAAA,KAAK,EAAE,yBAAT;EAAoC1H,EAAAA,GAAG,EAAE,OAAzC;EAAkDqE,EAAAA,MAAM,EAAE;EAA1D,CAnBe;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,OAAtC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CArBe;EAuBf;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0C1H,EAAAA,GAAG,EAAE,OAA/C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAvBe;EAyBf;EAAEqD,EAAAA,KAAK,EAAE,cAAT;EAAyB1H,EAAAA,GAAG,EAAE,OAA9B;EAAuCqE,EAAAA,MAAM,EAAE;EAA/C,CAzBe;EA2Bf;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,OAAjE;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CA3Be,EA4Bf;EAAEqD,EAAAA,KAAK,EAAE,UAAT;EAAqB1H,EAAAA,GAAG,EAAE,OAA1B;EAAmCqE,EAAAA,MAAM,EAAE;EAA3C,CA5Be;EA+Bf;EACEqD,EAAAA,KAAK,uEADP;EAEE1H,EAAAA,GAAG,EAAE,OAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CA/Be;EAqCf;EACEqD,EAAAA,KAAK,EAAE,gEADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,OAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CArCe,CAAjB;;ECAA,IAAMyR,OAAK,GAAG,8CAAd;EAEA,IAAIzN,MAAI,GAAG;;EAGT;EAAEX,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,WAAjD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAHS;EAKT;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,cAAjD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CALS;;EAST;EAAEqD,EAAAA,KAAK,kDAAP;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CATS;EAWT;EAAEqD,EAAAA,KAAK,0CAAP;EAAmDyD,EAAAA,KAAK,EAAE,CAA1D;EAA6DnL,EAAAA,GAAG,EAAE,WAAlE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAXS;EAaT;EAAEqD,EAAAA,KAAK,wCAAP;EAAiDyD,EAAAA,KAAK,EAAE,CAAxD;EAA2DnL,EAAAA,GAAG,EAAE,WAAhE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAbS;EAeT;EACEqD,EAAAA,KAAK,2EADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAfS;EAsBT;EAAEqD,EAAAA,KAAK,mDAAP;EAA4DyD,EAAAA,KAAK,EAAE,CAAnE;EAAsEnL,EAAAA,GAAG,EAAE,WAA3E;EAAwFqE,EAAAA,MAAM,EAAE;EAAhG,CAtBS;EAwBT;EACEqD,EAAAA,KAAK,+DADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAxBS;EA+BT;EAAEqD,EAAAA,KAAK,kDAAP;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA/BS;EAiCT;EAAEqD,EAAAA,KAAK,0CAAP;EAAmDyD,EAAAA,KAAK,EAAE,CAA1D;EAA6DnL,EAAAA,GAAG,EAAE,WAAlE;EAA+EqE,EAAAA,MAAM,EAAE;EAAvF,CAjCS;EAmCT;EAAEqD,EAAAA,KAAK,wCAAP;EAAiDyD,EAAAA,KAAK,EAAE,CAAxD;EAA2DnL,EAAAA,GAAG,EAAE,WAAhE;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAnCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,gDAAT;EAA2DyD,EAAAA,KAAK,EAAE,CAAlE;EAAqEnL,EAAAA,GAAG,EAAE,WAA1E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,CAAC,WAAD,EAAc,MAAd,CAArD;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAvCS;EAyCT;EAAEqD,EAAAA,KAAK,mDAAP;EAA4DyD,EAAAA,KAAK,EAAE,CAAnE;EAAsEnL,EAAAA,GAAG,EAAE,WAA3E;EAAwFqE,EAAAA,MAAM,EAAE;EAAhG,CAzCS;EA2CT;EACEqD,EAAAA,KAAK,2EADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA3CS;EAkDT;EACEqD,EAAAA,KAAK,+DADP;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAlDS;;EA2DT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,aAApD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA3DS,EA4DT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,aAArD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CA5DS,EA6DT;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,aAAtD;EAAqEqE,EAAAA,MAAM,EAAE;EAA7E,CA7DS,EA8DT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsCyD,EAAAA,KAAK,EAAE,CAA7C;EAAgDnL,EAAAA,GAAG,EAAE,aAArD;EAAoEqE,EAAAA,MAAM,EAAE;EAA5E,CA9DS;EAgET;EAAEqD,EAAAA,KAAK,EAAE,6BAAT;EAAwCyD,EAAAA,KAAK,EAAE,CAA/C;EAAkDnL,EAAAA,GAAG,EAAE,UAAvD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CAhES;;EAoET;EAAEqD,EAAAA,KAAK,EAAE,0CAAT;EAAqDyD,EAAAA,KAAK,EAAE,CAA5D;EAA+DnL,EAAAA,GAAG,EAAE,QAApE;EAA8EqE,EAAAA,MAAM,EAAE;EAAtF,CApES;EAsET;EAAEqD,EAAAA,KAAK,EAAE,6CAAT;EAAwDyD,EAAAA,KAAK,EAAE,CAA/D;EAAkEnL,EAAAA,GAAG,EAAE,QAAvE;EAAiFqE,EAAAA,MAAM,EAAE;EAAzF,CAtES;;EA0ET;EAAEqD,EAAAA,KAAK,EAAE,kCAAT;EAA6CyD,EAAAA,KAAK,EAAE,CAApD;EAAuDnL,EAAAA,GAAG,EAAE,YAA5D;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CA1ES;EA4ET;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,YAA1C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CA5ES;EA8ET;EACEqD,EAAAA,KAAK,EAAE,sFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,YAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA9ES;EAsFT;EAAEqD,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,MAAjD;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAtFS;EAwFT;EAAEqD,EAAAA,KAAK,EAAE,mBAAT;EAA8ByD,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxFS;EA0FT;EAAEqD,EAAAA,KAAK,EAAE,qDAAT;EAAgEyD,EAAAA,KAAK,EAAE,CAAvE;EAA0EnL,EAAAA,GAAG,EAAE,MAA/E;EAAuFqE,EAAAA,MAAM,EAAE;EAA/F,CA1FS;EA6FT;EAAEqD,EAAAA,KAAK,EAAE,+BAAT;EAA0CyD,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,MAAzD;EAAiEqE,EAAAA,MAAM,EAAE;EAAzE,CA7FS;EAgGT;EAAEqD,EAAAA,KAAK,oBAAaoO,OAAb,MAAP;EAA8B3K,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,MAA7C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAhGS,EAiGT;EAAEqD,EAAAA,KAAK,qBAAcoO,OAAd,MAAP;EAA+B3K,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,MAA9C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAjGS;EAmGT;EAAEqD,EAAAA,KAAK,YAAKoO,OAAL,aAAP;EAA6B9V,EAAAA,GAAG,EAAE,QAAlC;EAA4CqE,EAAAA,MAAM,EAAE;EAApD,CAnGS;EAqGT;EAAEqD,EAAAA,KAAK,YAAKoO,OAAL,2BAAP;EAA2C9V,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CArGS;EAwGT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAxGS,EAyGT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAzGS,EA0GT;EAAEqD,EAAAA,KAAK,EAAE,uCAAT;EAAkDyD,EAAAA,KAAK,EAAE,CAAzD;EAA4DnL,EAAAA,GAAG,EAAE,MAAjE;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CA1GS,CAAX;EA6GA,YAAc,GAAGgE,MAAjB;;EC/GA,IAAMutB,MAAM,GAAG,iDAAf;EACA,IAAIvtB,MAAI,GAAG;;EAGT;EACEX,EAAAA,KAAK,EAAE,mEADT;EAGE1H,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAHS;EAUT;EACEqD,EAAAA,KAAK,EAAE,mFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAVS;EAiBT;EACEqD,EAAAA,KAAK,EAAE,sGADT;EAEE1H,EAAAA,GAAG,EAAE,QAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CAjBS;EAuBT;EACEqD,EAAAA,KAAK,EAAE,gFADT;EAEE1H,EAAAA,GAAG,EAAE,QAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CAvBS;EA8BT;EACEqD,EAAAA,KAAK,EAAE,wEADT;EAEE1H,EAAAA,GAAG,EAAE,SAFP;EAGEqE,EAAAA,MAAM,EAAE;EAHV,CA9BS;EAqCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CArCS,EAsCT;EAAEqD,EAAAA,KAAK,kBAAWkuB,MAAX,MAAP;EAA6BzqB,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAtCS,EAuCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAvCS,EAwCT;EAAEqD,EAAAA,KAAK,kBAAWkuB,MAAX,MAAP;EAA6BzqB,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAxCS,EAyCT;EAAEqD,EAAAA,KAAK,gBAASkuB,MAAT,MAAP;EAA2BzqB,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,OAA1C;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAzCS,EA0CT;EAAEqD,EAAAA,KAAK,oBAAakuB,MAAb,MAAP;EAA+BzqB,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CA1CS;EA4CT;EAAEqD,EAAAA,KAAK,aAAMkuB,MAAN,aAAP;EAA+BzqB,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,OAA9C;EAAuDqE,EAAAA,MAAM,EAAE;EAA/D,CA5CS,CAAX;EA8CA,YAAc,GAAGgE,MAAjB;;EC/CA,UAAc,GAAG;EAEf;EAAEX,EAAAA,KAAK,EAAE,mBAAT;EAA8B1H,EAAAA,GAAG,EAAE,cAAnC;EAAmDqE,EAAAA,MAAM,EAAE;EAA3D,CAFe;EAIf;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8C1H,EAAAA,GAAG,EAAE,cAAnD;EAAmEqE,EAAAA,MAAM,EAAE,cAA3E;EAA2F4pB,EAAAA,IAAI,EAAE;EAAjG,CAJe;EAMf;EAAEvmB,EAAAA,KAAK,EAAE,wBAAT;EAAmC1H,EAAAA,GAAG,EAAE,cAAxC;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CANe;EAQf;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,cAA3C;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CARe;EAUf;EAAEqD,EAAAA,KAAK,EAAE,yCAAT;EAAoD1H,EAAAA,GAAG,EAAE,cAAzD;EAAyEqE,EAAAA,MAAM,EAAE;EAAjF,CAVe;EAYf;EAAEqD,EAAAA,KAAK,EAAE,gBAAT;EAA2ByD,EAAAA,KAAK,EAAE,CAAlC;EAAqCnL,EAAAA,GAAG,EAAE,cAA1C;EAA0DqE,EAAAA,MAAM,EAAE,aAAlE;EAAiF4pB,EAAAA,IAAI,EAAE;EAAvF,CAZe;EAcf;EACEvmB,EAAAA,KAAK,EAAE,8DADT;EAGE1H,EAAAA,GAAG,EAAE,cAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAde;EAqBf;EAAEqD,EAAAA,KAAK,EAAE,gCAAT;EAA2C1H,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CArBe,CAAjB;;ECAA,IAAMwR,OAAK,GACT,qMADF;EAGA,IAAMivB,MAAM,GAAG,kCAAf;;EAEA,IAAIz8B,MAAI,GAAG;EAET;EAAEX,EAAAA,KAAK,EAAE,qCAAT;EAAgDyD,EAAAA,KAAK,EAAE,CAAvD;EAA0DnL,EAAAA,GAAG,EAAE,WAA/D;EAA4EqE,EAAAA,MAAM,EAAE;EAApF,CAFS,EAGT;EACEqD,EAAAA,KAAK,EAAE,oFADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAHS;;EAYT;EAAEqD,EAAAA,KAAK,EAAE,2CAAT;EAAsDyD,EAAAA,KAAK,EAAE,CAA7D;EAAgEnL,EAAAA,GAAG,EAAE,WAArE;EAAkFqE,EAAAA,MAAM,EAAE;EAA1F,CAZS;EAcT;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4C1H,EAAAA,GAAG,EAAE,YAAjD;EAA+DqE,EAAAA,MAAM,EAAE,gBAAvE;EAAyF4pB,EAAAA,IAAI,EAAE;EAA/F,CAdS,EAeT;EAAEvmB,EAAAA,KAAK,EAAE,gCAAT;EAA2C1H,EAAAA,GAAG,EAAE,UAAhD;EAA4DqE,EAAAA,MAAM,EAAE,gBAApE;EAAsF4pB,EAAAA,IAAI,EAAE;EAA5F,CAfS;EAiBT;EACEvmB,EAAAA,KAAK,EAAE,0GADT;EAEEyD,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,WAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAjBS;;EA0BT;EAAEqD,EAAAA,KAAK,EAAE,0CAAT;EAAqDyD,EAAAA,KAAK,EAAE,CAA5D;EAA+DnL,EAAAA,GAAG,EAAE,UAApE;EAAgFqE,EAAAA,MAAM,EAAE;EAAxF,CA1BS;EA6BT;EAAEqD,EAAAA,KAAK,EAAE,0BAAT;EAAqCyD,EAAAA,KAAK,EAAE,CAA5C;EAA+CnL,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CA7BS,EA8BT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,mBAAxD;EAA6E4pB,EAAAA,IAAI,EAAE;EAAnF,CA9BS;EA+BT;EAAEvmB,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,QAApC;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CA/BS;EAgCT;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+C1H,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAhCS;EAiCT;EAAEqD,EAAAA,KAAK,EAAE,4BAAT;EAAuCyD,EAAAA,KAAK,EAAE,CAA9C;EAAiDnL,EAAAA,GAAG,EAAE,CAAC,SAAD,EAAY,QAAZ,CAAtD;EAA6EqE,EAAAA,MAAM,EAAE;EAArF,CAjCS;;EAmCT;EAAEqD,EAAAA,KAAK,EAAE,oBAAT;EAA+B1H,EAAAA,GAAG,EAAE,QAApC;EAA8CqE,EAAAA,MAAM,EAAE;EAAtD,CAnCS;EAqCT;EAAEqD,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,QAArC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CArCS;EAuCT;EAAEqD,EAAAA,KAAK,EAAE,sBAAT;EAAiC1H,EAAAA,GAAG,EAAE,QAAtC;EAAgDqE,EAAAA,MAAM,EAAE,cAAxD;EAAwE4pB,EAAAA,IAAI,EAAE;EAA9E,CAvCS;EAyCT;EAAEvmB,EAAAA,KAAK,EAAE,0CAAT;EAAqD1H,EAAAA,GAAG,EAAE,QAA1D;EAAoEqE,EAAAA,MAAM,EAAE,cAA5E;EAA4F4pB,EAAAA,IAAI,EAAE;EAAlG,CAzCS;EA2CT;EAAEvmB,EAAAA,KAAK,EAAE,uBAAT;EAAkCyD,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,QAAjD;EAA2DqE,EAAAA,MAAM,EAAE,eAAnE;EAAoF4pB,EAAAA,IAAI,EAAE;EAA1F,CA3CS;EA6CT;EAAEvmB,EAAAA,KAAK,EAAE,0BAAT;EAAqC1H,EAAAA,GAAG,EAAE,QAA1C;EAAoDqE,EAAAA,MAAM,EAAE,WAA5D;EAAyE4pB,EAAAA,IAAI,EAAE;EAA/E,CA7CS;EA+CT;EAAEvmB,EAAAA,KAAK,EAAE,qBAAT;EAAgC1H,EAAAA,GAAG,EAAE,QAArC;EAA+CqE,EAAAA,MAAM,EAAE;EAAvD,CA/CS;EAiDT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAjDS;EAmDT;EAAEqD,EAAAA,KAAK,EAAE,iCAAT;EAA4C1H,EAAAA,GAAG,EAAE,QAAjD;EAA2DqE,EAAAA,MAAM,EAAE;EAAnE,CAnDS;EAqDT;EAAEqD,EAAAA,KAAK,EAAE,mCAAT;EAA8C1H,EAAAA,GAAG,EAAE,QAAnD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CArDS;EAuDT;EAAEqD,EAAAA,KAAK,EAAE,oCAAT;EAA+C1H,EAAAA,GAAG,EAAE,QAApD;EAA8DqE,EAAAA,MAAM,EAAE;EAAtE,CAvDS;EAyDT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAzDS;EA2DT;EACEqD,EAAAA,KAAK,EAAE,qEADT;EAGE1H,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CA3DS;EAkET;EAAEqD,EAAAA,KAAK,YAAKmO,OAAL,aAAP;EAA6B7V,EAAAA,GAAG,EAAE,QAAlC;EAA4CqE,EAAAA,MAAM,EAAE,WAApD;EAAiE4pB,EAAAA,IAAI,EAAE;EAAvE,CAlES;EAoET;EAAEvmB,EAAAA,KAAK,YAAKmO,OAAL,2BAAP;EAA2C7V,EAAAA,GAAG,EAAE,QAAhD;EAA0DqE,EAAAA,MAAM,EAAE,aAAlE;EAAiF4pB,EAAAA,IAAI,EAAE;EAAvF,CApES;EAsET;EACEvmB,EAAAA,KAAK,kEAA2Do9B,MAA3D,MADP;EAEE35B,EAAAA,KAAK,EAAE,CAFT;EAGEnL,EAAAA,GAAG,EAAE,QAHP;EAIEqE,EAAAA,MAAM,EAAE;EAJV,CAtES;EA6ET;EAAEqD,EAAAA,KAAK,yBAAkBo9B,MAAlB,MAAP;EAAoC35B,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,QAAnD;EAA6DqE,EAAAA,MAAM,EAAE;EAArE,CA7ES;EA+ET;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,wBAAP;EAA0C35B,EAAAA,KAAK,EAAE,CAAjD;EAAoDnL,EAAAA,GAAG,EAAE,QAAzD;EAAmEqE,EAAAA,MAAM,EAAE;EAA3E,CA/ES;EAiFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,uBAAP;EAAyC35B,EAAAA,KAAK,EAAE,CAAhD;EAAmDnL,EAAAA,GAAG,EAAE,QAAxD;EAAkEqE,EAAAA,MAAM,EAAE;EAA1E,CAjFS;EAmFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,aAAP;EAA+B35B,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CAnFS;EAqFT;EAAEqD,EAAAA,KAAK,oBAAao9B,MAAb,MAAP;EAA+B35B,EAAAA,KAAK,EAAE,CAAtC;EAAyCnL,EAAAA,GAAG,EAAE,QAA9C;EAAwDqE,EAAAA,MAAM,EAAE;EAAhE,CArFS;EAuFT;EAAEqD,EAAAA,KAAK,qBAAco9B,MAAd,MAAP;EAAgC35B,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,QAA/C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAvFS;EAyFT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,cAAP;EAAgC35B,EAAAA,KAAK,EAAE,CAAvC;EAA0CnL,EAAAA,GAAG,EAAE,QAA/C;EAAyDqE,EAAAA,MAAM,EAAE;EAAjE,CAzFS;EA2FT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,QAA5C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CA3FS;EA6FT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,QAA5C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CA7FS;EA+FT;EAAEqD,EAAAA,KAAK,iBAAUo9B,MAAV,MAAP;EAA4B35B,EAAAA,KAAK,EAAE,CAAnC;EAAsCnL,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CA/FS;EAiGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAjGS;;EAmGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CAnGS;EAqGT;EAAEqD,EAAAA,KAAK,kBAAWo9B,MAAX,MAAP;EAA6B35B,EAAAA,KAAK,EAAE,CAApC;EAAuCnL,EAAAA,GAAG,EAAE,OAA5C;EAAqDqE,EAAAA,MAAM,EAAE;EAA7D,CArGS;EAuGT;EAAEqD,EAAAA,KAAK,mBAAYo9B,MAAZ,MAAP;EAA8B35B,EAAAA,KAAK,EAAE,CAArC;EAAwCnL,EAAAA,GAAG,EAAE,OAA7C;EAAsDqE,EAAAA,MAAM,EAAE;EAA9D,CAvGS;EAyGT;EAAEqD,EAAAA,KAAK,aAAMo9B,MAAN,kBAAP;EAAoC35B,EAAAA,KAAK,EAAE,CAA3C;EAA8CnL,EAAAA,GAAG,EAAE,OAAnD;EAA4DqE,EAAAA,MAAM,EAAE;EAApE,CAzGS;EA2GT;EAAEqD,EAAAA,KAAK,uBAAgBo9B,MAAhB,MAAP;EAAkC35B,EAAAA,KAAK,EAAE,CAAzC;EAA4CnL,EAAAA,GAAG,EAAE,OAAjD;EAA0DqE,EAAAA,MAAM,EAAE;EAAlE,CA3GS;EA6GT;EAAEqD,EAAAA,KAAK,EAAE,sCAAT;EAAiD1H,EAAAA,GAAG,EAAE,QAAtD;EAAgEqE,EAAAA,MAAM,EAAE,iBAAxE;EAA2F4pB,EAAAA,IAAI,EAAE;EAAjG,CA7GS;EA+GT;EAAEvmB,EAAAA,KAAK,EAAE,qCAAT;EAAgD1H,EAAAA,GAAG,EAAE,QAArD;EAA+DqE,EAAAA,MAAM,EAAE,gBAAvE;EAAyF4pB,EAAAA,IAAI,EAAE;EAA/F,CA/GS;EAiHT;EAAEvmB,EAAAA,KAAK,EAAE,8BAAT;EAAyC1H,EAAAA,GAAG,EAAE,SAA9C;EAAyDqE,EAAAA,MAAM,EAAE,iBAAjE;EAAoF4pB,EAAAA,IAAI,EAAE;EAA1F,CAjHS;EAmHT;EAAEvmB,EAAAA,KAAK,EAAE,gDAAT;EAA2D1H,EAAAA,GAAG,EAAE,QAAhE;EAA0EqE,EAAAA,MAAM,EAAE;EAAlF,CAnHS;EAqHT;EAAEqD,EAAAA,KAAK,EAAE,2BAAT;EAAsC1H,EAAAA,GAAG,EAAE,QAA3C;EAAqDqE,EAAAA,MAAM,EAAE,aAA7D;EAA4E4pB,EAAAA,IAAI,EAAE;EAAlF,CArHS,CAAX;EAuHA,aAAc,GAAG5lB,MAAjB;;EC1HA,IAAI0D,OAAO,GAAG,EAAd;EACAA,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAelF,OAAf,CAAV;EACAqI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAejF,QAAf,CAAV;EACAoI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAehF,OAAf,CAAV;EACAmI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe/E,YAAf,CAAV;EACAkI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe9E,SAAf,CAAV;EACAiI,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeyB,QAAf,CAAV;EACA0B,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeyiB,QAAf,CAAV;EACAtf,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAe+rB,QAAf,CAAV;EACA5oB,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAegsB,MAAf,CAAV;EACA7oB,OAAO,GAAGA,OAAO,CAACnD,MAAR,CAAeisB,SAAf,CAAV;;EAGA,IAAMxH,eAAa,GAAG,SAAhBA,aAAgB,CAAS/tB,GAAT,EAAc;EAClC,MAAIguB,QAAQ,GAAG,EAAf;EACA,MAAIC,SAAS,GAAG,EAAhB;EACAjuB,EAAAA,GAAG,CAAChD,OAAJ,CAAY,UAAAuJ,GAAG,EAAI;EACjB,QAAIA,GAAG,CAAC0E,QAAJ,KAAiB,IAAjB,IAAyB1E,GAAG,CAACnF,QAAJ,KAAiB,IAA9C,EAAoD;EAClD;EACD;;EACD,QAAImF,GAAG,CAAC7F,GAAJ,KAAYJ,SAAhB,EAA2B;EACzB0tB,MAAAA,QAAQ,CAAC9mB,IAAT,CAAcX,GAAG,CAAC7F,GAAlB;EACD;;EACD,QAAI6F,GAAG,CAAC1H,IAAJ,KAAayB,SAAjB,EAA4B;EAC1B2tB,MAAAA,SAAS,CAAC/mB,IAAV,CAAeX,GAAG,CAAC1H,IAAnB;EACD;EACF,GAVD;EAWA,SAAO;EAAE8B,IAAAA,IAAI,EAAEmI,OAAM,CAACklB,QAAD,CAAd;EAA0B9f,IAAAA,KAAK,EAAEpF,OAAM,CAACmlB,SAAD;EAAvC,GAAP;EACD,CAfD;;EAiBA,IAAMwX,QAAQ,GAAG,SAAXA,QAAW,CAAS1pC,CAAT,EAAY;EAC3B,MAAIszB,IAAI,GAAG,EAAX;EACA,MAAIqW,KAAK,GAAG3pC,CAAC,CAACiE,GAAF,CAAMyH,MAAN,CAAa,UAAArL,CAAC;EAAA,WAAIA,CAAC,CAAC0E,KAAF,KAAYR,SAAhB;EAAA,GAAd,CAAZ;;EACA,MAAIolC,KAAK,CAACzqC,MAAN,KAAiB,CAArB,EAAwB;EACtB,QAAIJ,CAAC,GAAGkB,CAAC,CAACiE,GAAF,CAAMuK,SAAN,CAAgB,UAAAnO,CAAC;EAAA,aAAIA,CAAC,CAAC0E,KAAF,KAAYR,SAAhB;EAAA,KAAjB,CAAR;EACAxD,IAAAA,MAAM,CAACC,IAAP,CAAYhB,CAAC,CAACiE,GAAF,CAAMnF,CAAN,EAASiG,KAArB,EAA4B9D,OAA5B,CAAoC,UAAAP,CAAC,EAAI;EACvC,UAAIkpC,IAAI,GAAG7oC,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBpI,CAAlB,CAAX;EACA4pC,MAAAA,IAAI,CAAC3lC,GAAL,GAAW2lC,IAAI,CAAC3lC,GAAL,CAASwK,KAAT,CAAe,CAAf,CAAX;EACAm7B,MAAAA,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,IAAciC,MAAM,CAACqH,MAAP,CAAc,EAAd,EAAkBwhC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,CAAlB,CAAd;EACA8qC,MAAAA,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYgE,IAAZ,GAAmBpC,CAAnB;EACA,aAAOkpC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYmG,QAAnB;EACA,aAAO2kC,IAAI,CAAC3lC,GAAL,CAASnF,CAAT,EAAYiG,KAAnB;EACA6kC,MAAAA,IAAI,CAAC5gC,MAAL,IAAe,MAAMtI,CAArB;EACA4yB,MAAAA,IAAI,CAACnoB,IAAL,CAAUy+B,IAAV;EACD,KATD;EAUD;;EACD,SAAOtW,IAAP;EACD,CAjBD;;;EAoBA,IAAIxkB,GAAG,GAAG,EAAV;EACA4B,OAAO,CAACzP,OAAR,CAAgB,UAAAjB,CAAC,EAAI;EACnBA,EAAAA,CAAC,CAACiE,GAAF,GAAQmuB,QAAW,CAACpyB,CAAC,CAACqM,KAAH,CAAnB;EACA,MAAIw9B,UAAU,GAAGH,QAAQ,CAAC1pC,CAAD,CAAzB;;EACA,MAAI6pC,UAAU,CAAC3qC,MAAX,GAAoB,CAAxB,EAA2B;EACzB4P,IAAAA,GAAG,GAAGA,GAAG,CAACvB,MAAJ,CAAWs8B,UAAX,CAAN;EACD,GAFD,MAEO;EACL/6B,IAAAA,GAAG,CAAC3D,IAAJ,CAASnL,CAAT;EACD;EACF,CARD;EAUA8O,GAAG,CAAC7N,OAAJ,CAAY,UAAAjB,CAAC,EAAI;EACfA,EAAAA,CAAC,CAAC8pC,QAAF,GAAa9X,eAAa,CAAChyB,CAAC,CAACiE,GAAH,CAA1B;EACA,SAAOjE,CAAP;EACD,CAHD;EAKA,aAAc,GAAG8O,GAAjB;;EChEA,IAAMi7B,QAAQ,GAAG,SAAXA,QAAW,CAASC,OAAT,EAAkB;EACjC,MAAIA,OAAO,CAAC9qC,MAAR,KAAmB,CAAvB,EAA0B;EACxB,WAAO,EAAP;EACD;;EACD,MAAIsL,GAAG,GAAG,EAAV;EACAw/B,EAAAA,OAAO,CAAC/oC,OAAR,CAAgB,UAAAkI,GAAG,EAAI;EACrBA,IAAAA,GAAG,GAAG4D,OAAM,CAAC5D,GAAD,CAAZ;;EACA,SAAK,IAAIrK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqK,GAAG,CAACjK,MAAxB,EAAgCJ,CAAC,EAAjC,EAAqC;EACnC0L,MAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,GAAc0L,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,IAAe,CAA7B;EACA0L,MAAAA,GAAG,CAACrB,GAAG,CAACrK,CAAD,CAAJ,CAAH,IAAe,CAAf;EACD;EACF,GAND;EAOA,MAAI4P,GAAG,GAAG3N,MAAM,CAACC,IAAP,CAAYwJ,GAAZ,CAAV;EACAkE,EAAAA,GAAG,GAAGA,GAAG,CAAChD,MAAJ,CAAW,UAAA5L,CAAC;EAAA,WAAI0K,GAAG,CAAC1K,CAAD,CAAH,KAAWkqC,OAAO,CAAC9qC,MAAvB;EAAA,GAAZ,CAAN;EACAwP,EAAAA,GAAG,GAAGA,GAAG,CAACnD,GAAJ,CAAQ,UAAAmmB,GAAG;EAAA,WAAIpgB,MAAM,CAACogB,GAAD,CAAV;EAAA,GAAX,CAAN;EACA,SAAOhjB,GAAP;EACD,CAhBD;;EAkBA,IAAMu7B,MAAM,GAAG,SAATA,MAAS,CAAS98B,GAAT,EAAc;;EAE3BuD,EAAAA,SAAO,CAACzP,OAAR,CAAgB,UAAAjB,CAAC,EAAI;EACnB,QAAIkqC,UAAU,GAAG,EAAjB;EACAlqC,IAAAA,CAAC,CAAC8pC,QAAF,CAAW33B,KAAX,CAAiBlR,OAAjB,CAAyB,UAAAP,CAAC,EAAI;EAC5BwpC,MAAAA,UAAU,CAAC/+B,IAAX,CAAgBgC,GAAG,CAACglB,MAAJ,CAAWhgB,KAAX,CAAiBzR,CAAjB,KAAuB,EAAvC;EACD,KAFD;EAGAV,IAAAA,CAAC,CAAC8pC,QAAF,CAAWllC,IAAX,CAAgB3D,OAAhB,CAAwB,UAAA0D,GAAG,EAAI;EAC7BulC,MAAAA,UAAU,CAAC/+B,IAAX,CAAgBgC,GAAG,CAACglB,MAAJ,CAAWvtB,IAAX,CAAgBD,GAAhB,KAAwB,EAAxC;EACD,KAFD;EAIA,QAAIwlC,OAAO,GAAGJ,QAAQ,CAACG,UAAD,CAAtB;;EACA,QAAIC,OAAO,CAACjrC,MAAR,KAAmB,CAAvB,EAA0B;EACxB;EACD;;EAED,QAAIyW,OAAO,GAAGw0B,OAAO,CAAC5+B,GAAR,CAAY,UAAArH,KAAK;EAAA,aAAIiJ,GAAG,CAACH,IAAJ,CAAS9I,KAAT,CAAJ;EAAA,KAAjB,CAAd;EACA,QAAIkmC,MAAM,GAAGj9B,GAAG,CAAC9B,SAAJ,CAAcsK,OAAd,CAAb,CAfmB;;EAiBnB,QAAItJ,KAAK,GAAG+9B,MAAM,CAAC/9B,KAAP,CAAarM,CAAC,CAACiE,GAAf,EAAoBjE,CAAC,CAAC8P,KAAtB,CAAZ;;EACA,QAAIzD,KAAK,CAAC5J,KAAV,EAAiB;EACf,UAAIzC,CAAC,CAAC4yB,IAAF,KAAW,IAAf,EAAqB;EACnBvmB,QAAAA,KAAK,CAACkoB,OAAN,CAAcv0B,CAAC,CAAC2E,GAAhB,EAAqB3E,CAAC,CAACgJ,MAAvB;EACD,OAFD,MAEO;EACLqD,QAAAA,KAAK,CAAC1H,GAAN,CAAU3E,CAAC,CAAC2E,GAAZ,EAAiB3E,CAAC,CAACgJ,MAAnB;EACD;EACF;EACF,GAzBD;EA0BD,CA5BD;;EA6BA,YAAc,GAAGihC,MAAjB;;EC/CA;EAEA;;EACA,IAAMI,WAAW,GAAG,SAAdA,WAAc,CAASl9B,GAAT,EAAc;EAChC88B,EAAAA,QAAM,CAAC98B,GAAD,CAAN;EACAm9B,EAAAA,OAAO,CAACn9B,GAAD,CAAP;EACA,SAAOA,GAAP;EACD,CAJD;;EAKA,iBAAc,GAAGk9B,WAAjB;;ECPA;;EACA,IAAMhW,MAAM,GAAG,SAATA,MAAS,CAASlnB,GAAT,EAAc;EAC3B,MAAIpC,KAAK,GAAGoC,GAAG,CAACimB,QAAJ,EAAZ,CAD2B;;EAG3BjmB,EAAAA,GAAG,GAAGo9B,OAAI,CAACp9B,GAAD,EAAMpC,KAAN,CAAV,CAH2B;;EAK3BoC,EAAAA,GAAG,GAAGy4B,YAAS,CAACz4B,GAAD,EAAMpC,KAAN,CAAf,CAL2B;;EAO3BoC,EAAAA,GAAG,GAAGyqB,eAAY,CAACzqB,GAAD,CAAlB,CAP2B;;EAS3BA,EAAAA,GAAG,CAACrC,KAAJ,GAT2B;;EAW3BqC,EAAAA,GAAG,GAAGk9B,aAAW,CAACl9B,GAAD,CAAjB,CAX2B;;EAa3BA,EAAAA,GAAG,CAAC6mB,OAAJ,GAb2B;;EAe3B7mB,EAAAA,GAAG,CAAC5H,KAAJ,CAAUmrB,OAAV,CAAkBzvB,OAAlB,CAA0B,UAAAwvB,EAAE,EAAI;EAC9BA,IAAAA,EAAE,CAACtjB,GAAD,CAAF;EACD,GAFD;EAGA,SAAOA,GAAP;EACD,CAnBD;;EAoBA,aAAc,GAAGknB,MAAjB;;EC1BA,IAAMmW,SAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBC,aAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKtX,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAIA,CAAC,CAACqE,IAAF,CAAO2C,YAAP,KAAwB,IAAxB,IAAgChH,CAAC,CAACmK,IAAtC,EAA4C;EAC1CnK,YAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACD;;EACD,cAAInD,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAV;EACAxB,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SAND;EAOA,eAAO,IAAP;EACD;EAZ2B;EAAA;EAAA,mCAaf;EACX,aAAKw0B,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3BA,UAAAA,CAAC,CAACiC,IAAF,GAASjC,CAAC,CAACiC,IAAF,CAAOT,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAT;EACAxB,UAAAA,CAAC,CAACiC,IAAF,GAAS,MAAMjC,CAAC,CAACiC,IAAjB;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAnB2B;;EAAA;EAAA,IAEFioC,GAFE;;EAqB9BC,EAAAA,aAAa,CAACthC,SAAd,CAAwBivB,MAAxB,GAAiCqS,aAAa,CAACthC,SAAd,CAAwBuhC,YAAzD;;EAEAF,EAAAA,GAAG,CAACrhC,SAAJ,CAAc9B,aAAd,GAA8B,UAASrH,CAAT,EAAY;EACxC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,eAAX,CAAZ;;EACA,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIyqC,aAAJ,CAAkBr+B,KAAK,CAACW,IAAxB,EAA8B,IAA9B,EAAoC,KAAKzH,KAAzC,CAAP;EACD,GAND;;EAOA,SAAOklC,GAAP;EACD,CA/BD;;EAgCA,iBAAc,GAAGD,SAAjB;;EChCA,IAAMI,SAAS,GAAG,IAAlB;;EAEA,IAAMJ,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBI,QAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;EAAA,qCAGb;EACb,aAAKzX,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SAHD;EAIA,eAAO,IAAP;EACD;EAT2B;EAAA;EAAA,mCAUf;EACX,aAAKw0B,QAAL,GAAgBnyB,OAAhB,CAAwB,UAAAV,CAAC,EAAI;EAC3B,cAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAnD,UAAAA,GAAG,GAAGA,GAAG,CAACF,KAAJ,CAAU,EAAV,EAAcyC,IAAd,CAAmB,GAAnB,CAAN,CAF2B;;EAI3B,cAAIypC,SAAS,CAACnpC,IAAV,CAAelB,CAAC,CAACiC,IAAjB,MAA2B,KAA/B,EAAsC;EACpC5D,YAAAA,GAAG,IAAI,GAAP;EACD;;EACD2B,UAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAN;EACD,SARD;EASA,eAAO,IAAP;EACD;EArB2B;;EAAA;EAAA,IAEP6rC,GAFO;;EAuB9BI,EAAAA,QAAQ,CAACzhC,SAAT,CAAmBivB,MAAnB,GAA4BwS,QAAQ,CAACzhC,SAAT,CAAmBuhC,YAA/C;EACAE,EAAAA,QAAQ,CAACzhC,SAAT,CAAmB8uB,KAAnB,GAA2B2S,QAAQ,CAACzhC,SAAT,CAAmBuhC,YAA9C;;EAEAF,EAAAA,GAAG,CAACrhC,SAAJ,CAAcnC,QAAd,GAAyB,UAAShH,CAAT,EAAY;EACnC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,UAAX,CAAZ;;EACA,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAI4qC,QAAJ,CAAax+B,KAAK,CAACW,IAAnB,EAAyB,IAAzB,EAA+B,KAAKzH,KAApC,CAAP;EACD,GAND;;EAOA,SAAOklC,GAAP;EACD,CAlCD;;EAmCA,YAAc,GAAGD,WAAjB;;ECrCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcqxB,OAAd,GAAwB,UAASx6B,CAAT,EAAY;;EAElC,QAAI6qC,MAAM,GAAG,WAAQ,WAAR,EACVxB,KADU,CACJ,qBADI;EAAA,KAEVA,KAFU,CAEJ,2BAFI;EAAA,KAGVA,KAHU,CAGJ,+BAHI;EAAA,KAIVA,KAJU,CAIJ,4BAJI;EAAA,KAKVA,KALU,CAKJ,uBALI;EAAA,KAMVj9B,KANU,CAMJ,WANI,CAAb;EAOA,QAAI5J,KAAK,GAAG,KAAKi2B,UAAL,CAAgBoS,MAAhB,CAAZ;EAEA,QAAI1T,MAAM,GAAG30B,KAAK,CAAC80B,UAAN,EAAb;EACA90B,IAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcnB,MAAd,CAAR;EAEA,QAAIS,WAAW,GAAGp1B,KAAK,CAACo1B,WAAN,EAAlB;EACAp1B,IAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcV,WAAd,CAAR,CAfkC;;EAkBlC,QAAIkT,YAAY,GAAGtoC,KAAK,MAAL,CAAS,8DAAT,EAAyE4J,KAAzE,CAA+E,cAA/E,CAAnB;EACA5J,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkBoS,YAAlB,CAAR,CAnBkC;;EAsBlC,QAAIC,SAAS,GAAGvoC,KAAK,MAAL,CAAS,kBAAT,EAA6B4J,KAA7B,CAAmC,MAAnC,CAAhB;EACA5J,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkBqS,SAAlB,CAAR,CAvBkC;;EA0BlCvoC,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,cAAlB,CAAR;EACAl2B,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,WAAlB,CAAR;EACAl2B,IAAAA,KAAK,GAAGA,KAAK,CAACk2B,WAAN,CAAkB,kBAAlB,CAAR,CA5BkC;;EA+BlCl2B,IAAAA,KAAK,GAAGA,KAAK,CAACi2B,UAAN,CAAiB,eAAjB,CAAR;EACAj2B,IAAAA,KAAK,GAAGA,KAAK,CAACi2B,UAAN,CAAiB,UAAjB,CAAR,CAhCkC;;;;;;;;;;;;EA8ClC,QAAIuS,OAAO,GAAGxoC,KAAK,CAACiJ,MAAN,CAAa,UAAAnM,CAAC;EAAA,aAAIA,CAAC,CAAC+xB,SAAF,KAAgB,CAAhB,IAAqB/xB,CAAC,CAAC8M,KAAF,CAAQ,QAAR,EAAkBnN,MAAlB,IAA4B,CAArD;EAAA,KAAd,CAAd;;EACA,QAAI+rC,OAAO,CAACxoC,KAAZ,EAAmB;EACjB,UAAIzC,CAAC,GAAGirC,OAAO,CAACvS,UAAR,CAAmB,0BAAnB,CAAR;EACAj2B,MAAAA,KAAK,GAAGA,KAAK,CAAC81B,OAAN,CAAcv4B,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAd,CAAR;EACD;;EAED,QAAI,OAAOtxB,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIwqC,GAAJ,CAAQhoC,KAAK,CAACuK,IAAd,EAAoB,IAApB,EAA0B,KAAKzH,KAA/B,CAAP;EACD,GAxDD;;EAyDA,SAAOklC,GAAP;EACD,CA5DD;;EA6DA,WAAc,GAAGD,WAAjB;;EC7DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBS,YAFwB;EAAA;EAAA;EAAA;;EAG5B,0BAAYl+B,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,wFAAMyH,IAAN,EAAYkkB,IAAZ,EAAkB3rB,KAAlB;EACA,YAAK4lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,+BAQnB;EACP,aAAKn+B,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,cAAIqgC,WAAW,GAAGrgC,KAAK,CAAC,CAAD,CAAL,CAAS3H,WAAT,EAAlB;EAEA2H,UAAAA,KAAK,CAAC9J,OAAN,CAAc,UAACV,CAAD,EAAIzB,CAAJ,EAAU;;EAEtByB,YAAAA,CAAC,CAAC4N,GAAF,CAAM5N,CAAC,CAACuD,QAAF,IAAcvD,CAAC,CAAC1B,IAAtB;EACA0B,YAAAA,CAAC,CAACuD,QAAF,GAAaS,SAAb,CAHsB;;EAMtB,gBAAIzF,CAAC,GAAGiM,KAAK,CAAC7L,MAAN,GAAe,CAAnB,IAAwBqB,CAAC,CAACiC,IAAF,KAAW,EAAvC,EAA2C;EACzCjC,cAAAA,CAAC,CAACiC,IAAF,IAAU,GAAV;EACD;EACF,WATD,EALqB;;EAgBrB,cAAI4oC,WAAJ,EAAiB;EACfrgC,YAAAA,KAAK,CAAC,CAAD,CAAL,CAAS+tB,WAAT;EACD;EACF,SAnBD;EAoBA,eAAO,IAAP;EACD;EA9B2B;;EAAA;EAAA,IAEH2R,GAFG;;;;;;;;;;;EA2C9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcwuB,YAAd,GAA6B,UAAS33B,CAAT,EAAY;;EAEvC,QAAIwC,KAAK,GAAG,KAAK4J,KAAL,CAAW,kBAAX,CAAZ,CAFuC;;;EAIvC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIirC,YAAJ,CAAiBzoC,KAAK,CAACuK,IAAvB,EAA6B,IAA7B,EAAmC,KAAKzH,KAAxC,CAAP;EACD,GARD,CA3C8B;;;EAsD9BklC,EAAAA,GAAG,CAACrhC,SAAJ,CAAciiC,QAAd,GAAyBZ,GAAG,CAACrhC,SAAJ,CAAckiC,UAAvC;EACAb,EAAAA,GAAG,CAACrhC,SAAJ,CAAc+hC,UAAd,GAA2BV,GAAG,CAACrhC,SAAJ,CAAcmiC,YAAzC;EACA,SAAOd,GAAP;EACD,CAzDD;;EA0DA,gBAAc,GAAGD,WAAjB;;EC1DA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAE9B,MAAM1Z,KAAK,GAAG,SAARA,KAAQ,CAAS5jB,GAAT,EAAc;EAC1B,QAAI2tB,MAAM,GAAG3tB,GAAG,CACburB,UADU,CACC,WADD,EAEVH,OAFU,CAEF,eAFE,EAGVjG,GAHU,CAGN,eAHM,CAAb;EAIA,QAAIkZ,UAAU,GAAGr+B,GAAG,CAACd,KAAJ,CAAU,cAAV,EAA0B,CAA1B,CAAjB;EACA,WAAO;EACLyuB,MAAAA,MAAM,EAAEA,MADH;EAEL2Q,MAAAA,WAAW,EAAEt+B,GAAG,CAACd,KAAJ,CAAU,eAAV,CAFR;EAGLm/B,MAAAA,UAAU,EAAEA,UAHP;EAILE,MAAAA,SAAS,EAAEF,UAAU,CAACjZ,GAAX,CAAe,WAAf;EAJN,KAAP;EAMD,GAZD;;;;EAF8B,MAiBxBoZ,KAjBwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,qCAmBb;EACb,eAAO,KAAKt/B,KAAL,CAAW,UAAX,CAAP;EACD;;;EArB2B;EAAA;EAAA,8BAuBpB;EACN,eAAO,KAAKqsB,UAAL,CAAgB,WAAhB,EAA6BH,OAA7B,CAAqC,eAArC,CAAP;EACD;;;EAzB2B;EAAA;EAAA,8BA2BpB;EACN,eAAOxH,KAAK,CAAC,IAAD,CAAL,CAAY+J,MAAnB;EACD;;;EA7B2B;EAAA;EAAA,0BA+BxBl8B,GA/BwB,EA+BnB;EACP,aAAKqC,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,cAAIqrC,UAAU,GAAGza,KAAK,CAAC5wB,CAAD,CAAL,CAASqrC,UAA1B;EACAA,UAAAA,UAAU,CAACp9B,MAAX,CAAkBxP,GAAlB,EAFgB;;EAIhB4sC,UAAAA,UAAU,CAACpY,QAAX,CAAoB,CAApB,EAAuBwY,cAAvB,CAAsC,GAAtC;EACD,SALD;EAMA,eAAO,IAAP;EACD;;;EAvC2B;EAAA;EAAA,6BAyCrBv/B,KAzCqB,EAyCd;EACZ,eAAO,KAAKw/B,KAAL,SACDx/B,KADC,EAEJorB,MAFI,EAAP;EAGD;;;EA7C2B;EAAA;EAAA,uCA+CX;EACf,eAAO,KAAK/rB,MAAL,CAAY,UAAAyB,GAAG;EAAA,iBAAI4jB,KAAK,CAAC5jB,GAAD,CAAL,CAAWu+B,SAAf;EAAA,SAAf,CAAP;EACD;EAjD2B;EAAA;EAAA,uCAkDX;EACf,YAAIG,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,YAAIC,UAAU,GAAGD,KAAK,CAACta,EAAN,CAASsa,KAAK,CAAC3sC,MAAN,GAAe,CAAxB,CAAjB;;EACA,YAAI4sC,UAAU,CAACrpC,KAAX,IAAoBqpC,UAAU,CAACvZ,GAAX,CAAe,WAAf,MAAgC,KAAxD,EAA+D;EAC7DuZ,UAAAA,UAAU,CAACtpC,IAAX,CAAgB,IAAhB;EACD;;EACD,eAAO,IAAP;EACD;EAzD2B;EAAA;EAAA,0CA0DR;EAClB,YAAIqpC,KAAK,GAAG,KAAKA,KAAL,EAAZ;EACA,YAAIC,UAAU,GAAGD,KAAK,CAACta,EAAN,CAASsa,KAAK,CAAC3sC,MAAN,GAAe,CAAxB,CAAjB;;EACA,YAAI4sC,UAAU,CAACrpC,KAAX,IAAoBqpC,UAAU,CAACvZ,GAAX,CAAe,WAAf,MAAgC,IAAxD,EAA8D;EAC5DuZ,UAAAA,UAAU,CAACtpC,IAAX,CAAgB,GAAhB;EACD;;EACD,eAAO,IAAP;EACD;EAjE2B;;EAAA;EAAA,IAiBVioC,GAjBU;;;EAoE9BkB,EAAAA,KAAK,CAACviC,SAAN,CAAgB0xB,MAAhB,GAAyB6Q,KAAK,CAACviC,SAAN,CAAgByiC,KAAzC;;EAEApB,EAAAA,GAAG,CAACrhC,SAAJ,CAAcugC,KAAd,GAAsB,UAAS1pC,CAAT,EAAY;EAChC,QAAID,CAAC,GAAG,WAAQ,+BAAR,CAAR,CADgC;;EAIhC,QAAI+rC,QAAQ,GAAG/rC,CAAC,CACbqM,KADY,CACN,uGADM,QAET,OAFS,CAAf;EAGA,QAAI2/B,OAAO,GAAGhsC,CAAC,CAACqM,KAAF,CAAQ,8DAAR,CAAd;EACA,QAAI4/B,QAAQ,GAAGjsC,CAAC,CAACqM,KAAF,CAAQ,oDAAR,CAAf;EACA,QAAIjH,MAAM,GAAG2mC,QAAQ,CAACx+B,MAAT,CAAgBy+B,OAAhB,CAAb;EACA5mC,IAAAA,MAAM,GAAGA,MAAM,CAACmI,MAAP,CAAc0+B,QAAd,CAAT;EACA7mC,IAAAA,MAAM,GAAGA,MAAM,MAAN,CAAU,WAAV,CAAT;;EAEA,QAAI,OAAOnF,CAAP,KAAa,QAAjB,EAA2B;EACzBmF,MAAAA,MAAM,GAAGpF,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAT;EACD;;EACD,WAAO,IAAI0rC,KAAJ,CAAUvmC,MAAM,CAAC4H,IAAjB,EAAuB,IAAvB,EAA6B,KAAKzH,KAAlC,CAAP;EACD,GAjBD;;EAkBA,SAAOklC,GAAP;EACD,CAzFD;;EA0FA,SAAc,GAAGD,WAAjB;;EC1FA,IAAM0B,QAAQ,GACZ,oFADF;;EAIA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASh/B,GAAT,EAAc;EAC9B,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,MAAuB,IAA3B,EAAiC;EAC/B,WAAO,IAAP;EACD,GAH6B;;;EAK9B,MAAIplB,GAAG,CAAColB,GAAJ,CAAQ2Z,QAAR,MAAsB,IAA1B,EAAgC;EAC9B,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CATD;;EAWA,eAAc,GAAGC,SAAjB;;ECZA,IAAM5vB,YAAU,GAAG;EACjB6vB,EAAAA,IAAI,EAAE,IADW;EAEjBC,EAAAA,IAAI,EAAE,IAFW;EAGjBC,EAAAA,QAAQ,EAAE,IAHO;EAIjBC,EAAAA,MAAM,EAAE,IAJS;EAKjBC,EAAAA,MAAM,EAAE,IALS;EAMjBC,EAAAA,KAAK,EAAE,IANU;EAOjBC,EAAAA,IAAI,EAAE,IAPW;;EAAA,CAAnB;;EAUA,IAAMC,WAAW,GAAG;EAClBvtC,EAAAA,CAAC,EAAE,IADe;EAElBI,EAAAA,CAAC,EAAE,IAFe;EAGlBC,EAAAA,CAAC,EAAE,IAHe;EAIlBE,EAAAA,CAAC,EAAE,IAJe;EAKlBb,EAAAA,CAAC,EAAE,IALe;EAMlBiB,EAAAA,CAAC,EAAE,IANe;EAOlBC,EAAAA,CAAC,EAAE,IAPe;EAQlBC,EAAAA,CAAC,EAAE,IARe;EASlBC,EAAAA,CAAC,EAAE,IATe;EAUlBG,EAAAA,CAAC,EAAE,IAVe;EAWlBC,EAAAA,CAAC,EAAE,IAXe;EAYlBK,EAAAA,CAAC,EAAE;EAZe,CAApB;;EAeA,IAAMisC,QAAQ,GAAG,CACf,SADe;EAEf,yBAFe;EAGf,OAHe,CAAjB;;EAMA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAS1/B,GAAT,EAAc;;EAEhC,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,KAAsBplB,GAAG,CAAColB,GAAJ,CAAQ,QAAR,CAA1B,EAA6C;EAC3C,WAAO,EAAP;EACD,GAJ+B;;;EAMhC,MAAIplB,GAAG,CAAColB,GAAJ,CAAQ,SAAR,CAAJ,EAAwB;EACtB,WAAO,KAAP;EACD;;EACD,MAAI3zB,GAAG,GAAGuO,GAAG,CAACtO,IAAJ,CAAS,QAAT,EAAmBgD,IAAnB,EAAV,CATgC;;EAWhC,MAAI0a,YAAU,CAAC/X,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClC,WAAO2d,YAAU,CAAC3d,GAAD,CAAjB;EACD,GAb+B;;;EAehC,MAAIkuC,WAAW,GAAGluC,GAAG,CAAC2K,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB;;EACA,MAAI4D,GAAG,CAAColB,GAAJ,CAAQ,aAAR,KAA0Boa,WAAW,CAACnoC,cAAZ,CAA2BsoC,WAA3B,CAA9B,EAAuE;EACrE,WAAO,IAAP;EACD,GAlB+B;;;EAoBhC,OAAK,IAAIhuC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8tC,QAAQ,CAAC1tC,MAA7B,EAAqCJ,CAAC,EAAtC,EAA0C;EACxC,QAAI8tC,QAAQ,CAAC9tC,CAAD,CAAR,CAAY2C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,aAAO,GAAP;EACD;EACF,GAxB+B;;;EA0BhC,MAAI,YAAY6C,IAAZ,CAAiB7C,GAAjB,CAAJ,EAA2B;EACzB,WAAO,IAAP;EACD;;EACD,SAAO,GAAP;EACD,CA9BD;;EAgCA,cAAc,GAAGiuC,WAAjB;;EClEA;EACA,IAAMjI,UAAQ,GAAG,CACf,uCADe,EAEf,4CAFe,EAGf,OAHe,EAIf,QAJe,EAKf,YALe,CAAjB;;EASA,IAAMC,YAAU,GAAG,CACjB,eADiB,EAEjB,6CAFiB,EAGjB,gBAHiB,EAIjB,SAJiB,EAKjB,kBALiB,EAMjB,SANiB,EAOjB,2BAPiB,EAQjB,UARiB,EASjB,SATiB,EAUjB,OAViB,EAWjB,oBAXiB,EAYjB,QAZiB,EAajB,iBAbiB,EAcjB,kBAdiB,EAejB,+BAfiB,EAgBjB,aAhBiB,EAiBjB,YAjBiB,EAkBjB,sCAlBiB,EAmBjB,QAnBiB,EAoBjB,0BApBiB,CAAnB;EAsBA,YAAc,GAAG;EACfA,EAAAA,UAAU,EAAEA,YADG;EAEfD,EAAAA,QAAQ,EAAEA;EAFK,CAAjB;;EC/BA,IAAMmI,IAAI,GAAG,IAAb;EAEA;EACA;;EACA,IAAMnI,UAAQ,GAAG,SAAXA,QAAW,CAAShmC,GAAT,EAAc;;EAE7B,MAAIuwB,QAAK,CAAC0V,UAAN,CAAiB52B,IAAjB,CAAsB,UAAAhK,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAzB,CAAJ,EAAiD;EAC/C,WAAO,KAAP;EACD,GAJ4B;;;EAM7B,MAAImuC,IAAI,CAACtrC,IAAL,CAAU7C,GAAV,MAAmB,IAAvB,EAA6B;EAC3B,WAAO,IAAP;EACD,GAR4B;;;EAU7B,MAAIuwB,QAAK,CAACyV,QAAN,CAAe32B,IAAf,CAAoB,UAAAhK,GAAG;EAAA,WAAIA,GAAG,CAACxC,IAAJ,CAAS7C,GAAT,CAAJ;EAAA,GAAvB,CAAJ,EAA+C;EAC7C,WAAO,IAAP;EACD;;EACD,SAAO,IAAP;EACD,CAdD;;EAeA,gBAAc,GAAGgmC,UAAjB;;ECpBA,IAAMoI,UAAU,GAAG;EACjBC,EAAAA,EAAE,EAAE,KADa;EAEjBC,EAAAA,GAAG,EAAE,MAFY;EAGjBC,EAAAA,IAAI,EAAE,QAHW;EAIjBC,EAAAA,EAAE,EAAE,MAJa;EAKjBtuC,EAAAA,CAAC,EAAE,MALc;EAMjBgkC,EAAAA,GAAG,EAAE,OANY;EAQjBuK,EAAAA,GAAG,EAAE,MARY;EASjBC,EAAAA,KAAK,EAAE,QATU;EAUjBC,EAAAA,GAAG,EAAE,MAVY;EAWjBC,EAAAA,EAAE,EAAE,MAXa;EAYjBC,EAAAA,IAAI,EAAE;EAZW,CAAnB;;EAgBA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAASvgC,GAAT,EAAc;EACjC,MAAIvO,GAAG,GAAGuO,GAAG,CAACtO,IAAJ,CAAS,MAAT,EAAiBgD,IAAjB,EAAV,CADiC;;EAGjC,MAAImrC,UAAU,CAACxoC,cAAX,CAA0B5F,GAA1B,CAAJ,EAAoC;EAClCuO,IAAAA,GAAG,CAACqnB,WAAJ,CAAgBwY,UAAU,CAACpuC,GAAD,CAA1B,EAAiC,IAAjC;EACAuO,IAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAPgC;;;EASjC,MAAI,KAAKlD,IAAL,CAAU7C,GAAV,CAAJ,EAAoB;EAClBA,IAAAA,GAAG,IAAI,GAAP;EACAuO,IAAAA,GAAG,CAACqnB,WAAJ,CAAgB51B,GAAhB,EAAqB,IAArB;EACAuO,IAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,GAdgC;;;EAgBjC/F,EAAAA,GAAG,IAAI,IAAP;EACAuO,EAAAA,GAAG,CAACqnB,WAAJ,CAAgB51B,GAAhB,EAAqB,IAArB;EACAuO,EAAAA,GAAG,CAACxI,GAAJ,CAAQ,YAAR,EAAsB,cAAtB;EACA;EACD,CApBD;;EAqBA,kBAAc,GAAG+oC,YAAjB;;ECrCA;EACA;EACA,IAAM3c,OAAK,GAAG,SAARA,KAAQ,CAAS5jB,GAAT,EAAc;EAC1B,MAAIuB,GAAG,GAAG;EACRf,IAAAA,IAAI,EAAER;EADE,GAAV,CAD0B;;EAK1B,MAAIA,GAAG,CAAColB,GAAJ,CAAQ,qBAAR,CAAJ,EAAoC;EAClC,QAAIvyB,CAAC,GAAGmN,GAAG,CAACurB,UAAJ,CAAe,UAAf,EAA2B,CAA3B,CAAR;EACAhqB,IAAAA,GAAG,CAACf,IAAJ,GAAW3N,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAX;EACA7iB,IAAAA,GAAG,CAAClM,IAAJ,GAAWxC,CAAC,CAACuxB,EAAF,CAAK,CAAL,CAAX;EACD;;EACD,SAAO7iB,GAAP;EACD,CAXD;;EAYA,WAAc,GAAGqiB,OAAjB;;ECRA,IAAMnmB,SAAO,GAAG;;EAEd+D,EAAAA,IAAI,EAAE,cAASnI,OAAT,EAAkB;EACtB,QAAIvG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOuG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BvG,MAAAA,CAAC,GAAGuG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE,IAAR;EAAc+H,MAAAA,MAAM,EAAE,IAAtB;EAA4B/E,MAAAA,IAAI,EAAE,IAAlC;EAAwCkJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI2D,GAAG,GAAG,EAAV;EACA,SAAKzN,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIwB,IAAI,GAAGxB,GAAG,CAACwB,IAAJ,CAASnI,OAAT,EAAkB,CAAlB,CAAX;EACAmI,MAAAA,IAAI,CAACg/B,OAAL,GAAeC,UAAU,CAACzgC,GAAD,CAAzB;EACAuB,MAAAA,GAAG,CAACvD,IAAJ,CAASwD,IAAT;EACD,KAJD;;EAKA,QAAI1O,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOyO,GAAG,CAACzO,CAAD,CAAV;EACD;;EACD,WAAOyO,GAAP;EACD,GAnBa;;;EAqBd2N,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAIrP,IAAI,GAAG,KAAKwlB,SAAL,CAAe,4DAAf,CAAX;EACAxlB,IAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAY,KAAKklB,UAAL,CAAgB,uBAAhB,CAAZ,CAAP;EACAzlB,IAAAA,IAAI,GAAGA,IAAI,CAACX,KAAL,CAAW,YAAX,CAAP;EACA,WAAOW,IAAI,CAAClF,IAAL,CAAU,OAAV,CAAP;EACD,GA1Ba;EA4Bd88B,EAAAA,QAAQ,EAAE,oBAAW;EACnB,WAAO,WAAQ,SAAR,CAAP,CADmB;EAEpB,GA9Ba;EA+BduH,EAAAA,SAAS,EAAE,qBAAW;EACpB,WAAO,KAAKzgC,MAAL,CAAY,UAAAnM,CAAC;EAAA,aAAI4sC,WAAS,CAAC5sC,CAAD,CAAb;EAAA,KAAb,CAAP;EACD,GAjCa;EAkCd2c,EAAAA,QAAQ,EAAE,kBAAS2xB,KAAT,EAAgB;EAAA;;EACxB,QAAI3xB,QAAQ,GAAG,KAAK3W,KAAL,CAAWE,UAAX,CAAsByW,QAArC;EACA,SAAKjb,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAAColB,GAAJ,CAAQ,SAAR,KAAsB4Z,WAAS,CAACh/B,GAAD,CAAT,KAAmB,KAA7C,EAAoD;EAClD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAGojB,OAAK,CAAC5jB,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI/O,GAAG,GAAG+O,IAAI,CAAC9O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC8O,IAAI,CAAC4kB,GAAL,CAAS,WAAT,CAAD,IAA0BqS,YAAQ,CAAChmC,GAAD,CAAR,KAAkB,IAAhD,EAAsD;EACpD;EACD;;EACDA,MAAAA,GAAG,GAAGsd,QAAQ,CAACtd,GAAD,EAAM,KAAI,CAAC2G,KAAX,CAAd;EACAoI,MAAAA,IAAI,CAAC5L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,SAAtB,EAXkB;;EAalB,UAAIkpC,KAAJ,EAAW;EACT,YAAIC,EAAE,GAAGngC,IAAI,CAACogC,UAAL,CAAgB,qBAAhB,EAAuCzb,GAAvC,CAA2C,YAA3C,CAAT;;EACA,YAAIwb,EAAE,CAACrrC,KAAH,KAAa,IAAjB,EAAuB;EACrBqrC,UAAAA,EAAE,CAACrW,MAAH;EACD;EACF;EACF,KAnBD;EAoBA,WAAO,IAAP;EACD,GAzDa;EA0Dd9xB,EAAAA,UAAU,EAAE,oBAASkoC,KAAT,EAAgB;EAAA;;EAC1B,QAAIloC,UAAU,GAAG,KAAKJ,KAAL,CAAWE,UAAX,CAAsBE,UAAvC;EACA,SAAK1E,OAAL,CAAa,UAAAkM,GAAG,EAAI;EAClB,UAAIA,GAAG,CAAColB,GAAJ,CAAQ,WAAR,KAAwB4Z,WAAS,CAACh/B,GAAD,CAAT,KAAmB,KAA/C,EAAsD;EACpD;EACD,OAHiB;;;EAKlB,UAAIQ,IAAI,GAAGojB,OAAK,CAAC5jB,GAAD,CAAL,CAAWQ,IAAtB;EACA,UAAI/O,GAAG,GAAG+O,IAAI,CAAC9O,IAAL,CAAU,SAAV,CAAV;;EACA,UAAI,CAAC8O,IAAI,CAAC4kB,GAAL,CAAS,SAAT,CAAD,IAAwBqS,YAAQ,CAAChmC,GAAD,CAAR,KAAkB,IAA9C,EAAoD;EAClD;EACD;;EACDA,MAAAA,GAAG,GAAG+G,UAAU,CAAC/G,GAAD,EAAM,MAAI,CAAC2G,KAAX,CAAhB;EACAoI,MAAAA,IAAI,CAAC5L,OAAL,CAAanD,GAAb,EAAkB+F,GAAlB,CAAsB,WAAtB,EAXkB;;EAalB,UAAIkpC,KAAJ,EAAW;;EAET,YAAIxpC,KAAK,GAAG8I,GAAZ;EACA,YAAI6gC,GAAG,GAAG7gC,GAAG,CAAC4gC,UAAJ,CAAe,YAAf,CAAV;;EACA,YAAIC,GAAG,CAACvrC,KAAR,EAAe;EACb4B,UAAAA,KAAK,GAAG2pC,GAAR;EACD;;EACD,YAAIL,OAAO,GAAGC,UAAU,CAACvpC,KAAD,CAAxB;EACAA,QAAAA,KAAK,CAAC4pC,YAAN,CAAmBN,OAAnB;EACD;EACF,KAvBD;EAwBA,WAAO,IAAP;EACD,GArFa;EAsFdD,EAAAA,YAAY,EAAE,wBAAW;EACvB,SAAKzsC,OAAL,CAAa,UAAA1B,CAAC,EAAI;EAChBmuC,MAAAA,cAAY,CAACnuC,CAAD,CAAZ;EACD,KAFD;EAGA,WAAO,IAAP;EACD;EA3Fa,CAAhB;EA6FA,aAAc,GAAGqL,SAAjB;;ECjGA,IAAM4/B,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExByD,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVzD,GAFU;;;EAI9B1pC,EAAAA,MAAM,CAACqH,MAAP,CAAc8lC,KAAK,CAAC9kC,SAApB,EAA+BwB,SAA/B;;EAEA6/B,EAAAA,GAAG,CAACrhC,SAAJ,CAAcoR,KAAd,GAAsB,UAASva,CAAT,EAAY;;EAEhC,QAAIwmB,IAAI,GAAG,KAAKpa,KAAL,CAAW,yCAAX,CAAX,CAFgC;;EAIhC,QAAIrM,CAAC,GAAG,KAAKsyB,GAAL,CAAS7L,IAAT,EAAeiS,UAAf,CAA0B,WAA1B,CAAR,CAJgC;;EAMhC14B,IAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EAEAzmB,IAAAA,CAAC,GAAGA,CAAC,CAACqM,KAAF,CAAQ,8BAAR,CAAJ,CARgC;;EAUhCrM,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,UAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,eAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,mBAAN,CAAJ,CAZgC;;;EAchCtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,6BAAN,CAAJ;EACAtyB,IAAAA,CAAC,GAAGA,CAAC,CAACsyB,GAAF,CAAM,kBAAN,CAAJ;;EAEA,QAAI,OAAOryB,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,WAAO,IAAIiuC,KAAJ,CAAUluC,CAAC,CAACgN,IAAZ,EAAkB,IAAlB,EAAwB,KAAKzH,KAA7B,CAAP;EACD,GArBD;;EAsBA,SAAOklC,GAAP;EACD,CA7BD;;EA8BA,SAAc,GAAGD,WAAjB;;EChCA,IAAM2D,IAAI,GAAG,IAAb;EACA,IAAMC,KAAK,GAAG,IAAd;;EAEA,IAAM5D,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB4D,WAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,aAAKrhC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAImiC,KAAK,GAAGniC,CAAC,CAAC4K,KAAF,CAAQ,CAAR,CAAZ;EACAu3B,UAAAA,KAAK,CAAC//B,GAAN,GAAY+/B,KAAK,CAAC//B,GAAN,CAAUR,OAAV,CAAkBosC,IAAlB,EAAwB,EAAxB,CAAZ;EACA,cAAIhnC,IAAI,GAAGhH,CAAC,CAAC+L,QAAF,EAAX;EACA/E,UAAAA,IAAI,CAAC3E,IAAL,GAAY2E,IAAI,CAAC3E,IAAL,CAAUT,OAAV,CAAkBqsC,KAAlB,EAAyB,EAAzB,CAAZ;EACD,SALD;EAMA,eAAO,IAAP;EACD;EAZ2B;;EAAA;EAAA,IAEJ3D,GAFI;;EAe9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcyuB,WAAd,GAA4B,UAAS53B,CAAT,EAAY;EACtC,QAAI+M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,YAAIqvC,IAAI,CAAC1sC,IAAL,CAAUlB,CAAC,CAACgC,GAAZ,CAAJ,EAAsB;;EAEpB,eAAK,IAAIrC,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAIkuC,KAAK,CAAC3sC,IAAN,CAAWsJ,KAAK,CAAC7K,CAAD,CAAL,CAASsC,IAApB,CAAJ,EAA+B;EAC7B,kBAAImJ,GAAG,GAAGzL,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAkO,cAAAA,IAAI,CAAC7B,IAAL,CAAUhL,CAAC,CAACkL,SAAF,CAAY9K,CAAC,CAAC4D,EAAd,EAAkBwH,GAAlB,CAAV;EACA7M,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAjBD,EAFsC;;EAqBtC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI+M,IAAI,CAAC/M,CAAD,CAAR,EAAa;EACX+M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC/M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL+M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAIqhC,WAAJ,CAAgBrhC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKzH,KAAjC,CAAP;EACD;;EACD,WAAO,IAAI8oC,WAAJ,CAAgBrhC,IAAhB,EAAsB,IAAtB,EAA4B,KAAKzH,KAAjC,CAAP;EACD,GA9BD;;EAgCA,SAAOklC,GAAP;EACD,CAhDD;;EAiDA,eAAc,GAAGD,WAAjB;;ECpDA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB6D,WAFwB;EAAA;EAAA;EAAA;;EAG5B,yBAAYthC,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,uFAAMyH,IAAN,EAAYkkB,IAAZ,EAAkB3rB,KAAlB;EACA,YAAK4lC,UAAL,GAAkB,IAAlB;EAF6B;EAG9B;;;;EAN2B;EAAA;EAAA,8BAQpB;EACN,aAAKn+B,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,cAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ;EACAA,UAAAA,KAAK,CAAC9J,OAAN,CAAc,UAAAV,CAAC,EAAI;EACjB,gBAAI3B,GAAG,GAAG2B,CAAC,CAAC1B,IAAF,CAAOkD,OAAP,CAAe,KAAf,EAAsB,EAAtB,CAAV;EACAxB,YAAAA,CAAC,CAAC4N,GAAF,CAAMvP,GAAG,IAAI2B,CAAC,CAAC1B,IAAf;EACD,WAHD;EAID,SAND;EAOA,eAAO,IAAP;EACD;EAjB2B;;EAAA;EAAA,IAEJ4rC,GAFI;;;;;;;;;;;EA8B9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAc0uB,WAAd,GAA4B,UAAS73B,CAAT,EAAY;;EAEtC,QAAIwC,KAAK,GAAG,KAAK4J,KAAL,CAAW,qBAAX,CAAZ,CAFsC;;EAItC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBwC,MAAAA,KAAK,GAAGA,KAAK,CAACwI,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIquC,WAAJ,CAAgB7rC,KAAK,CAACuK,IAAtB,EAA4B,IAA5B,EAAkC,KAAKzH,KAAvC,CAAP;EACD,GARD;;EASA,SAAOklC,GAAP;EACD,CAxCD;;EAyCA,eAAc,GAAGD,WAAjB;;ECzCA,IAAM+D,KAAK,GAAG;EACZ,QAAU,IADE;;EAEZ,YAAU,QAFE;;EAGZ,OAAU,GAHE;;EAIZ,YAAU,QAJE;;EAKZ,YAAU,QALE;;EAMZ,YAAU,QANE;;EAOZ,YAAU,QAPE;;EAQZ,YAAU,QARE;;EASZ,YAAU,QATE;;EAUZ,YAAU,QAVE;;EAWZ,UAAU,MAXE;;EAYZ,YAAU,QAZE;;;EAcZ,YAAU,QAdE;;EAeZ,YAAU,QAfE;;EAgBZ,YAAU,QAhBE;;;EAkBZ,YAAU,QAlBE;;EAmBZ,OAAU,MAnBE;;EAoBZ,YAAU,QApBE;;EAAA,CAAd;EAuBA,IAAMC,OAAO,GAAGz9B,MAAM,CAAC,MAAMhQ,MAAM,CAACC,IAAP,CAAYutC,KAAZ,EAAmBptC,IAAnB,CAAwB,GAAxB,CAAN,GAAqC,GAAtC,CAAtB;;EAEA,IAAMqpC,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBgE,UAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;;EAAA,+BAInB;EACP,eAAO,IAAP;EACD;EAN2B;;EAAA;EAAA,IAELhE,GAFK;;EAS9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcmuB,UAAd,GAA2B,UAASt3B,CAAT,EAAY;EACrC,QAAI+M,IAAI,GAAG,EAAX;EACA,SAAKA,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAI4K,KAAK,GAAG5K,CAAC,CAAC4K,KAAF,EAAZ,CADqB;;EAGrB,WAAK,IAAIjM,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGiM,KAAK,CAAC7L,MAA1B,EAAkCJ,CAAC,IAAI,CAAvC,EAA0C;EACxC,YAAMyB,CAAC,GAAGwK,KAAK,CAACjM,CAAD,CAAf;;EACA,YAAI0vC,OAAO,CAAC/sC,IAAR,CAAalB,CAAC,CAACgC,GAAf,CAAJ,EAAyB;EACvB,cAAIm/B,KAAI,GAAG,CAACnhC,CAAC,CAACgC,GAAF,CAAM8J,KAAN,CAAYmiC,OAAZ,KAAwB,EAAzB,EAA6B,CAA7B,CAAX;EACA,cAAIE,IAAI,GAAGH,KAAK,CAAC7M,KAAD,CAAhB,CAFuB;;;;;EAOvB,eAAK,IAAIxhC,CAAC,GAAGpB,CAAb,EAAgBoB,CAAC,GAAG6K,KAAK,CAAC7L,MAA1B,EAAkCgB,CAAC,IAAI,CAAvC,EAA0C;EACxC,gBAAI6K,KAAK,CAAC7K,CAAD,CAAL,CAASsC,IAAT,CAAcgB,OAAd,CAAsBkrC,IAAtB,MAAgC,CAAC,CAArC,EAAwC;EACtC,kBAAI/iC,GAAG,GAAGzL,CAAC,GAAGpB,CAAJ,GAAQ,CAAlB;EACAkO,cAAAA,IAAI,CAAC7B,IAAL,CAAUhL,CAAC,CAACkL,SAAF,CAAY9K,CAAC,CAAC4D,EAAd,EAAkBwH,GAAlB,CAAV;EACA7M,cAAAA,CAAC,GAAGoB,CAAJ;EACA;EACD;EACF;EACF;EACF;EACF,KAtBD,EAFqC;;EA0BrC,QAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;EACzB,UAAI+M,IAAI,CAAC/M,CAAD,CAAR,EAAa;EACX+M,QAAAA,IAAI,GAAG,CAACA,IAAI,CAAC/M,CAAD,CAAL,CAAP;EACD,OAFD,MAEO;EACL+M,QAAAA,IAAI,GAAG,EAAP;EACD;;EACD,aAAO,IAAIyhC,UAAJ,CAAezhC,IAAf,EAAqB,IAArB,EAA2B,KAAKzH,KAAhC,CAAP;EACD;;EACD,WAAO,IAAIkpC,UAAJ,CAAezhC,IAAf,EAAqB,IAArB,EAA2B,KAAKzH,KAAhC,CAAP;EACD,GAnCD,CAT8B;;;EA8C9BklC,EAAAA,GAAG,CAACrhC,SAAJ,CAAcguB,MAAd,GAAuBqT,GAAG,CAACrhC,SAAJ,CAAcmuB,UAArC;EAEA,SAAOkT,GAAP;EACD,CAjDD;;EAkDA,cAAc,GAAGD,WAAjB;;EC3EA;EACA,IAAMnkC,cAAY,GAAG,SAAfA,YAAe,CAASzD,MAAT,EAAiB2C,KAAjB,EAAwB;EAC3C,MAAIopC,IAAI,GAAG/rC,MAAM,CAAC+rC,IAAlB,CAD2C;;EAI3C,MAAI/vC,GAAG,GAAG+vC,IAAI,CAAC9vC,IAAL,CAAU,QAAV,CAAV;;EACA,MAAI8vC,IAAI,CAACpc,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAC3B,WAAO3zB,GAAP;EACD,GAP0C;;;EAU3C,MAAImH,KAAK,GAAG,IAAZ;;EACA,MAAI4oC,IAAI,CAACpc,GAAL,CAAS,YAAT,CAAJ,EAA4B;EAC1BxsB,IAAAA,KAAK,GAAG,WAAR;EACD,GAFD,MAEO,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,SAAT,CAAJ,EAAyB;EAC9BxsB,IAAAA,KAAK,GAAG,QAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,eAAT,CAAJ,EAA+B;EACpCxsB,IAAAA,KAAK,GAAG,cAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,aAAT,CAAJ,EAA6B;EAClCxsB,IAAAA,KAAK,GAAG,YAAR;EACD,GAFM,MAEA,IAAI4oC,IAAI,CAACpc,GAAL,CAAS,QAAT,CAAJ,EAAwB;EAC7BxsB,IAAAA,KAAK,GAAG,OAAR;EACD;;EACD,SAAOR,KAAK,CAACE,UAAN,CAAiBY,YAAjB,CAA8BzH,GAA9B,EAAmC2G,KAAnC,EAA0CQ,KAA1C,CAAP;EACD,CAvBD;;EAwBA,oBAAc,GAAGM,cAAjB;;ECzBA;EACA;EAEA;EACA,IAAMuoC,QAAQ,GAAG,SAAXA,QAAW,CAASC,EAAT,EAAa;EAC5B,MAAIzI,IAAI,GAAGyI,EAAE,CAACpc,UAAH,CAAc,QAAd,EAAwBtrB,IAAxB,EAAX;EACA,SAAOi/B,IAAP;EACD,CAHD;EAMA;EACA;;;EACA,IAAMxB,UAAQ,GAAG,SAAXA,QAAW,CAAShiC,MAAT,EAAiB;EAChC,MAAIisC,EAAE,GAAGjsC,MAAM,CAAC+rC,IAAhB;;EACA,MAAIE,EAAE,CAACtc,GAAH,CAAO,iBAAP,KAA6B3vB,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,iBAArB,CAAjC,EAA0E;EACxE,WAAO,IAAP;EACD;;EACD,MAAIsc,EAAE,CAACtc,GAAH,CAAO,gBAAP,KAA4B3vB,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,gBAArB,CAAhC,EAAwE;EACtE,WAAO,KAAP;EACD,GAP+B;;;EAShC,MAAI6T,IAAI,GAAGwI,QAAQ,CAACC,EAAD,CAAnB;;EACA,MAAIzI,IAAI,CAAC7T,GAAL,CAAS,eAAT,CAAJ,EAA+B;EAC7B,WAAO,IAAP;EACD;;EACD,MAAI6T,IAAI,CAAC7T,GAAL,CAAS,SAAT,CAAJ,EAAyB;EACvB,WAAO,IAAP;EACD;;EACD,MAAI6T,IAAI,CAAC7T,GAAL,CAAS,WAAT,CAAJ,EAA2B;EACzB,WAAO,KAAP;EACD;;EACD,SAAO,IAAP;EACD,CApBD;;EAqBA,gBAAc,GAAGqS,UAAjB;;EC9BA;EACA;EACA;EACA;EACA;;EAEA,IAAMmK,UAAU,GAAG,SAAbA,UAAa,CAASnsC,MAAT,EAAiB2C,KAAjB,EAAwB;EACzC,MAAIspC,EAAE,GAAGjsC,MAAM,CAAC+rC,IAAhB,CADyC;;EAGzC,MAAI/rC,MAAM,CAACyC,QAAP,CAAgB5C,KAApB,EAA2B;EACzB;EACD,GALwC;;;EAQzC,MAAIG,MAAM,CAACksC,SAAP,CAAiBrsC,KAArB,EAA4B;EAC1BG,IAAAA,MAAM,CAACksC,SAAP,CAAiBvd,EAAjB,CAAoB,CAApB,EAAuBnjB,MAAvB,CAA8B,KAA9B;EACA;EACD,GAXwC;;;EAazC,MAAIygC,EAAE,CAACtc,GAAH,CAAO,2BAAP,CAAJ,EAAyC;EACvCsc,IAAAA,EAAE,CAACzgC,MAAH,CAAU,KAAV;EACA;EACD,GAhBwC;;;EAkBzC,MAAIygC,EAAE,CAACtc,GAAH,CAAO,YAAP,CAAJ,EAA0B;EACxB,QAAI/V,GAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,GAAf,EAAoB,IAApB;EACAqyB,IAAAA,EAAE,CAACxgC,OAAH,CAAW,SAAX;EACA;EACD,GAvBwC;;;EAyBzC,MAAIwgC,EAAE,CAACtc,GAAH,CAAO,eAAP,CAAJ,EAA6B;EAC3B,QAAI/V,IAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,IAAf,EAAoB,IAApB;;EACA,QAAIooB,YAAQ,CAAChiC,MAAD,AAAA,CAAZ,EAA6B;EAC3BisC,MAAAA,EAAE,CAACxgC,OAAH,CAAW,QAAX;EACD,KAFD,MAEO;EACLwgC,MAAAA,EAAE,CAACxgC,OAAH,CAAW,UAAX;EACD;;EACD;EACD,GAlCwC;;;EAoCzC,MAAIwgC,EAAE,CAACtc,GAAH,CAAO,SAAP,CAAJ,EAAuB;EACrB,QAAI/V,KAAG,GAAGnW,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAAtB;;EACAspC,IAAAA,EAAE,CAACra,WAAH,CAAehY,KAAf,EAAoB,IAApB;EACAqyB,IAAAA,EAAE,CAACxgC,OAAH,CAAW,KAAX;EACA;EACD,GAzCwC;;;EA4CzC,MAAIu2B,YAAQ,CAAChiC,MAAD,AAAA,CAAZ,EAA6B;EAC3BisC,IAAAA,EAAE,CAACxgC,OAAH,CAAW,UAAX;EACA;EACD,GA/CwC;;;EAiDzCwgC,EAAAA,EAAE,CAACxgC,OAAH,CAAW,QAAX;EACA;EACD,CAnDD;;EAoDA,gBAAc,GAAG0gC,UAAjB;;EC7DA;EACA,IAAMC,SAAS,GAAG,SAAZA,SAAY,CAASH,EAAT,EAAa;EAC7B,MAAIjsC,MAAM,GAAG;EACXqsC,IAAAA,MAAM,EAAEJ,EAAE,CAACxiC,KAAH,CAAS,UAAT,CADG;;EAEXhH,IAAAA,QAAQ,EAAEwpC,EAAE,CAACxiC,KAAH,CAAS,WAAT,CAFC;;EAGXyiC,IAAAA,SAAS,EAAED,EAAE,CAACxiC,KAAH,CAAS,YAAT,EAAuBimB,GAAvB,CAA2B,qBAA3B,CAHA;;EAIX4c,IAAAA,QAAQ,EAAEL,EAAE,CAACxiC,KAAH,CAAS,WAAT,CAJC;;EAKXsiC,IAAAA,IAAI,EAAEE,EAAE,CAACxiC,KAAH,CAAS,OAAT,EAAkBimB,GAAlB,CAAsB,0CAAtB;EALK,GAAb,CAD6B;;EAS7B,MAAI,CAAC1vB,MAAM,CAAC+rC,IAAP,CAAYlsC,KAAjB,EAAwB;;EAEtB1B,IAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B8C,MAAAA,MAAM,CAAC9C,CAAD,CAAN,GAAY8C,MAAM,CAAC9C,CAAD,CAAN,CAAUwyB,GAAV,CAAc,GAAd,CAAZ;EACD,KAFD,EAFsB;;EAMtB1vB,IAAAA,MAAM,CAAC+rC,IAAP,GAAcE,EAAd;EACA,WAAOjsC,MAAP;EACD,GAjB4B;;;EAmB7B,MAAIA,MAAM,CAACqsC,MAAP,IAAiBrsC,MAAM,CAACqsC,MAAP,CAAcxsC,KAAnC,EAA0C;EACxC,QAAI4J,KAAK,GAAGzJ,MAAM,CAACqsC,MAAP,CAAcpwC,IAAd,CAAmB,SAAnB,IAAgC,GAA5C;;EACA,QAAIgwC,EAAE,CAACtc,GAAH,CAAOlmB,KAAP,CAAJ,EAAmB;EACjBzJ,MAAAA,MAAM,CAACusC,WAAP,GAAqB,IAArB;EACD;EACF;;EACD,SAAOvsC,MAAP;EACD,CA1BD;;EA2BA,WAAc,GAAGosC,SAAjB;;EC1BA;;EACA,IAAMI,IAAI,GAAG,SAAPA,IAAO,CAAAxsC,MAAM,EAAI;EACrB,MAAIysC,GAAG,GAAG,KAAV;EACA,MAAIpzB,MAAM,GAAG2oB,YAAQ,CAAChiC,MAAD,CAArB;EACA,MAAI0sC,UAAU,GAAG1sC,MAAM,CAACyC,QAAP,CAAgB5C,KAAjC,CAHqB;;;;;;EAUrB,MAAIG,MAAM,CAAC+rC,IAAP,CAAYlc,UAAZ,CAAuB,0BAAvB,EAAmDhwB,KAAvD,EAA8D;EAC5D4sC,IAAAA,GAAG,GAAG,IAAN;EACD;;EAED,MAAI7kC,GAAG,GAAG;EACRxE,IAAAA,SAAS,EAAE,KADH;EAERE,IAAAA,YAAY,EAAE,IAFN;EAGRmR,IAAAA,WAAW,EAAE,SAHL;EAIRvR,IAAAA,UAAU,EAAE,IAJJ;EAKRG,IAAAA,MAAM,EAAE,OALA;EAMRG,IAAAA,KAAK,EAAE,EANC;EAORoR,IAAAA,YAAY,EAAE,MAPN;EAQRC,IAAAA,UAAU,EAAE;EARJ,GAAV,CAdqB;;EAyBrB,MAAI43B,GAAG,KAAK,IAAZ,EAAkB;EAChB7kC,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,IAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,IAAjB;EACD;;EACD,MAAImW,MAAJ,EAAY;EACVzR,IAAAA,GAAG,CAACxE,SAAJ,GAAgB,MAAhB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,GAAmB,KAAnB;EACAsE,IAAAA,GAAG,CAAC1E,UAAJ,GAAiB,KAAjB;EACD;;EACD,MAAIwpC,UAAJ,EAAgB;EACd9kC,IAAAA,GAAG,CAACxE,SAAJ,IAAiB,MAAjB;EACAwE,IAAAA,GAAG,CAACtE,YAAJ,IAAoB,MAApB;EACAsE,IAAAA,GAAG,CAAC6M,WAAJ,GAAkB,aAAlB;EACA7M,IAAAA,GAAG,CAAC1E,UAAJ,IAAkB,MAAlB;EACA0E,IAAAA,GAAG,CAACgN,YAAJ,GAAmB,SAAShN,GAAG,CAACgN,YAAhC;EACAhN,IAAAA,GAAG,CAACiN,UAAJ,GAAiB,SAASjN,GAAG,CAACiN,UAA9B;EACAjN,IAAAA,GAAG,CAACvE,MAAJ,GAAa,SAASuE,GAAG,CAACvE,MAA1B;EACD;;EACD,SAAOuE,GAAP;EACD,CA5CD;;EA6CA,UAAc,GAAG4kC,IAAjB;;EC7CA,IAAMhzB,WAAS,GAAG,SAAZA,SAAY,CAASxZ,MAAT,EAAiB2C,KAAjB,EAAwB;EACxC,MAAIopC,IAAI,GAAG/rC,MAAM,CAAC+rC,IAAlB,CADwC;;EAIxC,MAAIA,IAAI,CAACpc,GAAL,CAAS,SAAT,KAAwBoc,IAAI,CAACY,GAAL,CAAS,QAAT,MAAuB,IAAvB,IAA+B3sC,MAAM,CAACksC,SAAP,CAAiBvc,GAAjB,CAAqB,MAArB,CAA3D,EAA0F;EACxF,WAAO6c,MAAI,CAACxsC,MAAD,AAAA,CAAX;EACD;;EAED,MAAIsS,SAAS,GAAGtS,MAAM,CAAC+rC,IAAP,CAAYvb,QAAZ,CAAqB,CAArB,EAAwBle,SAAxB,EAAhB;EAEA,MAAIs6B,UAAU,GAAGnpC,gBAAY,CAACzD,MAAD,EAAS2C,KAAT,CAA7B;;EACA,MAAI,CAACiqC,UAAL,EAAiB;EACf,WAAO,EAAP;EACD;;EACD,MAAI/yB,KAAK,GAAGlX,KAAK,CAACE,UAAN,CAAiB2W,SAAjB,CAA2BozB,UAA3B,EAAuCjqC,KAAvC,CAAZ;EACAkX,EAAAA,KAAK,CAAC3W,UAAN,GAAmB0pC,UAAnB,CAfwC;;EAkBxC,MAAI5sC,MAAM,CAACssC,QAAP,CAAgBzsC,KAApB,EAA2B;EACzB,QAAIysC,QAAQ,GAAGtsC,MAAM,CAACssC,QAAP,CAAgBrwC,IAAhB,EAAf;EACA,QAAI4wC,KAAK,GAAGv6B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;EACAnU,IAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,aAAK2c,KAAK,CAAC3c,CAAD,CAAL,IAAY2vC,KAAK,GAAGP,QAAzB;EAAA,KAA5B;EACD,GAtBuC;;;EAwBxC,MAAItsC,MAAM,CAACqsC,MAAP,CAAcxsC,KAAlB,EAAyB;EACvB,QAAIwsC,MAAM,GAAGrsC,MAAM,CAACqsC,MAAP,CAAcpwC,IAAd,EAAb;;EACA,QAAI4wC,MAAK,GAAGv6B,SAAS,KAAK,IAAd,GAAqB,GAArB,GAA2B,GAAvC;;EACA,QAAItS,MAAM,CAACusC,WAAP,KAAuB,IAA3B,EAAiC;EAC/BpuC,MAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAK2c,KAAK,CAAC3c,CAAD,CAAL,IAAY2vC,MAAK,GAAGR,MAAzB;EAAA,OAA5B;EACD,KAFD,MAEO;EACLluC,MAAAA,MAAM,CAACC,IAAP,CAAYyb,KAAZ,EAAmBxb,OAAnB,CAA2B,UAAAnB,CAAC;EAAA,eAAK2c,KAAK,CAAC3c,CAAD,CAAL,GAAWmvC,MAAM,GAAGQ,MAAT,GAAiBhzB,KAAK,CAAC3c,CAAD,CAAtC;EAAA,OAA5B;EACD;EACF,GAhCuC;;;EAmCxC,MAAMwvC,UAAU,GAAG1sC,MAAM,CAACyC,QAAP,CAAgB5C,KAAnC;;EACA,MAAI6sC,UAAJ,EAAgB;EACd7yB,IAAAA,KAAK,CAACzW,SAAN,GAAkB,aAAayW,KAAK,CAAC3W,UAArC;EACA2W,IAAAA,KAAK,CAACvW,YAAN,GAAqB,cAAcuW,KAAK,CAAC3W,UAAzC;EACA2W,IAAAA,KAAK,CAACxW,MAAN,GAAe,SAASwW,KAAK,CAACxW,MAA9B;EACD,GAxCuC;;;EA0CxC,MAAI,CAACwW,KAAK,CAACpF,WAAX,EAAwB;EACtB,QAAIi4B,UAAJ,EAAgB;EACd7yB,MAAAA,KAAK,CAACpF,WAAN,GAAoB,cAAcoF,KAAK,CAAC3W,UAAxC;EACD,KAFD,MAEO;EACL2W,MAAAA,KAAK,CAACpF,WAAN,GAAoB,UAAUoF,KAAK,CAAC3W,UAApC;EACD;EACF;;EACD,MAAIwpC,UAAJ,EAAgB;EACd7yB,IAAAA,KAAK,CAAC3W,UAAN,GAAmB,SAAS2W,KAAK,CAAC3W,UAAlC;EACD;;EACD,SAAO2W,KAAP;EACD,CArDD;;EAsDA,iBAAc,GAAGL,WAAjB;;ECpDA,aAAc,GAAG;;EAEfzN,EAAAA,IAAI,EAAE,cAASnI,OAAT,EAAkB;EAAA;;EACtB,QAAIvG,CAAC,GAAG,IAAR;;EACA,QAAI,OAAOuG,OAAP,KAAmB,QAAvB,EAAiC;EAC/BvG,MAAAA,CAAC,GAAGuG,OAAJ;EACAA,MAAAA,OAAO,GAAG,IAAV;EACD;;EACDA,IAAAA,OAAO,GAAGA,OAAO,IAAI;EAAE3H,MAAAA,IAAI,EAAE,IAAR;EAAc+H,MAAAA,MAAM,EAAE,IAAtB;EAA4B/E,MAAAA,IAAI,EAAE,IAAlC;EAAwCkJ,MAAAA,KAAK,EAAE;EAA/C,KAArB;EACA,QAAI2D,GAAG,GAAG,EAAV;EACA,SAAKzN,OAAL,CAAa,UAAAd,CAAC,EAAI;EAChB,UAAIwO,IAAI,GAAGxO,CAAC,CAACwO,IAAF,CAAOnI,OAAP,EAAgB,CAAhB,CAAX;EACA,UAAI5D,MAAM,GAAGosC,OAAS,CAAC7uC,CAAD,CAAtB;EACAwO,MAAAA,IAAI,CAAC8pB,KAAL,GAAa,EAAb;EACA13B,MAAAA,MAAM,CAACC,IAAP,CAAY4B,MAAZ,EAAoB3B,OAApB,CAA4B,UAAAnB,CAAC,EAAI;EAC/B,YAAI8C,MAAM,CAAC9C,CAAD,CAAN,IAAa8C,MAAM,CAAC9C,CAAD,CAAN,CAAUkI,GAAV,KAAkB,KAAnC,EAA0C;EACxC2G,UAAAA,IAAI,CAAC8pB,KAAL,CAAW34B,CAAX,IAAgB8C,MAAM,CAAC9C,CAAD,CAAN,CAAUjB,IAAV,CAAe,QAAf,CAAhB;EACD,SAFD,MAEO;EACL8P,UAAAA,IAAI,CAAC8pB,KAAL,CAAW34B,CAAX,IAAgB8C,MAAM,CAAC9C,CAAD,CAAtB;EACD;EACF,OAND;EAOA6O,MAAAA,IAAI,CAAC2gC,UAAL,GAAkBnvC,CAAC,CAACoyB,GAAF,CAAM,WAAN,CAAlB;EACA5jB,MAAAA,IAAI,CAACqT,YAAL,GAAoB5F,aAAS,CAACxZ,MAAD,EAAS,KAAI,CAAC2C,KAAd,CAA7B;EACAmJ,MAAAA,GAAG,CAACvD,IAAJ,CAASwD,IAAT;EACD,KAdD;;EAeA,QAAI1O,CAAC,KAAK,IAAV,EAAgB;EACd,aAAOyO,GAAG,CAACzO,CAAD,CAAV;EACD;;EACD,WAAOyO,GAAP;EACD,GA7Bc;;;EAgCf8oB,EAAAA,OAAO,EAAE,mBAAW;EAClB,QAAIxqB,IAAI,GAAG,EAAX,CADkB;;EAGlB,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIa,IAAI,GAAGV,OAAS,CAACH,EAAD,CAAT,CAAcI,MAAzB;;EACA,UAAIS,IAAI,CAACjtC,KAAT,EAAgB;EACduK,QAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYmiC,IAAI,CAAC1iC,IAAjB,CAAP;EACD;EACF,KALD,EAHkB;;EAUlB,QAAIhN,CAAC,GAAG,KAAKyyB,UAAL,CAAgB,WAAhB,CAAR;;EACA,QAAIzyB,CAAC,CAACyC,KAAN,EAAa;EACXuK,MAAAA,IAAI,GAAGhN,CAAC,CAACgN,IAAF,CAAOO,MAAP,CAAcP,IAAd,CAAP;EACD,KAbiB;;;EAelBhN,IAAAA,CAAC,GAAG,KAAKwyB,SAAL,CAAe,WAAf,CAAJ;;EACA,QAAIxyB,CAAC,CAACyC,KAAN,EAAa;EACXuK,MAAAA,IAAI,GAAGA,IAAI,CAACO,MAAL,CAAYvN,CAAC,CAACgN,IAAd,CAAP;EACD;;EACD,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GApDc;;;EAsDf43B,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,QAAI53B,IAAI,GAAG,EAAX;EACA,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjK,YAAQ,CAAChiC,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAR,KAAiC,IAArC,EAA2C;EACzCyH,QAAAA,IAAI,CAAC7B,IAAL,CAAU0jC,EAAE,CAAC7hC,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GA/Dc;;;EAiEf63B,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,QAAI73B,IAAI,GAAG,EAAX;EACA,SAAK/L,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjK,YAAQ,CAAChiC,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAR,KAAiC,KAArC,EAA4C;EAC1CyH,QAAAA,IAAI,CAAC7B,IAAL,CAAU0jC,EAAE,CAAC7hC,IAAH,CAAQ,CAAR,CAAV;EACD;EACF,KALD;EAMA,WAAO,KAAK3B,SAAL,CAAe2B,IAAf,CAAP;EACD,GA1Ec;;;EA6EfoP,EAAAA,SAAS,EAAE,qBAAW;EAAA;;EACpB,QAAIhX,MAAM,GAAG,EAAb;EACA,SAAKnE,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIpyB,KAAK,GAAGL,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAArB;;EACAH,MAAAA,MAAM,CAAC+F,IAAP,CAAYsR,KAAZ;EACD,KAJD;EAKA,WAAOrX,MAAP;EACD,GArFc;;;EAuFfuqC,EAAAA,WAAW,EAAE,uBAAW;EAAA;;EACtB,SAAK1uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BS,SAAxC;;EACA,UAAIpH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB,EADO;EAGR;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAjGc;;;EAmGfgxC,EAAAA,cAAc,EAAE,0BAAW;EAAA;;EACzB,SAAK3uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIrkC,GAAG,GAAG4R,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAnB;;EACA,UAAI3G,GAAG,GAAG4L,GAAG,CAACtE,YAAd,CAHiB;;EAKjB,UAAI2oC,EAAE,CAACpc,UAAH,CAAc,0BAAd,EAA0ChwB,KAA9C,EAAqD;EACnD7D,QAAAA,GAAG,GAAG4L,GAAG,CAAC1E,UAAV;EACD;;EACD,UAAIlH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,cAAP;EACD;EACF,KAZD;EAaA,WAAO,IAAP;EACD,GAlHc;;;EAoHfkrC,EAAAA,aAAa,EAAE,yBAAW;EAAA;;EACxB,SAAK5uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8B8R,WAAxC;;EACA,UAAIzY,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,aAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA9Hc;;;EAgIf0B,EAAAA,YAAY,EAAE,wBAAW;EAAA;;EACvB,SAAKpF,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BO,UAAxC;;EACA,UAAIlH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,YAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GA1Ic;;;EA4IfmrC,EAAAA,QAAQ,EAAE,oBAAW;EAAA;;EACnB,SAAK7uC,OAAL,CAAa,UAAA4tC,EAAE,EAAI;EACjB,UAAIjsC,MAAM,GAAGosC,OAAS,CAACH,EAAD,CAAtB;;EACA,UAAIjwC,GAAG,GAAGwd,aAAS,CAACxZ,MAAD,EAAS,MAAI,CAAC2C,KAAd,CAAT,CAA8BU,MAAxC;;EACA,UAAIrH,GAAJ,EAAS;EACPiwC,QAAAA,EAAE,CAACra,WAAH,CAAe51B,GAAf,EAAoB,KAApB;EACAiwC,QAAAA,EAAE,CAAClqC,GAAH,CAAO,QAAP;EACD;EACF,KAPD;EAQA,WAAO,IAAP;EACD,GAtJc;;;EAyJf2qC,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,WAAQ,WAAR,CAAP;EACD,GA3Jc;;;EA6JfS,EAAAA,UAAU,EAAE,sBAAW;EACrB,WAAO,KAAKxG,IAAL,CAAU,WAAV,CAAP;EACD,GA/Jc;;;EAiKfwF,EAAAA,UAAU,EAAE,sBAAW;EAAA;;EACrB,SAAK/hC,IAAL,CAAU/L,OAAV,CAAkB,UAAAd,CAAC,EAAI;EACrB,UAAIgN,GAAG,GAAG,OAAI,CAAC9B,SAAL,CAAe,CAAClL,CAAD,CAAf,CAAV;;EACA,UAAIyC,MAAM,GAAGosC,OAAS,CAAC7hC,GAAD,CAAtB;;EACA4hC,MAAAA,YAAU,CAACnsC,MAAD,EAASuK,GAAG,CAAC5H,KAAb,CAAV;EACD,KAJD;EAKA,WAAO,IAAP;EACD,GAxKc;;;EA0KfyqC,EAAAA,UAAU,EAAE,sBAAW;EACrB,QAAIhwC,CAAC,GAAG,KAAKqM,KAAL,CAAW,cAAX,CAAR;;EACA,QAAIrM,CAAC,CAACyC,KAAN,EAAa;EACXzC,MAAAA,CAAC,CAACy3B,MAAF,CAAS,QAAT;EACD;;EACD,WAAO,KAAKA,MAAL,CAAY,WAAZ,CAAP;EACD;EAhLc,CAAjB;;ECHA,IAAM+S,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExBwF,KAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAEVxF,GAFU;;;EAI9B1pC,EAAAA,MAAM,CAACqH,MAAP,CAAc6nC,KAAK,CAAC7mC,SAApB,EAA+BwB,SAA/B,EAJ8B;;EAO9BqlC,EAAAA,KAAK,CAAC7mC,SAAN,CAAgB8mC,MAAhB,GAAyBD,KAAK,CAAC7mC,SAAN,CAAgB2lC,UAAzC;;EAEAtE,EAAAA,GAAG,CAACrhC,SAAJ,CAAcqR,KAAd,GAAsB,UAASxa,CAAT,EAAY;EAChC,QAAIoM,KAAK,GAAG,KAAKA,KAAL,CAAW,iDAAX,CAAZ,CADgC;;EAGhCA,IAAAA,KAAK,GAAGA,KAAK,CAACimB,GAAN,CAAU,WAAV,CAAR;EACAjmB,IAAAA,KAAK,GAAGA,KAAK,CAACimB,GAAN,CAAU,WAAV,CAAR,CAJgC;;;EAOhC,QAAI7L,IAAI,GAAGpa,KAAK,CAACA,KAAN,CAAY,gCAAZ,CAAX,CAPgC;;EAShC,QAAIrM,CAAC,GAAGqM,KAAK,CAACimB,GAAN,CAAU7L,IAAV,EAAgBiS,UAAhB,CAA2B,WAA3B,CAAR,CATgC;;EAWhC14B,IAAAA,CAAC,GAAGA,CAAC,CAACuN,MAAF,CAASkZ,IAAT,CAAJ;EACAzmB,IAAAA,CAAC,CAAC8H,IAAF,CAAO,OAAP,EAZgC;;;EAgBhC9H,IAAAA,CAAC,GAAGA,CAAC,MAAD,CAAK,OAAL,CAAJ,CAhBgC;;EAmBhC,QAAI,OAAOC,CAAP,KAAa,QAAjB,EAA2B;EACzBD,MAAAA,CAAC,GAAGA,CAAC,CAACiL,GAAF,CAAMhL,CAAN,CAAJ;EACD;;EACD,QAAI4uC,EAAE,GAAG,IAAIoB,KAAJ,CAAUjwC,CAAC,CAACgN,IAAZ,EAAkB,IAAlB,EAAwB,KAAKzH,KAA7B,CAAT;EACA,WAAOspC,EAAP;EACD,GAxBD;;EAyBA,SAAOpE,GAAP;EACD,CAnCD;;EAoCA,SAAc,GAAGD,WAAjB;;ECtCA,IAAMA,WAAS,GAAG,SAAZA,SAAY,CAASC,GAAT,EAAc;;EAAA,MAExB0F,MAFwB;EAAA;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA;;EAAA;EAAA,IAET1F,GAFS;;EAW9BA,EAAAA,GAAG,CAACrhC,SAAJ,CAAcwxB,MAAd,GAAuB,UAAS36B,CAAT,EAAY;EACjC,QAAIoM,KAAK,GAAG,KAAKqsB,UAAL,CAAgB,WAAhB,CAAZ;EACArsB,IAAAA,KAAK,GAAGA,KAAK,CAACA,KAAN,CAAY,UAAZ,CAAR,CAFiC;;EAKjC,QAAI,OAAOpM,CAAP,KAAa,QAAjB,EAA2B;EACzBoM,MAAAA,KAAK,GAAGA,KAAK,CAACpB,GAAN,CAAUhL,CAAV,CAAR;EACD;;EACD,WAAO,IAAIkwC,MAAJ,CAAW9jC,KAAK,CAACW,IAAjB,EAAuB,IAAvB,EAA6B,KAAKzH,KAAlC,CAAP;EACD,GATD;;EAUA,SAAOklC,GAAP;EACD,CAtBD;;EAuBA,UAAc,GAAGD,WAAjB;;ECtBA,IAAM4F,QAAQ,GAAG,CACf/nC,aADe,EAEfC,QAFe,EAGfC,OAHe,EAIfC,YAJe,EAKfC,KALe,EAMfuG,KANe,EAOfghB,WAPe,EAQfsJ,WARe,EASfC,UATe,EAUfC,KAVe,EAWfC,MAXe,CAAjB;;EAcA,IAAM4W,MAAM,GAAG,SAATA,MAAS,CAAS5F,GAAT,EAAc;;EAE3B1pC,EAAAA,MAAM,CAACC,IAAP,CAAYsvC,OAAZ,EAAqBrvC,OAArB,CAA6B,UAAAnB,CAAC;EAAA,WAAK2qC,GAAG,CAACrhC,SAAJ,CAActJ,CAAd,IAAmBwwC,OAAO,CAACxwC,CAAD,CAA/B;EAAA,GAA9B,EAF2B;;EAI3BswC,EAAAA,QAAQ,CAACnvC,OAAT,CAAiB,UAAAsvC,KAAK;EAAA,WAAIA,KAAK,CAAC9F,GAAD,CAAT;EAAA,GAAtB;EACA,SAAOA,GAAP;EACD,CAND;;EAOA,UAAc,GAAG4F,MAAjB;;ECtBA,IAAMzlC,SAAO,GAAG;EACd+P,EAAAA,IAAI,EAAEtS,SADQ;EAEdmoC,EAAAA,UAAU,EAAEloC;EAFE,CAAhB;EAQA;;MACMmiC;;;EACJ,eAAYz9B,IAAZ,EAAkBkkB,IAAlB,EAAwB3rB,KAAxB,EAA+B;EAAA;;EAAA;;EAC7B,SAAKyH,IAAL,GAAYA,IAAZ,CAD6B;;EAG7BjM,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,MAA5B,EAAoC;EAClCC,MAAAA,UAAU,EAAE,KADsB;EAElCE,MAAAA,KAAK,EAAE0d,IAF2B;EAGlC3d,MAAAA,QAAQ,EAAE;EAHwB,KAApC,EAH6B;;EAS7B,QAAIhO,KAAK,KAAKhB,SAAV,IAAuB2sB,IAAI,KAAK3sB,SAApC,EAA+C;EAC7CgB,MAAAA,KAAK,GAAG2rB,IAAI,CAAC3rB,KAAb;EACD,KAX4B;;;EAa7BxE,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCC,MAAAA,UAAU,EAAE,KADuB;EAEnCE,MAAAA,KAAK,EAAEjO,KAF4B;EAGnCgO,MAAAA,QAAQ,EAAE;EAHyB,KAArC,EAb6B;;EAmB7BxS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCC,MAAAA,UAAU,EAAE,KADwB;EAEpCC,MAAAA,QAAQ,EAAE,IAF0B;EAGpCC,MAAAA,KAAK,EAAE;EAH6B,KAAtC,EAnB6B;;EAyB7BzS,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,OAA5B,EAAqC;EACnCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC+B,IAAL,CAAU9N,MAAV,GAAmB,CAAzB;EAAA;EAD8B,KAArC,EAzB6B;;EA6B7B6B,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,QAA5B,EAAsC;EACpCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAI,CAAC+B,IAAL,CAAU9N,MAAhB;EAAA;EAD+B,KAAtC,EA7B6B;;EAiC7B6B,IAAAA,MAAM,CAACsS,cAAP,CAAsB,IAAtB,EAA4B,KAA5B,EAAmC;EACjCpI,MAAAA,GAAG,EAAE;EAAA,eAAM,KAAN;EAAA;EAD4B,KAAnC;EAGD;;;;;;+BAGQ;EACP,aAAOopB,SAAM,CAAC,IAAD,CAAb;EACD;;;;;6BAGM;EACL,UAAI,KAAKrnB,IAAL,CAAU9N,MAAV,GAAmB,CAAvB,EAA0B;EACxB,eAAO,KAAK8N,IAAL,CAAU,CAAV,EAAahC,IAApB;EACD;;EACD,aAAO,KAAK8D,GAAL,GAAW9B,IAAX,CAAgB,CAAhB,EAAmBhC,IAA1B;EACD;;;;;EAGH;;;EACAy/B,GAAG,CAACrhC,SAAJ,CAAciC,SAAd,GAA0B,UAAS2B,IAAT,EAAe;EACvCA,EAAAA,IAAI,GAAGA,IAAI,CAACzB,GAAL,CAAS,UAAApL,CAAC;EAAA,WAAIA,CAAC,CAACwK,KAAF,CAAQ,IAAR,CAAJ;EAAA,GAAV,CAAP,CADuC;;EAGvC,MAAIwC,GAAG,GAAG,IAAIs9B,GAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoB,KAAKzH,KAAzB,CAAV;EACA,SAAO4H,GAAP;EACD,CALD;EAOA;;;EACAs9B,GAAG,CAACrhC,SAAJ,CAAcqM,QAAd,GAAyB,UAAS7W,GAAT,EAAc;EACrC,MAAIoO,IAAI,GAAGkmB,YAAQ,CAACt0B,GAAD,EAAM,KAAK2G,KAAX,EAAkB,KAAKyF,IAAL,EAAlB,CAAnB;EACA,SAAO,KAAKK,SAAL,CAAe2B,IAAf,CAAP;EACD,CAHD;;EAKAjM,MAAM,CAACqH,MAAP,CAAcqiC,GAAG,CAACrhC,SAAlB,EAA6BwB,SAAO,CAAC+P,IAArC;EACA5Z,MAAM,CAACqH,MAAP,CAAcqiC,GAAG,CAACrhC,SAAlB,EAA6BwB,SAAO,CAAC4lC,UAArC;;AAGAH,QAAM,CAAC5F,GAAD,CAAN;;EAGA,IAAM/2B,SAAO,GAAG;EACd+8B,EAAAA,KAAK,EAAE,OADO;EAEdC,EAAAA,GAAG,EAAE,OAFS;EAGdpH,EAAAA,KAAK,EAAE,MAHO;EAIdlG,EAAAA,IAAI,EAAE,IAJQ;EAKduN,EAAAA,MAAM,EAAE;EALM,CAAhB;EAOA5vC,MAAM,CAACC,IAAP,CAAY0S,SAAZ,EAAqBzS,OAArB,CAA6B,UAAAnB,CAAC;EAAA,SAAK2qC,GAAG,CAACrhC,SAAJ,CAActJ,CAAd,IAAmB2qC,GAAG,CAACrhC,SAAJ,CAAcsK,SAAO,CAAC5T,CAAD,CAArB,CAAxB;EAAA,CAA9B;EACA,SAAc,GAAG2qC,GAAjB;;ECxFA,IAAMmG,WAAW,GAAG,SAAdA,WAAc,CAASzjC,GAAT,EAAc;EAChC,MAAIpC,KAAK,GAAGoC,GAAG,CAACimB,QAAJ,EAAZ;EACAyd,EAAAA,UAAW,CAAC9lC,KAAD,EAAQoC,GAAG,CAAC5H,KAAZ,CAAX;EACA,SAAO4H,GAAP;EACD,CAJD;;EAKA,QAAc,GAAGyjC,WAAjB;;ECEA,SAASE,QAAT,CAAkBC,aAAlB,EAAiC;;EAE/B,MAAIxrC,KAAK,GAAGwrC,aAAZ;;;EAGA,MAAMC,GAAG,GAAG,SAANA,GAAM,GAA6B;EAAA,QAApBnyC,IAAoB,uEAAb,EAAa;EAAA,QAATkd,OAAS;;EACvC,QAAIA,OAAJ,EAAa;EACXxW,MAAAA,KAAK,CAAC0rC,QAAN,CAAel1B,OAAf;EACD;;EACD,QAAI/O,IAAI,GAAGkmB,YAAQ,CAACr0B,IAAD,EAAO0G,KAAP,CAAnB;EACA,QAAI4H,GAAG,GAAG,IAAIs9B,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBzH,KAApB,CAAV;EACA4H,IAAAA,GAAG,CAACknB,MAAJ;EACA,WAAOlnB,GAAP;EACD,GARD;;;;EAWA6jC,EAAAA,GAAG,CAAC9d,QAAJ,GAAe,YAA6B;EAAA,QAApBr0B,IAAoB,uEAAb,EAAa;EAAA,QAATkd,OAAS;EAC1C,QAAIrb,CAAC,GAAG6E,KAAR;;EACA,QAAIwW,OAAJ,EAAa;EACXrb,MAAAA,CAAC,GAAGA,CAAC,CAACiK,KAAF,EAAJ;EACAjK,MAAAA,CAAC,CAACyR,KAAF,GAAU,EAAV;EACAzR,MAAAA,CAAC,CAACuwC,QAAF,CAAWl1B,OAAX;EACD;;EACD,QAAI/O,IAAI,GAAGkmB,YAAQ,CAACr0B,IAAD,EAAO6B,CAAP,CAAnB;EACA,QAAIyM,GAAG,GAAG,IAAIs9B,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBtM,CAApB,CAAV;;EACA,QAAIqb,OAAJ,EAAa;EACXm1B,MAAAA,IAAU,CAAC/jC,GAAD,CAAV;EACD;;EACD,WAAOA,GAAP;EACD,GAbD;;;;EAgBA6jC,EAAAA,GAAG,CAACX,MAAJ,GAAa,UAAS5f,EAAT,EAAa;EACxBA,IAAAA,EAAE,CAACga,KAAD,EAAMllC,KAAN,EAAa,IAAb,EAAmB6N,QAAnB,EAA2B9I,MAA3B,EAAiCqJ,MAAjC,CAAF;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMAq9B,EAAAA,GAAG,CAACp7B,QAAJ,GAAe,UAASjH,IAAT,EAAe;EAC5B,QAAI3B,IAAI,GAAG4I,UAAQ,CAACjH,IAAD,EAAOpJ,KAAP,CAAnB;EACA,WAAO,IAAIklC,KAAJ,CAAQz9B,IAAR,EAAc,IAAd,EAAoBzH,KAApB,CAAP;EACD,GAHD;;;;EAMAyrC,EAAAA,GAAG,CAACrmC,KAAJ,GAAY,YAAW;EACrB,WAAOmmC,QAAQ,CAACvrC,KAAK,CAACoF,KAAN,EAAD,CAAf;EACD,GAFD;;;;EAKAqmC,EAAAA,GAAG,CAACG,OAAJ,GAAc,YAAsB;EAAA,QAAb7gB,IAAa,uEAAN,IAAM;EAClC/qB,IAAAA,KAAK,CAAC4rC,OAAN,CAAc7gB,IAAd;EACA,WAAO,IAAP;EACD,GAHD;;;;EAMA0gB,EAAAA,GAAG,CAACI,OAAJ,GAAcA,QAAd,CAvD+B;;EAyD/BJ,EAAAA,GAAG,UAAH,GAAaA,GAAG,CAACK,IAAjB;EAEA,SAAOL,GAAP;EACD;;EAED,OAAc,GAAGF,QAAQ,CAAC,IAAI7gB,OAAJ,EAAD,CAAzB;;;;;;;;"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index b86d706e6..18ea5f89d 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},J=Object.assign({},x,C,V,I,_);function q(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();re.prototype.clone=function(){var e=new re(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(re.prototype,J),Object.assign(re.prototype,te);var ne=re,ae={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ie(i)),!0===e.trim&&(i=i.trim()),i}},se={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},ue=/[.?!]\s*$/,le=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,ue.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ce=function(e,t,r){var n=e.terms(),a=t.terms();le(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},he=/ /,de=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===he.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},pe=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},ge={append:function(e,t){return ce(this,e,t),this},prepend:function(e,t){return de(this,e,t),this},delete:function(e){return pe(this,e),this},replace:function(e,t){var r=this.length;ce(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,pe(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},fe={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},me={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ve=Object.assign({},ae,oe,se,ge,fe,me),be=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ye=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=we(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(ke(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},$e=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ge=/\{([0-9]+,?[0-9]*)\}/,Pe=/&&/,Fe=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},De=function(e){return e[0]},je=function(e){return e.substr(1)},xe=function(e){return e.substr(0,e.length-1)},Ce=function(e){return e=je(e),e=xe(e)},Ee=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=xe(t)),"^"===De(t)&&(n.start=!0,t=je(t)),("["===De(t)||"]"===Be(t))&&(n.named=!0,"["===De(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===De(t))){var i=Fe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=xe(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=xe(t)),"?"===Be(t)&&(n.optional=!0,t=xe(t)),"!"===De(t)&&(n.negative=!0,t=je(t)),"("===De(t)&&")"===Be(t)){Pe.test(t)?(n.choices=t.split(Pe),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=je(n.choices[0]);var o=n.choices.length-1;n.choices[o]=xe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===De(t)&&"/"===Be(t))return t=Ce(t),n.regex=new RegExp(t),n;if("~"===De(t)&&"~"===Be(t))return t=Ce(t),n.soft=!0,n.word=t,n}return!0===Ge.test(t)&&(t=t.replace(Ge,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===De(t)?(n.tag=je(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===De(t)?(n.method=je(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ne=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ee),r=Ne(r)},Te=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Oe(t)),!0===be(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),$e(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ae(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return $e(a,t,i)}return $e(a,t,i)},Ve=function(e,t){var r={};Te(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},ze={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Te(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Te(this,e,!0).length>0},not:function(e){var t=this,r=Ve(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},He=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};He.prototype.buildFrom=function(e,t,r){var n=new He(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(He.prototype,ze),Object.assign(He.prototype,ve);var Ie={term:"terms"};Object.keys(Ie).forEach((function(e){return He.prototype[e]=He.prototype[Ie[e]]}));var Me=He,Se=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Se.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Se(t)};for(var Le=Se,_e=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,qe=/\S/,We=/[ .][A-Z]\.? *$/i,Ke=/(?:\u2026|\.{2,}) *$/,Re=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ue=/^\s+/,Ze=function(e,t){if(!0===We.test(e))return!1;if(!0===Ke.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Xe=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===qe.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Re),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Xe(e,t);n=n.map((function(e){return ot(e)})),r=r||new Le;var a=n.map((function(e){e=e.map((function(e){var t=new ne(e);return r.add(t),t})),_e(e);var t=new Me(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},ut=function(e,t){var r=new Le;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ne(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return _e(a),new Me(a[0].id,a.length,r)}))},lt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ct=["Person","Place","Organization"],ht={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ct},Actor:{isA:"Noun",notA:ct},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ct},Demonym:{isA:["Noun","ProperNoun"],notA:ct},Possessive:{isA:"Noun"}},dt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},gt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ft={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:gt},Conjunction:{notA:gt},Preposition:{notA:gt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},mt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},vt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:mt[t]?e[t].color=mt[t]:e[t].isA.some((function(r){return!!mt[r]&&(e[t].color=mt[r],!0)}))})),e},bt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Bt=function(e,t,r){var n=Ft(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===St.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Ut={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Zt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Yt=[/ary$/,/ous$/],er={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},tr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],rr={toSuperlative:function(e){if(Ut.hasOwnProperty(e))return Ut[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=or(e);return null!==n?n:ir.test(e)?e+"es":e+"s"},ur=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],lr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Gr={tag:function(e,t){return e?($r(e,this,!1,t),this):this},tagSafe:function(e,t){return e?($r(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Pr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Fr=function(e){return e.split(/[ -]/g)},Br=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Fr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=xr(o)),i=st(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Er=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Tr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),zr=(Vr.json,Vr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Mr.alphabetical=Mr.alpha,Mr.wordcount=Mr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Lr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Sr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===sn.test(i)){var s=i.replace(sn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},cn=/[\'‘’‛‵′`´]$/,hn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],dn=/^[IVXLCDM]{2,}$/,pn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,gn="Adjective",fn="Infinitive",mn="PresentTense",vn="Singular",bn="PastTense",yn="Expression",wn="LastName",kn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,wn],[/.[^aeiou]ica$/,vn],[/^([hyj]a)+$/,yn]],c:[[/.[^aeiou]ic$/,gn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,bn],[/.[aeo]{2}[bdgmnprvz]ed$/,bn],[/.[aeiou][sg]hed$/,bn],[/.[aeiou]red$/,bn],[/.[aeiou]r?ried$/,bn],[/.[bcdgtr]led$/,bn],[/.[aoui]f?led$/,bn],[/.[iao]sed$/,bn],[/[aeiou]n?[cs]ed$/,bn],[/[aeiou][rl]?[mnf]ed$/,bn],[/[aeiou][ns]?c?ked$/,bn],[/[aeiou][nl]?ged$/,bn],[/.[tdbwxz]ed$/,bn],[/[^aeiou][aeiou][tvx]ed$/,bn],[/.[cdlmnprstv]ied$/,bn],[/[^aeiou]ard$/,vn],[/[aeiou][^aeiou]id$/,gn],[/.[vrl]id$/,gn]],e:[[/.[lnr]ize$/,fn],[/.[^aeiou]ise$/,fn],[/.[aeiou]te$/,fn],[/.[^aeiou][ai]ble$/,gn],[/.[^aeiou]eable$/,gn],[/.[ts]ive$/,gn]],h:[[/.[^aeiouf]ish$/,gn],[/.v[iy]ch$/,wn],[/^ug?h+$/,yn],[/^uh[ -]?oh$/,yn]],i:[[/.[oau][wvl]ski$/,wn]],k:[[/^(k)+$/,yn]],l:[[/.[gl]ial$/,gn],[/.[^aeiou]ful$/,gn],[/.[nrtumcd]al$/,gn],[/.[^aeiou][ei]al$/,gn]],m:[[/.[^aeiou]ium$/,vn],[/[^aeiou]ism$/,vn],[/^h*u*m+$/,yn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,gn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,yn],[/^(yo)+$/,yn],[/^woo+[pt]?$/,yn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,vn],[/[^i]fer$/,fn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,gn],[/[aeiou].*ist$/,gn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,mn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,vn],[/.[aeiou]sks$/,mn],[/.[aeiou]kes$/,mn],[/[aeiou][^aeiou]is$/,vn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,yn]],v:[[/.[^aeiou][ai][kln]ov$/,wn]],y:[[/.[cts]hy$/,gn],[/.[st]ty$/,gn],[/.[gk]y$/,gn],[/.[tnl]ary$/,gn],[/.[oe]ry$/,vn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,gn],[/.(gg|bb|zz)ly$/,gn],[/.[aeiou]my$/,gn],[/[ea]{2}zy$/,gn],[/.[^aeiou]ity$/,vn]]},An="Adjective",$n="Infinitive",Gn="PresentTense",Pn="Singular",Fn="PastTense",Bn="Adverb",Dn="Plural",jn="Verb",xn="LastName",Cn=[null,null,{ea:Pn,ia:"Noun",ic:An,ly:Bn,"'n":jn,"'t":jn},{oed:Fn,ued:Fn,xed:Fn," so":Bn,"'ll":"Modal","'re":"Copula",azy:An,end:jn,ped:Fn,ffy:An,ify:$n,ing:"Gerund",ize:$n,lar:An,mum:An,nes:Gn,nny:An,oid:An,ous:An,que:An,rmy:An,rol:Pn,sis:Pn,zes:Gn},{amed:Fn,aped:Fn,ched:Fn,lked:Fn,nded:Fn,cted:Fn,dged:Fn,akis:xn,cede:$n,chuk:xn,czyk:xn,ects:Gn,ends:jn,enko:xn,ette:Pn,fies:Gn,fore:Bn,gate:$n,gone:An,ices:Dn,ints:Dn,ions:Dn,less:Bn,llen:An,made:An,nsen:xn,oses:Gn,ould:"Modal",some:An,sson:xn,tage:$n,teen:"Value",tion:Pn,tive:An,tors:"Noun",vice:Pn},{tized:Fn,urned:Fn,eased:Fn,ances:Dn,bound:An,ettes:Dn,fully:Bn,ishes:Gn,ities:Dn,marek:xn,nssen:xn,ology:"Noun",ports:Dn,rough:An,tches:Gn,tieth:"Ordinal",tures:Dn,wards:Bn,where:Bn},{auskas:xn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:xn,sdottir:xn}],En={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}},regex:function(e,t){for(var r=e.text,n=0;n=2&&dn.test(r)&&pn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Cn[i.length].hasOwnProperty(i)){var o=Cn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===kn.hasOwnProperty(n))for(var a=kn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Nn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),En.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Tn=function(e,t){var r=e.world;On.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Wn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Kn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Rn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Qn=[/i$/,/ae$/],Un=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Kn.find((function(t){return e.tags[t]})))return;if(Wn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Wn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Rn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Qn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Zn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Xn=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Yn=/^[A-Z]('s|,)?$/,ea=/([A-Z]\.){2}[A-Z]?/i,ta={I:!0,A:!0},ra={neighbours:In,case:Ln,stem:qn,plural:Un,organizations:function(e,t){for(var r=0;r0?La=La.concat(t):La.push(e)})),La.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Da(r),words:Da(n)}),e}));var _a=La,Ja=function(e){_a.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Da(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Za=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Wa(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Di.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Di(e,this,this.world)},Di.prototype.fromText=function(e){var t=st(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Di.prototype,Bi.misc),Object.assign(Di.prototype,Bi.selections),Fi(Di);var ji={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(ji).forEach((function(e){return Di.prototype[e]=Di.prototype[ji[e]]}));var xi=Di,Ci=function(e){var t=e.termList();return ln(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=st(e,r),a=new xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=st(e,n),i=new xi(a,null,n);return t&&Ci(i),i},n.extend=function(e){return e(xi,r,this,Me,ne,Le),this},n.fromJSON=function(e){var t=ut(e,r);return new xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.version="13.1.0",n.import=n.load,n}(new br)})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},J=Object.assign({},x,C,V,I,_);function q(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();re.prototype.clone=function(){var e=new re(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(re.prototype,J),Object.assign(re.prototype,te);var ne=re,ae={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ie(i)),!0===e.trim&&(i=i.trim()),i}},se={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},ue=/[.?!]\s*$/,le=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,ue.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ce=function(e,t,r){var n=e.terms(),a=t.terms();le(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},he=/ /,de=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===he.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},pe=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},ge={append:function(e,t){return ce(this,e,t),this},prepend:function(e,t){return de(this,e,t),this},delete:function(e){return pe(this,e),this},replace:function(e,t){var r=this.length;ce(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,pe(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},fe={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},me={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ve=Object.assign({},ae,oe,se,ge,fe,me),be=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ye=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=we(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(ke(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},$e=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ge=/\{([0-9]+,?[0-9]*)\}/,Pe=/&&/,Fe=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},De=function(e){return e[0]},je=function(e){return e.substr(1)},xe=function(e){return e.substr(0,e.length-1)},Ce=function(e){return e=je(e),e=xe(e)},Ee=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=xe(t)),"^"===De(t)&&(n.start=!0,t=je(t)),("["===De(t)||"]"===Be(t))&&(n.named=!0,"["===De(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===De(t))){var i=Fe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=xe(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=xe(t)),"?"===Be(t)&&(n.optional=!0,t=xe(t)),"!"===De(t)&&(n.negative=!0,t=je(t)),"("===De(t)&&")"===Be(t)){Pe.test(t)?(n.choices=t.split(Pe),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=je(n.choices[0]);var o=n.choices.length-1;n.choices[o]=xe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===De(t)&&"/"===Be(t))return t=Ce(t),n.regex=new RegExp(t),n;if("~"===De(t)&&"~"===Be(t))return t=Ce(t),n.soft=!0,n.word=t,n}return!0===Ge.test(t)&&(t=t.replace(Ge,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===De(t)?(n.tag=je(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===De(t)?(n.method=je(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ne=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ee),r=Ne(r)},Te=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Oe(t)),!0===be(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),$e(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ae(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return $e(a,t,i)}return $e(a,t,i)},Ve=function(e,t){var r={};Te(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},ze={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Te(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Te(this,e,!0).length>0},not:function(e){var t=this,r=Ve(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},He=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};He.prototype.buildFrom=function(e,t,r){var n=new He(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(He.prototype,ze),Object.assign(He.prototype,ve);var Ie={term:"terms"};Object.keys(Ie).forEach((function(e){return He.prototype[e]=He.prototype[Ie[e]]}));var Me=He,Se=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Se.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Se(t)};for(var Le=Se,_e=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,qe=/\S/,We=/[ .][A-Z]\.? *$/i,Ke=/(?:\u2026|\.{2,}) *$/,Re=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ue=/^\s+/,Ze=function(e,t){if(!0===We.test(e))return!1;if(!0===Ke.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Xe=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===qe.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Re),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Xe(e,t);n=n.map((function(e){return ot(e)})),r=r||new Le;var a=n.map((function(e){e=e.map((function(e){var t=new ne(e);return r.add(t),t})),_e(e);var t=new Me(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},ut=function(e,t){var r=new Le;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ne(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return _e(a),new Me(a[0].id,a.length,r)}))},lt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ct=["Person","Place","Organization"],ht={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ct},Actor:{isA:"Noun",notA:ct},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ct},Demonym:{isA:["Noun","ProperNoun"],notA:ct},Possessive:{isA:"Noun"}},dt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},gt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ft={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:gt},Conjunction:{notA:gt},Preposition:{notA:gt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},mt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},vt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:mt[t]?e[t].color=mt[t]:e[t].isA.some((function(r){return!!mt[r]&&(e[t].color=mt[r],!0)}))})),e},bt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Bt=function(e,t,r){var n=Ft(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===St.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Ut={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Zt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Yt=[/ary$/,/ous$/],er={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},tr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],rr={toSuperlative:function(e){if(Ut.hasOwnProperty(e))return Ut[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=or(e);return null!==n?n:ir.test(e)?e+"es":e+"s"},ur=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],lr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Gr={tag:function(e,t){return e?($r(e,this,!1,t),this):this},tagSafe:function(e,t){return e?($r(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Pr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Fr=function(e){return e.split(/[ -]/g)},Br=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Fr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=xr(o)),i=st(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Er=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Tr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),zr=(Vr.json,Vr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Mr.alphabetical=Mr.alpha,Mr.wordcount=Mr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Lr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Sr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===sn.test(i)){var s=i.replace(sn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},cn=/[\'‘’‛‵′`´]$/,hn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],dn=/^[IVXLCDM]{2,}$/,pn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,gn="Adjective",fn="Infinitive",mn="PresentTense",vn="Singular",bn="PastTense",yn="Expression",wn="LastName",kn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,wn],[/.[^aeiou]ica$/,vn],[/^([hyj]a)+$/,yn]],c:[[/.[^aeiou]ic$/,gn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,bn],[/.[aeo]{2}[bdgmnprvz]ed$/,bn],[/.[aeiou][sg]hed$/,bn],[/.[aeiou]red$/,bn],[/.[aeiou]r?ried$/,bn],[/.[bcdgtr]led$/,bn],[/.[aoui]f?led$/,bn],[/.[iao]sed$/,bn],[/[aeiou]n?[cs]ed$/,bn],[/[aeiou][rl]?[mnf]ed$/,bn],[/[aeiou][ns]?c?ked$/,bn],[/[aeiou][nl]?ged$/,bn],[/.[tdbwxz]ed$/,bn],[/[^aeiou][aeiou][tvx]ed$/,bn],[/.[cdlmnprstv]ied$/,bn],[/[^aeiou]ard$/,vn],[/[aeiou][^aeiou]id$/,gn],[/.[vrl]id$/,gn]],e:[[/.[lnr]ize$/,fn],[/.[^aeiou]ise$/,fn],[/.[aeiou]te$/,fn],[/.[^aeiou][ai]ble$/,gn],[/.[^aeiou]eable$/,gn],[/.[ts]ive$/,gn]],h:[[/.[^aeiouf]ish$/,gn],[/.v[iy]ch$/,wn],[/^ug?h+$/,yn],[/^uh[ -]?oh$/,yn]],i:[[/.[oau][wvl]ski$/,wn]],k:[[/^(k)+$/,yn]],l:[[/.[gl]ial$/,gn],[/.[^aeiou]ful$/,gn],[/.[nrtumcd]al$/,gn],[/.[^aeiou][ei]al$/,gn]],m:[[/.[^aeiou]ium$/,vn],[/[^aeiou]ism$/,vn],[/^h*u*m+$/,yn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,gn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,yn],[/^(yo)+$/,yn],[/^woo+[pt]?$/,yn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,vn],[/[^i]fer$/,fn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,gn],[/[aeiou].*ist$/,gn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,mn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,vn],[/.[aeiou]sks$/,mn],[/.[aeiou]kes$/,mn],[/[aeiou][^aeiou]is$/,vn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,yn]],v:[[/.[^aeiou][ai][kln]ov$/,wn]],y:[[/.[cts]hy$/,gn],[/.[st]ty$/,gn],[/.[gk]y$/,gn],[/.[tnl]ary$/,gn],[/.[oe]ry$/,vn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,gn],[/.(gg|bb|zz)ly$/,gn],[/.[aeiou]my$/,gn],[/[ea]{2}zy$/,gn],[/.[^aeiou]ity$/,vn]]},An="Adjective",$n="Infinitive",Gn="PresentTense",Pn="Singular",Fn="PastTense",Bn="Adverb",Dn="Plural",jn="Verb",xn="LastName",Cn=[null,null,{ea:Pn,ia:"Noun",ic:An,ly:Bn,"'n":jn,"'t":jn},{oed:Fn,ued:Fn,xed:Fn," so":Bn,"'ll":"Modal","'re":"Copula",azy:An,end:jn,ped:Fn,ffy:An,ify:$n,ing:"Gerund",ize:$n,lar:An,mum:An,nes:Gn,nny:An,oid:An,ous:An,que:An,rmy:An,rol:Pn,sis:Pn,zes:Gn},{amed:Fn,aped:Fn,ched:Fn,lked:Fn,nded:Fn,cted:Fn,dged:Fn,akis:xn,cede:$n,chuk:xn,czyk:xn,ects:Gn,ends:jn,enko:xn,ette:Pn,fies:Gn,fore:Bn,gate:$n,gone:An,ices:Dn,ints:Dn,ions:Dn,less:Bn,llen:An,made:An,nsen:xn,oses:Gn,ould:"Modal",some:An,sson:xn,tage:$n,teen:"Value",tion:Pn,tive:An,tors:"Noun",vice:Pn},{tized:Fn,urned:Fn,eased:Fn,ances:Dn,bound:An,ettes:Dn,fully:Bn,ishes:Gn,ities:Dn,marek:xn,nssen:xn,ology:"Noun",ports:Dn,rough:An,tches:Gn,tieth:"Ordinal",tures:Dn,wards:Bn,where:Bn},{auskas:xn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:xn,sdottir:xn}],En={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}},regex:function(e,t){for(var r=e.text,n=0;n=2&&dn.test(r)&&pn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Cn[i.length].hasOwnProperty(i)){var o=Cn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===kn.hasOwnProperty(n))for(var a=kn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Nn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),En.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Tn=function(e,t){var r=e.world;On.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Wn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Kn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Rn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Qn=[/i$/,/ae$/],Un=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Kn.find((function(t){return e.tags[t]})))return;if(Wn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Wn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Rn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Qn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Zn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Xn=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Yn=/^[A-Z]('s|,)?$/,ea=/([A-Z]\.){2}[A-Z]?/i,ta={I:!0,A:!0},ra={neighbours:In,case:Ln,stem:qn,plural:Un,organizations:function(e,t){for(var r=0;r0?La=La.concat(t):La.push(e)})),La.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Da(r),words:Da(n)}),e}));var _a=La,Ja=function(e){_a.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Da(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Za=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Wa(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Di.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Di(e,this,this.world)},Di.prototype.fromText=function(e){var t=st(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Di.prototype,Bi.misc),Object.assign(Di.prototype,Bi.selections),Fi(Di);var ji={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(ji).forEach((function(e){return Di.prototype[e]=Di.prototype[ji[e]]}));var xi=Di,Ci=function(e){var t=e.termList();return ln(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=st(e,r),a=new xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=st(e,n),i=new xi(a,null,n);return t&&Ci(i),i},n.extend=function(e){return e(xi,r,this,Me,ne,Le),this},n.fromJSON=function(e){var t=ut(e,r);return new xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.version="13.1.1",n.import=n.load,n}(new br)})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index 86d84fb56..ffef74236 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -1,4 +1,4 @@ -/* compromise 13.1.0 MIT */ +/* compromise 13.1.1 MIT */ function _typeof(obj) { "@babel/helpers - typeof"; @@ -3366,7 +3366,7 @@ var fromJSON = function fromJSON(json, world) { var fromJSON_1 = fromJSON; -var _version = '13.1.0'; +var _version = '13.1.1'; var _data = { "Comparative": "true¦better", diff --git a/package.json b/package.json index 68c6c80ea..08c0fa3a9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Spencer Kelly (http://spencermounta.in)", "name": "compromise", "description": "modest natural language processing", - "version": "13.1.0", + "version": "13.1.1", "main": "./builds/compromise.js", "unpkg": "./builds/compromise.min.js", "module": "./builds/compromise.mjs", diff --git a/src/_version.js b/src/_version.js index b8ac2ae5f..ebf8ad1b1 100644 --- a/src/_version.js +++ b/src/_version.js @@ -1 +1 @@ -module.exports = '13.1.0' \ No newline at end of file +module.exports = '13.1.1' \ No newline at end of file From db28863c9985b11b2481ac90aabdebbf71e228ee Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 10:09:54 -0500 Subject: [PATCH 02/24] move compromise-redact to ./plugins --- README.md | 2 +- changelog.md | 3 + plugins/numbers/src/index.js | 10 +++ .../numbers/tests}/money.test.js | 0 plugins/redact/README.md | 68 ++++++++++++++++ plugins/redact/builds/compromise-redact.js | 80 +++++++++++++++++++ .../redact/builds/compromise-redact.js.map | 1 + .../redact/builds/compromise-redact.min.js | 1 + plugins/redact/builds/compromise-redact.mjs | 71 ++++++++++++++++ plugins/redact/package.json | 53 ++++++++++++ plugins/redact/src/index.js | 21 +++++ plugins/redact/src/redact.js | 44 ++++++++++ plugins/redact/tests/_lib.js | 16 ++++ plugins/redact/tests/misc.test.js | 10 +++ scratch.js | 19 ++--- src/Subset/_simple.js | 2 +- tests/fuzz.test.js | 4 + 17 files changed, 390 insertions(+), 15 deletions(-) rename {tests => plugins/numbers/tests}/money.test.js (100%) create mode 100644 plugins/redact/README.md create mode 100644 plugins/redact/builds/compromise-redact.js create mode 100644 plugins/redact/builds/compromise-redact.js.map create mode 100644 plugins/redact/builds/compromise-redact.min.js create mode 100644 plugins/redact/builds/compromise-redact.mjs create mode 100644 plugins/redact/package.json create mode 100644 plugins/redact/src/index.js create mode 100644 plugins/redact/src/redact.js create mode 100644 plugins/redact/tests/_lib.js create mode 100644 plugins/redact/tests/misc.test.js diff --git a/README.md b/README.md index e4d108fe9..3f0dfc170 100644 --- a/README.md +++ b/README.md @@ -446,7 +446,6 @@ _(all match methods use the [match-syntax](https://docs.compromise.cool/compromi - **[.clauses()](https://observablehq.com/@spencermountain/compromise-selections)** - split-up sentences into multi-term phrases - **[.hyphenated()](https://observablehq.com/@spencermountain/compromise-selections)** - all terms connected with a hyphen or dash like `'wash-out'` - **[.phoneNumbers()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'(939) 555-0113'` -- **[.money()](https://observablehq.com/@spencermountain/compromise-values)** - things like `'$2.50'` - **[.hashTags()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'#nlp'` - **[.emails()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `'hi@compromise.cool'` - **[.emoticons()](https://observablehq.com/@spencermountain/compromise-selections)** - things like `:)` @@ -555,6 +554,7 @@ These are some helpful extensions: - **[.numbers().isOrdinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only ordinal numbers - **[.numbers().isCardinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only cardinal numbers - **[.numbers().toLocaleString()](https://observablehq.com/@spencermountain/compromise-values)** - add commas, or nicer formatting for numbers +- **[.money()](https://observablehq.com/@spencermountain/compromise-values)** - things like `'$2.50'` ##### Export diff --git a/changelog.md b/changelog.md index 271fcac6e..411e66e00 100644 --- a/changelog.md +++ b/changelog.md @@ -8,6 +8,9 @@ compromise uses semver, and pushes to npm frequently While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. +#### [unreleased] +- deprecate `.money()` and favour overloaded method in compromise-numbers plugin + #### 13.1.1 - fix `verbs.json()` runtime-error diff --git a/plugins/numbers/src/index.js b/plugins/numbers/src/index.js index 5b2a3ba85..2144a1a95 100644 --- a/plugins/numbers/src/index.js +++ b/plugins/numbers/src/index.js @@ -23,6 +23,16 @@ const addMethod = function(Doc, world) { } // alias for reverse-compatibility Doc.prototype.values = Doc.prototype.numbers + + /** money + currency pair */ + Doc.prototype.money = function(n) { + let m = this.match('#Money #Currency?') + if (typeof n === 'number') { + m = m.get(n) + } + return m + } + return Doc } module.exports = addMethod diff --git a/tests/money.test.js b/plugins/numbers/tests/money.test.js similarity index 100% rename from tests/money.test.js rename to plugins/numbers/tests/money.test.js diff --git a/plugins/redact/README.md b/plugins/redact/README.md new file mode 100644 index 000000000..432c783b9 --- /dev/null +++ b/plugins/redact/README.md @@ -0,0 +1,68 @@ +
+ + +
a plugin for compromise
+ + + + + + + + + + +
+
+ +
+ npm install compromise-redact +
+ +a work-in-progress text anonymization plugin. + +**This is not a very secure way to anonymize text.** Please don't use this library for any serious, or unsupervised data anonymization. +It is intended as a tool for low-risk text anonymization, or along-side a human proof-reader. + +```js +const nlp = require('compromise') +nlp.extend(require('compromise-dates')) +nlp.extend(require('compromise-redact')) + +// create a document +let doc = nlp('i gave John Smith 900£ in December.') + +// add options for our redaction +let m = doc.redact({ + dates: '▇', + organizations: '*', + places: false, // false means don't redact + // accept a function for custom redactions + money: val => { + let num = val.toNumber() + // +/- 50 + return num + Math.random() * 100 - 50 + }, + // custom + people: person => { + if (person.has('Smith')) { + return 'Mr. T' + } + return person + }, +}) +m.debug() +``` + +### Considerations + +compromise-redact requires [compromise-dates](https://observablehq.com/@spencermountain/compromise-dates) to be installed, if you need dates to be redacted. +and [compromise-numbers](https://observablehq.com/@spencermountain/compromise-values) if you want `money` and `numbers` redacted. + +if you change the name of a person, their gender may leak by subsequent pronouns. + +### See also + +- [virustotalop/AnonymizingText](https://github.com/virustotalop/AnonymizingText) + +MIT diff --git a/plugins/redact/builds/compromise-redact.js b/plugins/redact/builds/compromise-redact.js new file mode 100644 index 000000000..18561917c --- /dev/null +++ b/plugins/redact/builds/compromise-redact.js @@ -0,0 +1,80 @@ +/* compromise-redact 0.0.1 MIT */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.compromiseRedact = factory()); +}(this, (function () { 'use strict'; + + var randChar = function randChar(_char) { + var len = Math.random() * 10; + len = Math.ceil(len); + var str = ''; + + for (var i = 0; i < len; i++) { + str += _char; + } + + return str; + }; + + var doProp = function doProp(doc, prop, options, tag) { + // not false + if (options[prop]) { + var m = doc[prop](); // replace with custom char of random length + + if (typeof options[prop] === 'string') { + if (options[prop].length === 1) { + m.replaceWith(randChar(options[prop])); + } else { + m.replaceWith(options[prop]); + } + } // support a custom function + else if (typeof options[prop] === 'function') { + var fn = options[prop]; + m.replaceWith(fn(m)); + } // optionally, tag the replacement + + + if (tag) { + m.tag(tag, 'redact-' + prop); + } + } + }; + + var redact = function redact(doc, options) { + doProp(doc, 'dates', options, 'Date'); + doProp(doc, 'numbers', options, 'Value'); + doProp(doc, 'money', options, 'Money'); + doProp(doc, 'people', options, 'Person'); + doProp(doc, 'places', options, 'Place'); + doProp(doc, 'organizations', options, 'Organization'); + return doc; + }; + + var redact_1 = redact; + + var defaults = { + dates: '▇', + numbers: false, + money: '▇', + people: '▇', + places: '▇', + organizations: '▇' + }; + + var addMethod = function addMethod(Doc) { + /** remove or obfuscate certain parts of the text */ + Doc.prototype.redact = function (options) { + options = Object.assign({}, defaults, options); + return redact_1(this, options); + }; + + return Doc; + }; + + var src = addMethod; + + return src; + +}))); +//# sourceMappingURL=compromise-redact.js.map diff --git a/plugins/redact/builds/compromise-redact.js.map b/plugins/redact/builds/compromise-redact.js.map new file mode 100644 index 000000000..7e9a96193 --- /dev/null +++ b/plugins/redact/builds/compromise-redact.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compromise-redact.js","sources":["../src/redact.js","../src/index.js"],"sourcesContent":["const randChar = function(char) {\n let len = Math.random() * 10\n len = Math.ceil(len)\n let str = ''\n for (let i = 0; i < len; i++) {\n str += char\n }\n return str\n}\n\nconst doProp = function(doc, prop, options, tag) {\n // not false\n if (options[prop]) {\n let m = doc[prop]()\n // replace with custom char of random length\n if (typeof options[prop] === 'string') {\n if (options[prop].length === 1) {\n m.replaceWith(randChar(options[prop]))\n } else {\n m.replaceWith(options[prop])\n }\n }\n // support a custom function\n else if (typeof options[prop] === 'function') {\n let fn = options[prop]\n m.replaceWith(fn(m))\n }\n // optionally, tag the replacement\n if (tag) {\n m.tag(tag, 'redact-' + prop)\n }\n }\n}\n\nconst redact = function(doc, options) {\n doProp(doc, 'dates', options, 'Date')\n doProp(doc, 'numbers', options, 'Value')\n doProp(doc, 'money', options, 'Money')\n doProp(doc, 'people', options, 'Person')\n doProp(doc, 'places', options, 'Place')\n doProp(doc, 'organizations', options, 'Organization')\n return doc\n}\nmodule.exports = redact\n","const redact = require('./redact')\n\nconst defaults = {\n dates: '▇',\n numbers: false,\n money: '▇',\n people: '▇',\n places: '▇',\n organizations: '▇',\n}\n\nconst addMethod = function(Doc) {\n /** remove or obfuscate certain parts of the text */\n Doc.prototype.redact = function(options) {\n options = Object.assign({}, defaults, options)\n return redact(this, options)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n"],"names":["randChar","char","len","Math","random","ceil","str","i","doProp","doc","prop","options","tag","m","length","replaceWith","fn","redact","defaults","dates","numbers","money","people","places","organizations","addMethod","Doc","prototype","Object","assign"],"mappings":"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"} \ No newline at end of file diff --git a/plugins/redact/builds/compromise-redact.min.js b/plugins/redact/builds/compromise-redact.min.js new file mode 100644 index 000000000..0d29c37c4 --- /dev/null +++ b/plugins/redact/builds/compromise-redact.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).compromiseRedact=t()}(this,(function(){"use strict";var e=function(e,t,n,o){if(n[t]){var r=e[t]();if("string"==typeof n[t])1===n[t].length?r.replaceWith(function(e){var t=10*Math.random();t=Math.ceil(t);for(var n="",o=0;o (http://spencermounta.in)", + "main": "./builds/compromise-redact.js", + "unpkg": "./builds/compromise-redact.min.js", + "module": "./builds/compromise-redact.mjs", + "types": "types/index.d.ts", + "repository": { + "type": "git", + "url": "git://github.com/spencermountain/compromise.git" + }, + "scripts": { + "test": "tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "testb": "TESTENV=prod tape \"./tests/**/*.test.js\" | tap-dancer --color always", + "watch": "amble ./scratch.js", + "build": "rollup -c --silent" + }, + "prettier": { + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "printWidth": 100 + }, + "files": [ + "builds/", + "types/index.d.ts" + ], + "eslintIgnore": [ + "builds/*.js" + ], + "peerDependencies": { + "compromise": "^12.*.*", + "compromise-dates": "0.0.5" + }, + "dependencies": {}, + "devDependencies": { + "@babel/core": "7.8.4", + "@babel/preset-env": "7.8.4", + "@rollup/plugin-commonjs": "11.0.1", + "@rollup/plugin-json": "4.0.1", + "@rollup/plugin-node-resolve": "7.0.0", + "rollup": "1.30.1", + "rollup-plugin-babel": "4.3.3", + "rollup-plugin-filesize-check": "0.0.1", + "rollup-plugin-terser": "5.2.0", + "tap-dancer": "0.2.0", + "tape": "4.13.0" + }, + "license": "MIT" +} diff --git a/plugins/redact/src/index.js b/plugins/redact/src/index.js new file mode 100644 index 000000000..3d1735517 --- /dev/null +++ b/plugins/redact/src/index.js @@ -0,0 +1,21 @@ +const redact = require('./redact') + +const defaults = { + dates: '▇', + numbers: false, + money: '▇', + people: '▇', + places: '▇', + organizations: '▇', +} + +const addMethod = function(Doc) { + /** remove or obfuscate certain parts of the text */ + Doc.prototype.redact = function(options) { + options = Object.assign({}, defaults, options) + return redact(this, options) + } + + return Doc +} +module.exports = addMethod diff --git a/plugins/redact/src/redact.js b/plugins/redact/src/redact.js new file mode 100644 index 000000000..a9cbd846a --- /dev/null +++ b/plugins/redact/src/redact.js @@ -0,0 +1,44 @@ +const randChar = function(char) { + let len = Math.random() * 10 + len = Math.ceil(len) + let str = '' + for (let i = 0; i < len; i++) { + str += char + } + return str +} + +const doProp = function(doc, prop, options, tag) { + // not false + if (options[prop]) { + let m = doc[prop]() + // replace with custom char of random length + if (typeof options[prop] === 'string') { + if (options[prop].length === 1) { + m.replaceWith(randChar(options[prop])) + } else { + m.replaceWith(options[prop]) + } + } + // support a custom function + else if (typeof options[prop] === 'function') { + let fn = options[prop] + m.replaceWith(fn(m)) + } + // optionally, tag the replacement + if (tag) { + m.tag(tag, 'redact-' + prop) + } + } +} + +const redact = function(doc, options) { + doProp(doc, 'dates', options, 'Date') + doProp(doc, 'numbers', options, 'Value') + doProp(doc, 'money', options, 'Money') + doProp(doc, 'people', options, 'Person') + doProp(doc, 'places', options, 'Place') + doProp(doc, 'organizations', options, 'Organization') + return doc +} +module.exports = redact diff --git a/plugins/redact/tests/_lib.js b/plugins/redact/tests/_lib.js new file mode 100644 index 000000000..d69882373 --- /dev/null +++ b/plugins/redact/tests/_lib.js @@ -0,0 +1,16 @@ +if (typeof process !== undefined && typeof module !== undefined) { + let nlp + if (process.env.TESTENV === 'prod') { + nlp = require('../../../') + nlp.extend(require(`../../numbers/`)) + nlp.extend(require(`../../dates/`)) + nlp.extend(require(`../`)) + } else { + nlp = require('../../../src') + nlp.extend(require(`../../numbers/src`)) + nlp.extend(require(`../../dates/src`)) + nlp.extend(require(`../src`)) + } + + module.exports = nlp +} diff --git a/plugins/redact/tests/misc.test.js b/plugins/redact/tests/misc.test.js new file mode 100644 index 000000000..d5f5b04c1 --- /dev/null +++ b/plugins/redact/tests/misc.test.js @@ -0,0 +1,10 @@ +const test = require('tape') +const nlp = require('./_lib') + +test('redact-default', function(t) { + let doc = nlp('i gave John Smith 900£ on December 1st in Paris, France.') + let m = doc.redact({}) + let str = m.text().replace(/▇+/gu, '▇') + t.equal(str, 'i gave ▇ ▇ ▇ in ▇.') + t.end() +}) diff --git a/scratch.js b/scratch.js index 0983e0e8d..85acb41dc 100644 --- a/scratch.js +++ b/scratch.js @@ -1,17 +1,10 @@ const nlp = require('./src/index') -let txt = require('./scripts/test/speed/_sotu-text.js') +// let txt = require('./scripts/test/speed/_sotu-text.js') // nlp.verbose(true) -// nlp.extend(require('./plugins/numbers/src')) +nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -// let doc = nlp('i am a modern major general').replace('modern', 'old') -// let doc = nlp('i am a modern major general') -// doc.match('modern').tag('Person') -// // console.log(doc._cache) -// console.log(doc.has('#Person')) - -let doc = nlp('i saw red, blue, and green.') -// doc.lists().addOxfordComma() -doc.lists().removeOxfordComma() -console.log(doc.text()) -// console.log(arr) +// let doc = nlp('i paid $5.50.') +let doc = nlp('i paid fifty eight dollars') +// doc.numbers().debug() +doc.money().debug() diff --git a/src/Subset/_simple.js b/src/Subset/_simple.js index 123f9a86f..6056959ee 100644 --- a/src/Subset/_simple.js +++ b/src/Subset/_simple.js @@ -40,7 +40,7 @@ methods.phoneNumbers = function(n) { return m } -/** money + currency pair */ +/** Deprecated: please use compromise-numbers plugin */ methods.money = function(n) { let m = this.match('#Money #Currency?') if (typeof n === 'number') { diff --git a/tests/fuzz.test.js b/tests/fuzz.test.js index 4fd87ad85..23161efe6 100644 --- a/tests/fuzz.test.js +++ b/tests/fuzz.test.js @@ -27,6 +27,10 @@ const subsets = [ 'conjunctions', 'prepositions', 'sentences', + 'phoneNumbers', + 'places', + 'organizations', + 'entities', ] const isArray = function(arr) { From b9fd55211d4e34958e3286ec0cef6bcc44505695 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 10:18:51 -0500 Subject: [PATCH 03/24] fix filesize links in readmes --- plugins/adjectives/README.md | 2 +- plugins/dates/README.md | 2 +- plugins/export/README.md | 2 +- plugins/hash/README.md | 2 +- plugins/html/README.md | 2 +- plugins/keypress/README.md | 2 +- plugins/ngrams/README.md | 2 +- plugins/numbers/README.md | 2 +- plugins/paragraphs/README.md | 2 +- plugins/redact/README.md | 2 +- plugins/scan/README.md | 2 +- plugins/sentences/README.md | 2 +- plugins/syllables/README.md | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/plugins/adjectives/README.md b/plugins/adjectives/README.md index 4b815e6b4..6abe2e59a 100644 --- a/plugins/adjectives/README.md +++ b/plugins/adjectives/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/dates/README.md b/plugins/dates/README.md index e3030b939..74b2b5fad 100644 --- a/plugins/dates/README.md +++ b/plugins/dates/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/export/README.md b/plugins/export/README.md index 90b19c0c7..f9c6af8ad 100644 --- a/plugins/export/README.md +++ b/plugins/export/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/hash/README.md b/plugins/hash/README.md index 8f83f6cb5..4874943cc 100644 --- a/plugins/hash/README.md +++ b/plugins/hash/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/html/README.md b/plugins/html/README.md index f74d2fcd4..3c5140235 100644 --- a/plugins/html/README.md +++ b/plugins/html/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/keypress/README.md b/plugins/keypress/README.md index 976f86cb1..c7765fd4c 100644 --- a/plugins/keypress/README.md +++ b/plugins/keypress/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/ngrams/README.md b/plugins/ngrams/README.md index 8835ccedc..c33a35baf 100644 --- a/plugins/ngrams/README.md +++ b/plugins/ngrams/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/numbers/README.md b/plugins/numbers/README.md index 690bb020f..9ad4277b8 100644 --- a/plugins/numbers/README.md +++ b/plugins/numbers/README.md @@ -11,7 +11,7 @@ - +
diff --git a/plugins/paragraphs/README.md b/plugins/paragraphs/README.md index 8dfd0b05b..0ade5cdd5 100644 --- a/plugins/paragraphs/README.md +++ b/plugins/paragraphs/README.md @@ -10,7 +10,7 @@ v - +
diff --git a/plugins/redact/README.md b/plugins/redact/README.md index 432c783b9..1ce655a45 100644 --- a/plugins/redact/README.md +++ b/plugins/redact/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/scan/README.md b/plugins/scan/README.md index 90bcd699a..ec3a648a0 100644 --- a/plugins/scan/README.md +++ b/plugins/scan/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/sentences/README.md b/plugins/sentences/README.md index 0095db260..636831715 100644 --- a/plugins/sentences/README.md +++ b/plugins/sentences/README.md @@ -10,7 +10,7 @@ - +
diff --git a/plugins/syllables/README.md b/plugins/syllables/README.md index c5c0c7006..e399b546c 100644 --- a/plugins/syllables/README.md +++ b/plugins/syllables/README.md @@ -10,7 +10,7 @@ - +
From 0895b34840f43da2c31cafc1667e55984a807acc Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 13:02:29 -0500 Subject: [PATCH 04/24] money tagger, hasBefore, hasAfter, looser untag --- .github/workflows/build-and-test.yml | 2 +- .github/workflows/release.yml | 2 +- changelog.md | 3 +- package.json | 3 +- plugins/numbers/README.md | 10 ++++ plugins/numbers/src/index.js | 11 ++-- plugins/numbers/src/tagger.js | 7 +++ plugins/numbers/tests/money.ignore.js | 53 ------------------- plugins/numbers/tests/money.test.js | 51 ++++++++++++++++++ scratch.js | 17 ++++-- .../04-correction/matches/06-value.js | 10 ++-- src/Doc/methods/03-match.js | 13 +++++ src/Term/tag/unTag.js | 9 ++++ 13 files changed, 119 insertions(+), 72 deletions(-) delete mode 100644 plugins/numbers/tests/money.ignore.js diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 18da733fc..f4c11c549 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -49,6 +49,6 @@ jobs: run: | npm run test:smoke npm run testb - npm run test:perf + npm run perf npm run test:types # npm run test:stress diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 88e250039..b3bbd6ba3 100755 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: run: | npm run test:smoke npm run testb - npm run test:perf + npm run perf npm run test:types # npm run test:stress diff --git a/changelog.md b/changelog.md index 411e66e00..aa6c4177c 100644 --- a/changelog.md +++ b/changelog.md @@ -10,7 +10,8 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are #### [unreleased] - deprecate `.money()` and favour overloaded method in compromise-numbers plugin - +- add `.hasAfter()` and `.hasBefore()` methods +- #### 13.1.1 - fix `verbs.json()` runtime-error diff --git a/package.json b/package.json index 08c0fa3a9..07afd80a4 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,10 @@ "testb": "npm run test:smoke && TESTENV=prod node ./scripts/test/index.js", "test:smoke": "node \"./scripts/test/smoke-test/\" | tap-dancer", "test:spec": "tape \"./tests/**/*.test.js\" | tap-spec", - "test:perf": "node ./scripts/test/speed/index.js", "test:types": "ts-node ./scripts/test/types.ts | tap-dancer", "test:stress": "node ./scripts/test/stress.js", + "perf": "node ./scripts/test/speed/index.js", + "perf:build": "node ./scripts/test/speed/build-speed.js", "coverage": "node ./scripts/test/coverage.js", "coverage:html": "nyc --reporter=html tape \"./tests/**/*.test.js\" | tap-dancer --color always", "lint": "eslint ./src/ && eslint ./plugins/**/src/", diff --git a/plugins/numbers/README.md b/plugins/numbers/README.md index 9ad4277b8..9e5f14bd7 100644 --- a/plugins/numbers/README.md +++ b/plugins/numbers/README.md @@ -52,4 +52,14 @@ doc.numbers().debug() - **[.numbers().isCardinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only cardinal numbers - **[.numbers().toLocaleString()](https://observablehq.com/@spencermountain/compromise-values)** - add commas, or nicer formatting for numbers +### Notes: + +if a number is changed within a sentence, attempts are made at sentence-agreement - in both a leading determiner, and the plurality of a following noun. +This is done safely, but it may have sneaky or unintended effects for some applications. + +compromise-numbers uses the [period decimal point](https://en.wikipedia.org/wiki/Decimal_separator) and supports comma as a thousands-seperator. +Some european or latin-american number formats like comma-decimals, or space-separated-thousands do not parse properly. + +attempts are made to ignore phone-numbers, postal-codes and credit-card numbers from `.numbers()` results, but there may be numbers used in other ways that are not accounted for. + MIT diff --git a/plugins/numbers/src/index.js b/plugins/numbers/src/index.js index 2144a1a95..ae203fa76 100644 --- a/plugins/numbers/src/index.js +++ b/plugins/numbers/src/index.js @@ -18,19 +18,16 @@ const addMethod = function(Doc, world) { /** find all numbers and values */ Doc.prototype.numbers = function(n) { - let match = findNumbers(this, n) - return new Numbers(match.list, this, this.world) + let m = findNumbers(this, n) + return new Numbers(m.list, this, this.world) } // alias for reverse-compatibility Doc.prototype.values = Doc.prototype.numbers /** money + currency pair */ Doc.prototype.money = function(n) { - let m = this.match('#Money #Currency?') - if (typeof n === 'number') { - m = m.get(n) - } - return m + let m = this.numbers(n).if('#Money') + return new Numbers(m.list, this, this.world) } return Doc diff --git a/plugins/numbers/src/tagger.js b/plugins/numbers/src/tagger.js index 4c87ab60c..ebb40053e 100644 --- a/plugins/numbers/src/tagger.js +++ b/plugins/numbers/src/tagger.js @@ -12,5 +12,12 @@ const tagger = function(doc) { doc.match('#Value and a (half|quarter)').tag('Value', 'value-and-a-half') //one hundred and seven dollars doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money') + + // $5.032 is invalid money + doc + .match('#Money') + .not('#TextValue') + .match('/\\.[0-9]{3}$/') + .unTag('#Money', 'three-decimal money') } module.exports = tagger diff --git a/plugins/numbers/tests/money.ignore.js b/plugins/numbers/tests/money.ignore.js deleted file mode 100644 index 33f3281ba..000000000 --- a/plugins/numbers/tests/money.ignore.js +++ /dev/null @@ -1,53 +0,0 @@ -const test = require('tape') -const nlp = require('./_lib') - -test('money-basic:', function(t) { - let r = nlp('it is $70.23') - let m = r.match('#Money') - t.equal(m.out('normal'), '$70.23', 'match-$70.23') - - r = nlp('it is $703') - m = r.match('#Money+') - t.equal(m.out('normal'), '$703', 'match-$703') - - r = nlp('it is five euros') - m = r.match('#Money+') - t.equal(m.out('normal'), 'five euros', 'match-five-euros') - - r = nlp('i said five times, you should pay 12 dollars') - m = r.match('#Money+') - t.equal(m.out('normal'), '12 dollars', 'match-12 dollars') - - r = nlp('you should pay sixty five dollars and four cents USD') - m = r.match('#Money+') - t.equal(m.out('normal'), 'sixty five dollars and four cents usd', 'match-long-usd') - - t.end() -}) - -test('money-has:', function(t) { - let tests = [ - ['$7', true], - ['$7.0', true], - ['$7.00', true], - ['$7.003', false], - - ['$7082.03', true], - ['$2,082.03', true], - ['€7.00', true], - ['¥70', true], - ['£0.20', true], - ['@0.20', false], - - ['8 cents', true], - ['60 pence', true], - ['sixty pence', true], - ['sixty USD', true], - ] - tests.forEach(function(a) { - let r = nlp(a[0]) - let m = r.match('#Money') - t.equal(m.found, a[1], "money-has: '" + a[0] + "'") - }) - t.end() -}) diff --git a/plugins/numbers/tests/money.test.js b/plugins/numbers/tests/money.test.js index be2761173..1dc2a3ffd 100644 --- a/plugins/numbers/tests/money.test.js +++ b/plugins/numbers/tests/money.test.js @@ -15,3 +15,54 @@ test('money tests', function(t) { t.equal(m.eq(1).text(), '£30', 'sybol-val-2') t.end() }) + +test('money-basic:', function(t) { + let r = nlp('it is $70.23') + let m = r.match('#Money') + t.equal(m.out('normal'), '$70.23', 'match-$70.23') + + r = nlp('it is $703') + m = r.match('#Money+') + t.equal(m.out('normal'), '$703', 'match-$703') + + r = nlp('it is five euros') + m = r.match('#Money+') + t.equal(m.out('normal'), 'five euros', 'match-five-euros') + + r = nlp('i said five times, you should pay 12 dollars') + m = r.match('#Money+') + t.equal(m.out('normal'), '12 dollars', 'match-12 dollars') + + r = nlp('you should pay sixty five dollars and four cents USD') + m = r.match('#Money+') + t.equal(m.out('normal'), 'sixty five dollars and four cents usd', 'match-long-usd') + + t.end() +}) + +test('money-has:', function(t) { + let tests = [ + ['$7', true], + ['$7.0', true], + ['$7.00', true], + ['$7.003', false], + + ['$7082.03', true], + ['$2,082.03', true], + ['€7.00', true], + ['¥70', true], + ['£0.20', true], + ['@0.20', false], + + ['8 cents', true], + ['60 pence', true], + ['sixty pence', true], + ['sixty USD', true], + ] + tests.forEach(function(a) { + let r = nlp(a[0]) + let m = r.match('#Money') + t.equal(m.found, a[1], "money-has: '" + a[0] + "'") + }) + t.end() +}) diff --git a/scratch.js b/scratch.js index 85acb41dc..2efbb32ae 100644 --- a/scratch.js +++ b/scratch.js @@ -1,10 +1,21 @@ const nlp = require('./src/index') +nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') -// nlp.verbose(true) nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // let doc = nlp('i paid $5.50.') -let doc = nlp('i paid fifty eight dollars') +let doc = nlp('$5.32') +doc.untag('money') +doc.debug() +// let doc = nlp('it is 1 567.89') +// doc.match('#Money+').debug() + +// let doc = nlp('i paid fifty eight dollars') // doc.numbers().debug() -doc.money().debug() +// doc.money().debug() + +// doc +// .numbers() +// .hasAfter('#Currency') +// .debug() //.if(tmp => tmp.hasAfter('#Money')).debug() diff --git a/src/02-tagger/04-correction/matches/06-value.js b/src/02-tagger/04-correction/matches/06-value.js index 97718cf14..a15dac9ba 100644 --- a/src/02-tagger/04-correction/matches/06-value.js +++ b/src/02-tagger/04-correction/matches/06-value.js @@ -6,24 +6,24 @@ module.exports = [ { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' }, // ==== Currency ==== + // chinese yuan { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' }, // ==== Ordinal ==== { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' }, - // ==== Money ==== - { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' }, // ==== Unit ==== //5 yan { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' }, { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' }, - + // ==== Money ==== + { match: '[#Value+] #Currency', group: 0, tag: 'Money', reason: '15 usd' }, //minus 7 { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' }, //5 kg. { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' }, //seven point five { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' }, - // ten grand - { match: '#Value grand', tag: 'Value', reason: 'value-grand' }, + // ten bucks + { match: '(#Value|a) [(buck|bucks|grand)]', group: 0, tag: 'Currency', reason: 'value-bucks' }, //quarter million { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' }, { match: 'a #Value', tag: 'Value', reason: 'a-value' }, diff --git a/src/Doc/methods/03-match.js b/src/Doc/methods/03-match.js index 91f121178..c95326272 100644 --- a/src/Doc/methods/03-match.js +++ b/src/Doc/methods/03-match.js @@ -155,3 +155,16 @@ exports.after = function(reg) { befores = befores.filter(p => p !== null) return this.buildFrom(befores) } + +/** return only results with this match afterwards */ +exports.hasAfter = function(reg) { + return this.filter(doc => { + return doc.lookAfter(reg).found + }) +} +/** return only results with this match before it */ +exports.hasBefore = function(reg) { + return this.filter(doc => { + return doc.lookBefore(reg).found + }) +} diff --git a/src/Term/tag/unTag.js b/src/Term/tag/unTag.js index 4396a2d6f..4c129771e 100644 --- a/src/Term/tag/unTag.js +++ b/src/Term/tag/unTag.js @@ -1,4 +1,9 @@ const fns = require('./fns') +const lowerCase = /^[a-z]/ + +const titleCase = str => { + return str.charAt(0).toUpperCase() + str.substr(1) +} /** remove this tag, and its descentents from the term */ const unTag = function(t, tag, reason, world) { @@ -8,6 +13,10 @@ const unTag = function(t, tag, reason, world) { t.tags = {} return t } + tag = tag.replace(/^#/, '') + if (lowerCase.test(tag) === true) { + tag = titleCase(tag) + } // remove the tag if (t.tags[tag] === true) { delete t.tags[tag] From f54bb65e787213c898797061f368bd71b0dafa44 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 14:27:11 -0500 Subject: [PATCH 05/24] 9 number tests failing --- changelog.md | 7 ++- data/numbers/units.js | 1 + hmm.md | 12 ++++- plugins/numbers/README.md | 5 ++ plugins/numbers/src/index.js | 46 +++++++++++++------ plugins/numbers/src/methods.js | 18 ++++---- plugins/numbers/tests/money.test.js | 11 +++++ scratch.js | 16 ++----- src/02-tagger/01-init/02-punctuation.js | 6 +++ src/02-tagger/01-init/data/endsWith.js | 2 +- .../04-correction/matches/06-value.js | 9 ++-- tests/setTag.test.js | 8 ++++ 12 files changed, 99 insertions(+), 42 deletions(-) diff --git a/changelog.md b/changelog.md index aa6c4177c..e970dd950 100644 --- a/changelog.md +++ b/changelog.md @@ -8,10 +8,13 @@ compromise uses semver, and pushes to npm frequently While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. -#### [unreleased] +#### [Unreleased] 13.2.0 + - deprecate `.money()` and favour overloaded method in compromise-numbers plugin +- add `.percentages()` and `.fractions()` to compromise-numbers plugin - add `.hasAfter()` and `.hasBefore()` methods -- +- change handling of slashes + #### 13.1.1 - fix `verbs.json()` runtime-error diff --git a/data/numbers/units.js b/data/numbers/units.js index 3171b6e3e..5d043fb9d 100644 --- a/data/numbers/units.js +++ b/data/numbers/units.js @@ -178,6 +178,7 @@ module.exports = [ 'mph', 'mile per hour', 'miles per hour', + 'miles an hour', 'mi/h', 'knot', 'knots', diff --git a/hmm.md b/hmm.md index 7fda83369..e37b5015d 100644 --- a/hmm.md +++ b/hmm.md @@ -1,3 +1,12 @@ +### Unit/Currency + +- `5 km` +- `5 k/s` +- `5 books` +- `5 euros` + +--- + ```js //greedy match issue nlp(`wayne's world, party time`) @@ -229,7 +238,8 @@ let arr = [ ``` ### lookup duplicates + ```js let doc = nlp('spencer kelly is working here') let res = doc.lookup(['spencer kelly', 'spencer']) -``` \ No newline at end of file +``` diff --git a/plugins/numbers/README.md b/plugins/numbers/README.md index 9e5f14bd7..b0e4c7e3a 100644 --- a/plugins/numbers/README.md +++ b/plugins/numbers/README.md @@ -51,12 +51,17 @@ doc.numbers().debug() - **[.numbers().isOrdinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only ordinal numbers - **[.numbers().isCardinal()](https://observablehq.com/@spencermountain/compromise-values)** - return only cardinal numbers - **[.numbers().toLocaleString()](https://observablehq.com/@spencermountain/compromise-values)** - add commas, or nicer formatting for numbers +- **[.money()](https://observablehq.com/@spencermountain/compromise-values)** - like \$5.50 or '5 euros' +- **[.fractions()](https://observablehq.com/@spencermountain/compromise-values)** - like '2/3rds' +- **[.percentages()](https://observablehq.com/@spencermountain/compromise-values)** - like '2.5%' ### Notes: if a number is changed within a sentence, attempts are made at sentence-agreement - in both a leading determiner, and the plurality of a following noun. This is done safely, but it may have sneaky or unintended effects for some applications. +money,fractions, and percentages will be returned and work fine in `.numbers()`, but can be isolated with `.money()`, `.fractions()` and `.percentages()` + compromise-numbers uses the [period decimal point](https://en.wikipedia.org/wiki/Decimal_separator) and supports comma as a thousands-seperator. Some european or latin-american number formats like comma-decimals, or space-separated-thousands do not parse properly. diff --git a/plugins/numbers/src/index.js b/plugins/numbers/src/index.js index ae203fa76..a4a89048d 100644 --- a/plugins/numbers/src/index.js +++ b/plugins/numbers/src/index.js @@ -4,7 +4,7 @@ const tagger = require('./tagger') const tags = require('./tags') /** adds .numbers() method */ -const addMethod = function(Doc, world) { +const plugin = function(Doc, world) { // add tags to our tagset world.addTags(tags) @@ -16,20 +16,40 @@ const addMethod = function(Doc, world) { //aliases Object.assign(Numbers.prototype, methods) - /** find all numbers and values */ - Doc.prototype.numbers = function(n) { - let m = findNumbers(this, n) - return new Numbers(m.list, this, this.world) - } - // alias for reverse-compatibility - Doc.prototype.values = Doc.prototype.numbers + class Money extends Numbers {} + class Fraction extends Numbers {} - /** money + currency pair */ - Doc.prototype.money = function(n) { - let m = this.numbers(n).if('#Money') - return new Numbers(m.list, this, this.world) + const docMethods = { + /** find all numbers and values */ + numbers: function(n) { + let m = findNumbers(this, n) + return new Numbers(m.list, this, this.world) + }, + /** numbers that are percentages*/ + percentages: function(n) { + let m = findNumbers(this, n) + m = m.if('/%$/') + return new Numbers(m.list, this, this.world) + }, + /** number + currency pair */ + money: function(n) { + let nums = findNumbers(this, n) + let m = nums.if('#Money') //$5.75 + m = m.concat(nums.hasAfter('#Currency')) //'5 dollars' + return new Money(m.list, this, this.world) + }, + fractions: function(n) { + let nums = findNumbers(this, n) + let m = nums.if('#Fraction') //2/3 + return new Fraction(m.list, this, this.world) + }, } + // aliases + docMethods.values = docMethods.numbers + docMethods.percents = docMethods.percentages + + Object.assign(Doc.prototype, docMethods) return Doc } -module.exports = addMethod +module.exports = plugin diff --git a/plugins/numbers/src/methods.js b/plugins/numbers/src/methods.js index e994b5d7f..10eea1b75 100644 --- a/plugins/numbers/src/methods.js +++ b/plugins/numbers/src/methods.js @@ -32,7 +32,7 @@ let methods = { }, /** two of what? */ units: function() { - return this.lookAhead('^(#Unit|#Noun)') + return this.lookAhead('(#Unit|#Noun)') }, /** return only ordinal numbers */ isOrdinal: function() { @@ -203,14 +203,14 @@ let methods = { /// ---- - /** return things like 1/3rd */ - fractions: function(n) { - let m = this.match('#Fraction') - if (typeof n === 'number') { - m = m.get(n) - } - return m - }, + // /** return things like 1/3rd */ + // fractions: function(n) { + // let m = this.match('#Fraction') + // if (typeof n === 'number') { + // m = m.get(n) + // } + // return m + // }, /** return things like CCXX*/ romanNumerals: function(n) { diff --git a/plugins/numbers/tests/money.test.js b/plugins/numbers/tests/money.test.js index 1dc2a3ffd..a7740be15 100644 --- a/plugins/numbers/tests/money.test.js +++ b/plugins/numbers/tests/money.test.js @@ -40,6 +40,17 @@ test('money-basic:', function(t) { t.end() }) +test('money-transform:', function(t) { + let doc = nlp('i paid $5.32 for a pizza slice') + doc.money().add(1) + t.equal(doc.text(), 'i paid $6.32 for a pizza slice', 'money-add-one') + + doc = nlp('i paid fifty eight dollars') + doc.money().add(1) + t.equal(doc.text(), 'i paid fifty nine dollars', 'text-add-one') + t.end() +}) + test('money-has:', function(t) { let tests = [ ['$7', true], diff --git a/scratch.js b/scratch.js index 2efbb32ae..33cad85dc 100644 --- a/scratch.js +++ b/scratch.js @@ -5,17 +5,7 @@ nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // let doc = nlp('i paid $5.50.') -let doc = nlp('$5.32') -doc.untag('money') -doc.debug() -// let doc = nlp('it is 1 567.89') -// doc.match('#Money+').debug() +// let doc = nlp('$5.32') -// let doc = nlp('i paid fifty eight dollars') -// doc.numbers().debug() -// doc.money().debug() - -// doc -// .numbers() -// .hasAfter('#Currency') -// .debug() //.if(tmp => tmp.hasAfter('#Money')).debug() +let doc = nlp('i went 5 k/m²').debug() +// console.log(doc.termList()) diff --git a/src/02-tagger/01-init/02-punctuation.js b/src/02-tagger/01-init/02-punctuation.js index 5d668382b..a3c018dd8 100644 --- a/src/02-tagger/01-init/02-punctuation.js +++ b/src/02-tagger/01-init/02-punctuation.js @@ -1,4 +1,5 @@ const apostrophes = /[\'‘’‛‵′`´]$/ +const perSec = /^(m|k|cm|km|m)\/(s|h|hr)$/ // '5 k/m' // const checkPunctuation = function(terms, i, world) { @@ -29,6 +30,11 @@ const checkPunctuation = function(terms, i, world) { } } } + // '5 km/s' + if (perSec.test(term.text)) { + term.tag('Unit', 'per-sec', world) + } + // 'NASA' is, but not 'i REALLY love it.' // if (term.tags.Noun === true && isAcronym(term, world)) { // term.tag('Acronym', 'acronym-step', world) diff --git a/src/02-tagger/01-init/data/endsWith.js b/src/02-tagger/01-init/data/endsWith.js index dd6f72c26..b17c6306f 100644 --- a/src/02-tagger/01-init/data/endsWith.js +++ b/src/02-tagger/01-init/data/endsWith.js @@ -74,7 +74,7 @@ module.exports = { [/.[oau][wvl]ski$/, Last], //polish (male) ], k: [ - [/^(k)+$/, Exp], //kkkk + [/^(k){2}$/, Exp], //kkkk ], l: [ [/.[gl]ial$/, Adj], diff --git a/src/02-tagger/04-correction/matches/06-value.js b/src/02-tagger/04-correction/matches/06-value.js index a15dac9ba..5ae77c825 100644 --- a/src/02-tagger/04-correction/matches/06-value.js +++ b/src/02-tagger/04-correction/matches/06-value.js @@ -14,12 +14,13 @@ module.exports = [ //5 yan { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' }, { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' }, - // ==== Money ==== - { match: '[#Value+] #Currency', group: 0, tag: 'Money', reason: '15 usd' }, + //minus 7 { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' }, //5 kg. - { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' }, + { match: '#Value [#Abbreviation]', group: 0, tag: 'Unit', reason: 'value-abbr' }, + { match: '#Value [k]', group: 0, tag: 'Unit', reason: 'value-k' }, + { match: '#Unit an hour', tag: 'Unit', reason: 'unit-an-hour' }, //seven point five { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' }, // ten bucks @@ -28,6 +29,8 @@ module.exports = [ { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' }, { match: 'a #Value', tag: 'Value', reason: 'a-value' }, + // ==== Money ==== + { match: '[#Value+] #Currency', group: 0, tag: 'Money', reason: '15 usd' }, // thousand and two { match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`, diff --git a/tests/setTag.test.js b/tests/setTag.test.js index 4cc076e2a..1ecc6dd8b 100644 --- a/tests/setTag.test.js +++ b/tests/setTag.test.js @@ -39,3 +39,11 @@ test('custom-tags-persist', function(t) { t.end() }) + +test('untag-soft', function(t) { + let doc = nlp('$5.32') + t.equal(doc.has('#Money'), true, 'had-money') + doc.untag('#money') + t.equal(doc.has('#Money'), false, 'has-no-money') + t.end() +}) From cdff2ec712c8c531ad3ea1a0294efdda314d8562 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 15:00:32 -0500 Subject: [PATCH 06/24] more abbreviations --- README.md | 12 +++++++----- changelog.md | 2 ++ data/abbreviations/misc.js | 25 +++++++++++++++++++++++++ data/abbreviations/nouns.js | 8 -------- data/index.js | 1 + plugins/numbers/README.md | 4 +++- scratch.js | 8 +++++++- src/World/_data.js | 8 ++++---- src/index.js | 4 ++++ 9 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 data/abbreviations/misc.js diff --git a/README.md b/README.md index 3f0dfc170..845fb83b2 100644 --- a/README.md +++ b/README.md @@ -337,6 +337,7 @@ _(these methods are on the `nlp` object)_ - **[.fromJSON()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - load a compromise object from `.json()` result - **[.verbose()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - log our decision-making for debugging - **[.version()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - current semver version of the library +- **[.world()](https://observablehq.com/@spencermountain/compromise-constructor-methods)** - grab all current linguistic data ##### Utils @@ -667,16 +668,18 @@ import ngrams from 'compromise-ngrams' import numbers from 'compromise-numbers' // .extend() can be chained -const nlpEx = nlp.extend(ngrams).extend(numbers) +const nlpEx = nlp.extend(ngrams).extend(numbers) nlpEx('This is type safe!').ngrams({ min: 1 }) nlpEx('This is type safe!').numbers() ``` #### Type-safe Plugins + The `.extend()` function returns an nlp type with updated Document and World types (Phrase, Term and Pool are not currently supported). While the global nlp also recieves the plugin from a runtime perspective; it's type will not be updated - this is a limitation of Typescript. Typesafe plugins can be created by using the `nlp.Plugin` type: + ```ts interface myExtendedDoc { sayHello(): string @@ -695,13 +698,12 @@ const myPlugin: nlp.Plugin = (Doc, world) => { const _nlp = nlp.extend(myPlugin) const doc = _nlp('This is safe!') doc.sayHello() -doc.world.hello = "Hello again!" - +doc.world.hello = 'Hello again!' ``` #### Known Issues -* `compromise_1.default is not a function` - This is a problem with your `tsconfig.json` it can be solved by adding `"esModuleInterop": true`. Make sure to run `tsc --init` when starting a new Typescript project. +- `compromise_1.default is not a function` - This is a problem with your `tsconfig.json` it can be solved by adding `"esModuleInterop": true`. Make sure to run `tsc --init` when starting a new Typescript project. ### Docs: @@ -716,7 +718,7 @@ doc.world.hello = "Hello again!" - **[Geocoding Social Conversations with NLP and JavaScript](http://compromise.cool)** - by Microsoft - **[Microservice Recipe](https://eventn.com/recipes/text-parsing-with-nlp-compromise)** - by Eventn -- **[Adventure Game Sentence Parsing with Compromise](https://killalldefects.com/2020/02/20/adventure-game-sentence-parsing-with-compromise/) +- \*\*[Adventure Game Sentence Parsing with Compromise](https://killalldefects.com/2020/02/20/adventure-game-sentence-parsing-with-compromise/) - **[Building Text-Based Games](https://killalldefects.com/2019/09/24/building-text-based-games-with-compromise-nlp/)** - by Matt Eland - **[Fun with javascript in BigQuery](https://medium.com/@hoffa/new-in-bigquery-persistent-udfs-c9ea4100fd83#6e09)** - by Felipe Hoffa - **[Natural Language Processing... in the Browser???](https://dev.to/charlesdlandau/natural-language-processing-in-the-browser-52hj)** - by Charles Landau diff --git a/changelog.md b/changelog.md index e970dd950..61e196058 100644 --- a/changelog.md +++ b/changelog.md @@ -14,6 +14,8 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - add `.percentages()` and `.fractions()` to compromise-numbers plugin - add `.hasAfter()` and `.hasBefore()` methods - change handling of slashes +- add `.world()` method to constructor +- add more abbreviations #### 13.1.1 diff --git a/data/abbreviations/misc.js b/data/abbreviations/misc.js new file mode 100644 index 000000000..c45eb5837 --- /dev/null +++ b/data/abbreviations/misc.js @@ -0,0 +1,25 @@ +module.exports = [ + 'approx', + 'apt', + 'bc', + 'cyn', + 'eg', + 'esp', + 'est', + 'etc', + 'ex', + 'exp', + 'gal', + 'min', + 'jd', + 'misc', + 'plz', + 'ps', + 'pt', + 'qt', + 'sq', + 'tel', + 'temp', + 'vet', + 'vs', +] diff --git a/data/abbreviations/nouns.js b/data/abbreviations/nouns.js index 865ad6f26..3c75b44bd 100644 --- a/data/abbreviations/nouns.js +++ b/data/abbreviations/nouns.js @@ -3,17 +3,11 @@ module.exports = [ 'al', 'arc', 'ba', - 'bc', 'bl', 'ca', 'cca', 'col', 'corp', - 'eg', - 'esp', - 'etc', - 'ex', - 'exp', 'ft', 'fy', 'ie', @@ -22,7 +16,5 @@ module.exports = [ 'md', 'pd', 'pl', - 'plz', 'tce', - 'vs', ] diff --git a/data/index.js b/data/index.js index 2001b90dc..eafb65e3c 100644 --- a/data/index.js +++ b/data/index.js @@ -44,6 +44,7 @@ const data = [ [require('./numbers/ordinals'), ['TextValue', 'Ordinal']], [require('./numbers/cardinals'), ['TextValue', 'Cardinal']], //abbreviations + [require('./abbreviations/misc'), 'Abbreviation'], [require('./abbreviations/nouns'), ['Abbreviation', 'Noun']], [require('./abbreviations/honorifics'), ['Abbreviation', 'Honorific']], [require('./abbreviations/months'), ['Abbreviation', 'Month']], diff --git a/plugins/numbers/README.md b/plugins/numbers/README.md index b0e4c7e3a..ebc890ba5 100644 --- a/plugins/numbers/README.md +++ b/plugins/numbers/README.md @@ -60,7 +60,9 @@ doc.numbers().debug() if a number is changed within a sentence, attempts are made at sentence-agreement - in both a leading determiner, and the plurality of a following noun. This is done safely, but it may have sneaky or unintended effects for some applications. -money,fractions, and percentages will be returned and work fine in `.numbers()`, but can be isolated with `.money()`, `.fractions()` and `.percentages()` +**money, fractions, and percentages** will be returned and work fine in `.numbers()`, but can be isolated with `.money()`, `.fractions()` and `.percentages()` + +**times** like `5pm` are parsed and handled by [compromise-dates](https://observablehq.com/@spencermountain/compromise-dates) and are not returned by `.numbers()`. compromise-numbers uses the [period decimal point](https://en.wikipedia.org/wiki/Decimal_separator) and supports comma as a thousands-seperator. Some european or latin-american number formats like comma-decimals, or space-separated-thousands do not parse properly. diff --git a/scratch.js b/scratch.js index 33cad85dc..d048216da 100644 --- a/scratch.js +++ b/scratch.js @@ -7,5 +7,11 @@ nlp.extend(require('./plugins/numbers/src')) // let doc = nlp('i paid $5.50.') // let doc = nlp('$5.32') -let doc = nlp('i went 5 k/m²').debug() +let world = nlp.world() +Object.assign(world.cache.abbreviations, { + fn: true, + abbr: true, +}) + +let doc = nlp('on tel. 34th').debug() // console.log(doc.termList()) diff --git a/src/World/_data.js b/src/World/_data.js index c6f1e12f0..921fc2f8c 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -3,7 +3,7 @@ module.exports={ "Superlative": "true¦earlier", "PresentTense": "true¦is,sounds", "Value": "true¦a few", - "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", + "Noun": "true¦a6b5c3f2here,ie,lit,m1no doubt,p0tce;d,l;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", @@ -19,13 +19,13 @@ module.exports={ "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:17;a12b10c0Md0Le0Jf0Eg0Bh08in0Fjoule0k01lZmMnLoKpHquart0sqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Lb,d0Rears old,o1;tt0F;att0b;able4b3e2on1sp;!ne0;a2r0B;!l,sp;spo02; ft,uare 1;c0Gd0Ff3i0Dkilo0Hm1ya0C;e0Kil1;e0li0F;eet0o0B;ascals,e2i1ou0O;c0Lnt0;rcent,t01;hms,uXz;an0IewtS;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li07;! pFs1²;! 1;anEpD;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aWogP;all2b,ig9ra1;in0m0;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", "Currency": "true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s", "City": "true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg", - "Abbreviation": "true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v", + "Abbreviation": "true¦a0Cb09c03d01eYfWgUhTiSjQkanPlNmHnFoEpDqCrAs6t4u3v2w0;is0y04;!c;a,et,s,t;niv,safa,t;ce,e0;l,mp,nn,x;ask,e1fc,gt,ir,q,r,t,u0;pt,rg;nGp0;!t;d,e0;pDs,v;t,ue;a,d,ennJhd,l,rof,s,t,vt;ct,kla,nt,p,rd;eb0ov;!r;a4d,essrs,i1lle,me,r7s0t;!tr;n1s0;c,ter;!n;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a0en,ov;!l;eb,l0t,y;!a;g,s1tc,x0;!p;p,q,t;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t,yn;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", @@ -40,7 +40,7 @@ module.exports={ "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", "PhrasalVerb": "true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", + "Adjective": "true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt", "Comparable": "true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", diff --git a/src/index.js b/src/index.js index 983286b1c..8d84a53dc 100644 --- a/src/index.js +++ b/src/index.js @@ -61,6 +61,10 @@ function instance(worldInstance) { world.verbose(bool) return this } + /** grab currently-used World object */ + nlp.world = function() { + return world + } /** current version of the library */ nlp.version = version From b15e3eb9f1de71e3da413f8701124616e122e96c Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 15:36:20 -0500 Subject: [PATCH 07/24] more abbreviations, 9 number tests still failing --- data/abbreviations/misc.js | 42 ++++++++++++++++++++++++++++++++++--- data/abbreviations/nouns.js | 1 - scratch.js | 9 ++------ src/World/_data.js | 6 +++--- 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/data/abbreviations/misc.js b/data/abbreviations/misc.js index c45eb5837..ce2a04c3c 100644 --- a/data/abbreviations/misc.js +++ b/data/abbreviations/misc.js @@ -9,17 +9,53 @@ module.exports = [ 'etc', 'ex', 'exp', - 'gal', + 'prob', //probably + 'pron', // Pronunciation + 'gal', //gallon 'min', + 'pseud', + 'mph', + 'fig', //figure 'jd', + 'lat', //latitude + 'lng', //longitude + 'vol', //volume + 'psa', //psalms + 'hr', //hour + 'hrs', //hour + 'fm', //not am + 'def', //definition 'misc', - 'plz', + 'plz', //please + 'ea', //each 'ps', + 'sec', //second 'pt', - 'qt', + 'pref', //preface + 'pl', //plural + 'pp', //pages + 'qt', //quarter + 'fr', //french 'sq', + 'nee', //given name at birth + 'ss', //ship, or sections 'tel', 'temp', 'vet', + // 'sing',//singular + 'ver', //version 'vs', + 'fem', //feminine + 'masc', //masculine + 'eng', //engineering/english + + 'adj', //adjective + 'vb', //verb + 'rb', //adverb + 'inf', //infinitive + // in situ.. + 'situ', + 'vivo', + 'vitro', + 'wr', //world record ] diff --git a/data/abbreviations/nouns.js b/data/abbreviations/nouns.js index 3c75b44bd..a5c172459 100644 --- a/data/abbreviations/nouns.js +++ b/data/abbreviations/nouns.js @@ -15,6 +15,5 @@ module.exports = [ 'ma', 'md', 'pd', - 'pl', 'tce', ] diff --git a/scratch.js b/scratch.js index d048216da..f03f8a46f 100644 --- a/scratch.js +++ b/scratch.js @@ -7,11 +7,6 @@ nlp.extend(require('./plugins/numbers/src')) // let doc = nlp('i paid $5.50.') // let doc = nlp('$5.32') -let world = nlp.world() -Object.assign(world.cache.abbreviations, { - fn: true, - abbr: true, -}) - -let doc = nlp('on tel. 34th').debug() +let doc = nlp('it was 55 mph. or so').debug() +doc.numbers().debug() // console.log(doc.termList()) diff --git a/src/World/_data.js b/src/World/_data.js index 921fc2f8c..b362e14bf 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -3,7 +3,7 @@ module.exports={ "Superlative": "true¦earlier", "PresentTense": "true¦is,sounds", "Value": "true¦a few", - "Noun": "true¦a6b5c3f2here,ie,lit,m1no doubt,p0tce;d,l;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc", + "Noun": "true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", @@ -19,13 +19,13 @@ module.exports={ "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:17;a12b10c0Md0Le0Jf0Eg0Bh08in0Fjoule0k01lZmMnLoKpHquart0sqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Lb,d0Rears old,o1;tt0F;att0b;able4b3e2on1sp;!ne0;a2r0B;!l,sp;spo02; ft,uare 1;c0Gd0Ff3i0Dkilo0Hm1ya0C;e0Kil1;e0li0F;eet0o0B;ascals,e2i1ou0O;c0Lnt0;rcent,t01;hms,uXz;an0IewtS;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li07;! pFs1²;! 1;anEpD;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aWogP;all2b,ig9ra1;in0m0;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg0Ah07in0Ejoule0k00lYmMnLoKpHquart0sqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;ascals,e2i1ou0N;c0Knt0;rcent,t00;hms,uWz;an0HewtR;/s,b,e8g,i2l,m1ps,²,³;!²;!/h,cro5l1;e1li07;! pFs1²;! 1;anEpD;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aWogP;all2b,ig9ra1;in0m0;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", "Currency": "true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s", "City": "true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg", - "Abbreviation": "true¦a0Cb09c03d01eYfWgUhTiSjQkanPlNmHnFoEpDqCrAs6t4u3v2w0;is0y04;!c;a,et,s,t;niv,safa,t;ce,e0;l,mp,nn,x;ask,e1fc,gt,ir,q,r,t,u0;pt,rg;nGp0;!t;d,e0;pDs,v;t,ue;a,d,ennJhd,l,rof,s,t,vt;ct,kla,nt,p,rd;eb0ov;!r;a4d,essrs,i1lle,me,r7s0t;!tr;n1s0;c,ter;!n;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a0en,ov;!l;eb,l0t,y;!a;g,s1tc,x0;!p;p,q,t;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t,yn;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", + "Abbreviation": "true¦a0Lb0Ic0Cd0Ae07f04g02h00iYjWkan01lUmOnLoKpGqFrDs8t6u5v2w0;is0r,y0D;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;ce,e0;l,mp,nn,x;ask,e2fc,gt,i1q,r,s,t,u0;pt,rg;r,tu;c,nPp0;!t;b,d,e0;pMs,v;t,ue;a,d,ennOhd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;ct,kla,nt,p,rd;e0ov;b0e;!r;a4d,essrs,i1lle,me,ph,rCs0t;!tr;n1s0;c,ter;!n;!j,r,sc;at,it,lb,ng,t0;!d;an,d,r,u0;l,n;a,da,e,n0;c,f;on,r0wy;!s;a0en,ov;!l;e1ig,l0m,r,t,y;!a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0ist,r;c,f,pt,t;a3ca,l,m2o0pl,res,t,yn;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", From 5452d8b12a68a1f173c7c44e98267d106709469a Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 3 Mar 2020 15:47:33 -0500 Subject: [PATCH 08/24] move abbreviations and units around --- data/abbreviations/misc.js | 3 -- data/abbreviations/units.js | 43 ++++++++++++++++++++++ data/index.js | 1 + data/numbers/units.js | 73 +++++++++++++++++++------------------ scratch.js | 2 +- src/World/_data.js | 6 +-- 6 files changed, 85 insertions(+), 43 deletions(-) create mode 100644 data/abbreviations/units.js diff --git a/data/abbreviations/misc.js b/data/abbreviations/misc.js index ce2a04c3c..9330e834c 100644 --- a/data/abbreviations/misc.js +++ b/data/abbreviations/misc.js @@ -14,15 +14,12 @@ module.exports = [ 'gal', //gallon 'min', 'pseud', - 'mph', 'fig', //figure 'jd', 'lat', //latitude 'lng', //longitude 'vol', //volume 'psa', //psalms - 'hr', //hour - 'hrs', //hour 'fm', //not am 'def', //definition 'misc', diff --git a/data/abbreviations/units.js b/data/abbreviations/units.js new file mode 100644 index 000000000..17ab5bf1e --- /dev/null +++ b/data/abbreviations/units.js @@ -0,0 +1,43 @@ +// units that are abbreviations too +module.exports = [ + 'dl', + 'ml', + 'gal', + 'ft', //ambiguous + 'qt', + 'pt', + 'tbl', + 'tsp', + 'tbsp', + 'km', + 'dm', //decimeter + 'cm', + 'mm', + 'mi', + 'td', + 'hr', //hour + 'hrs', //hour + 'kg', + 'hg', + 'dg', //decigram + 'cg', //centigram + 'mg', //milligram + 'µg', //microgram + 'lb', //pound + 'oz', //ounce + 'sq ft', + 'hz', //hertz + 'mps', //meters per second + 'mph', + 'kmph', //kilometers per hour + 'kb', //kilobyte + 'mb', //megabyte + 'gb', //ambig + 'tb', //terabyte + 'lx', //lux + 'lm', //lumen + 'pa', //ambig + 'fl oz', // + + 'yb', +] diff --git a/data/index.js b/data/index.js index eafb65e3c..60347271b 100644 --- a/data/index.js +++ b/data/index.js @@ -45,6 +45,7 @@ const data = [ [require('./numbers/cardinals'), ['TextValue', 'Cardinal']], //abbreviations [require('./abbreviations/misc'), 'Abbreviation'], + [require('./abbreviations/units'), ['Abbreviation', 'Unit']], [require('./abbreviations/nouns'), ['Abbreviation', 'Noun']], [require('./abbreviations/honorifics'), ['Abbreviation', 'Honorific']], [require('./abbreviations/months'), ['Abbreviation', 'Month']], diff --git a/data/numbers/units.js b/data/numbers/units.js index 5d043fb9d..b32bb7d79 100644 --- a/data/numbers/units.js +++ b/data/numbers/units.js @@ -1,3 +1,4 @@ +// units that are also abbreviations are in ../abbrev/units.js module.exports = [ '°c', 'celsius', @@ -24,13 +25,13 @@ module.exports = [ 'cm3', 'liter', 'liters', - 'dl', + // 'dl', 'deciliter', 'deciliters', // 'cl', 'centiliter', 'centiliters', - 'ml', + // 'ml', 'milliliter', 'milliliters', 'in³', @@ -45,79 +46,79 @@ module.exports = [ 'cubic yard', 'cubic yards', 'yd3', - 'gal', + // 'gal', 'gallon', 'gallons', 'bbl', - 'pt', + // 'pt', 'pint', 'pints', - 'qt', + // 'qt', 'quart', 'quarts', - 'tbl', + // 'tbl', 'tablespoon', 'tablespoons', - 'tsp', + // 'tsp', 'teaspoon', 'teaspoons', - 'tbsp', + // 'tbsp', 'cup', 'cups', - 'fl oz', + // 'fl oz', 'fluid ounce', 'fluid ounces', - 'km', + // 'km', 'kilometer', 'kilometers', 'meter', 'meters', - 'dm', + // 'dm', 'decimeter', 'decimeters', - 'cm', + // 'cm', 'centimeter', 'centimeters', - 'mm', + // 'mm', 'millimeter', 'millimeters', - 'mi', + // 'mi', 'mile', 'miles', - 'ft', //ambiguous - 'yd', + // 'ft', //ambiguous + // 'yd', 'yard', 'yards', 'tonne', 'tonnes', - 'kg', + // 'kg', 'kilogram', 'kilograms', - 'hg', + // 'hg', 'hectogram', 'hectograms', 'gram', 'grams', - 'dg', + // 'dg', 'decigram', 'decigrams', - 'cg', + // 'cg', 'centigram', 'centigrams', - 'mg', + // 'mg', 'milligram', 'milligrams', - 'µg', + // 'µg', 'microgram', 'micrograms', 'carat', 'carats', 'grain', 'grains', - 'oz', + // 'oz', 'ounce', 'ounces', - 'lb', + // 'lb', 'pound', 'pounds', 'ton', @@ -158,24 +159,24 @@ module.exports = [ 'ft²', 'square foot', 'square foots', - 'sq ft', + // 'sq ft', 'square feet', 'square feets', 'ft2', 'acre', 'acres', - 'hz', + // 'hz', 'hertz', 'hertzs', 'km/h', 'kilometer per hour', 'kilometers per hour', - 'kmph', - 'mps', + // 'kmph', + // 'mps', 'meter per second', 'meters per second', 'm/s', - 'mph', + // 'mph', 'mile per hour', 'miles per hour', 'miles an hour', @@ -184,16 +185,16 @@ module.exports = [ 'knots', 'byte', 'bytes', - 'kb', + // 'kb', 'kilobyte', 'kilobytes', - 'mb', + // 'mb', 'megabyte', 'megabytes', - 'gb', + // 'gb', 'gigabyte', 'gigabytes', - 'tb', + // 'tb', 'terabyte', 'terabytes', 'petabyte', @@ -209,7 +210,7 @@ module.exports = [ 'yottabytes', 'joule', 'joules', - 'pa', + // 'pa', 'pascals', 'watt', 'watts', @@ -220,10 +221,10 @@ module.exports = [ 'farad', 'farads', 'ohms', - 'lx', + // 'lx', 'lux', 'luxs', - 'lm', + // 'lm', 'lumen', 'lumens', 'µs', diff --git a/scratch.js b/scratch.js index f03f8a46f..08c8ba303 100644 --- a/scratch.js +++ b/scratch.js @@ -7,6 +7,6 @@ nlp.extend(require('./plugins/numbers/src')) // let doc = nlp('i paid $5.50.') // let doc = nlp('$5.32') -let doc = nlp('it was 55 mph. or so').debug() +let doc = nlp('it was 5 kg. or so').debug() doc.numbers().debug() // console.log(doc.termList()) diff --git a/src/World/_data.js b/src/World/_data.js index b362e14bf..011eea381 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -19,17 +19,17 @@ module.exports={ "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg0Ah07in0Ejoule0k00lYmMnLoKpHquart0sqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;ascals,e2i1ou0N;c0Knt0;rcent,t00;hms,uWz;an0HewtR;/s,b,e8g,i2l,m1ps,²,³;!²;!/h,cro5l1;e1li07;! pFs1²;! 1;anEpD;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aWogP;all2b,ig9ra1;in0m0;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", "Currency": "true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s", "City": "true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg", - "Abbreviation": "true¦a0Lb0Ic0Cd0Ae07f04g02h00iYjWkan01lUmOnLoKpGqFrDs8t6u5v2w0;is0r,y0D;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;ce,e0;l,mp,nn,x;ask,e2fc,gt,i1q,r,s,t,u0;pt,rg;r,tu;c,nPp0;!t;b,d,e0;pMs,v;t,ue;a,d,ennOhd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;ct,kla,nt,p,rd;e0ov;b0e;!r;a4d,essrs,i1lle,me,ph,rCs0t;!tr;n1s0;c,ter;!n;!j,r,sc;at,it,lb,ng,t0;!d;an,d,r,u0;l,n;a,da,e,n0;c,f;on,r0wy;!s;a0en,ov;!l;e1ig,l0m,r,t,y;!a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0ist,r;c,f,pt,t;a3ca,l,m2o0pl,res,t,yn;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", - "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", + "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", "WeekDay": "true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s", "Month": "true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il", "Date": "true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w", From d227dca640856b180c26583d93f83fac0275776c Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Mon, 9 Mar 2020 17:50:18 -0400 Subject: [PATCH 09/24] safer slash regex #726 --- scratch.js | 13 ++++++++----- src/01-tokenizer/02-words.js | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/scratch.js b/scratch.js index 08c8ba303..f5c339cec 100644 --- a/scratch.js +++ b/scratch.js @@ -1,12 +1,15 @@ const nlp = require('./src/index') -nlp.verbose(true) +// nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') -nlp.extend(require('./plugins/numbers/src')) +// nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) // let doc = nlp('i paid $5.50.') // let doc = nlp('$5.32') -let doc = nlp('it was 5 kg. or so').debug() -doc.numbers().debug() -// console.log(doc.termList()) +let doc = nlp('hello 4 / 2 * 5 - 1 world').debug() +doc + .match('/[0-9] \\/ [0-9]/') + .debug() + .tag('Formula') +// doc.match('#Value+ (*|+|-) #Value+').tag('#Formula') diff --git a/src/01-tokenizer/02-words.js b/src/01-tokenizer/02-words.js index ea1aa9ea9..432b81bab 100644 --- a/src/01-tokenizer/02-words.js +++ b/src/01-tokenizer/02-words.js @@ -1,7 +1,7 @@ const wordlike = /\S/ const isBoundary = /^[!?.]+$/ const naiiveSplit = /(\S+)/ -const isSlash = /\/\W*$/ +const isSlash = /[a-z] ?\/ ?[a-z]*$/ const notWord = { '.': true, From 262a78867d5252264399014df5aa24e72e0294a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Mar 2020 15:06:07 +0000 Subject: [PATCH 10/24] Bump acorn from 7.1.0 to 7.1.1 Bumps [acorn](https://github.com/acornjs/acorn) from 7.1.0 to 7.1.1. - [Release notes](https://github.com/acornjs/acorn/releases) - [Commits](https://github.com/acornjs/acorn/compare/7.1.0...7.1.1) Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a83044610..99e692a41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "compromise", - "version": "13.0.0", + "version": "13.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1303,9 +1303,9 @@ } }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true }, "amble": { From fd85e5c1abbc4f6145d516eef96b3e2b0b40e659 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 14 Apr 2020 19:08:52 -0400 Subject: [PATCH 11/24] some toSIngular fixes --- changelog.md | 1 + scratch.js | 26 ++++++++++++++++++-------- src/Subset/Nouns/methods.js | 26 +++++++++++++------------- src/transforms/toSingular/_rules.js | 3 ++- src/transforms/toSingular/index.js | 6 +++--- tests/nouns/inflect.test.js | 24 +++++++++++------------- 6 files changed, 48 insertions(+), 38 deletions(-) diff --git a/changelog.md b/changelog.md index 61e196058..8ca578434 100644 --- a/changelog.md +++ b/changelog.md @@ -16,6 +16,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - change handling of slashes - add `.world()` method to constructor - add more abbreviations +- fix regex backtracking #739 #### 13.1.1 diff --git a/scratch.js b/scratch.js index f5c339cec..8cae40537 100644 --- a/scratch.js +++ b/scratch.js @@ -4,12 +4,22 @@ const nlp = require('./src/index') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) -// let doc = nlp('i paid $5.50.') -// let doc = nlp('$5.32') +/* +### Tagging: +`in Hillsborough, California` +`based in Creston British Columbia` -let doc = nlp('hello 4 / 2 * 5 - 1 world').debug() -doc - .match('/[0-9] \\/ [0-9]/') - .debug() - .tag('Formula') -// doc.match('#Value+ (*|+|-) #Value+').tag('#Formula') +### article issues +`'20th-century American' - .article() -> a` +`sports people` +`` +`` +`The Football clubs in Morocco` +`Defunct tennis tournaments in the United States` +`The Expatriate football managers in Georgia ` +`rhythm and blues singer-songwriters` +*/ + +let doc = nlp('in Hillsborough, California') +doc.nouns().toSingular() +doc.debug() diff --git a/src/Subset/Nouns/methods.js b/src/Subset/Nouns/methods.js index 5574b0675..9d0612bdc 100644 --- a/src/Subset/Nouns/methods.js +++ b/src/Subset/Nouns/methods.js @@ -6,7 +6,7 @@ const parse = require('./parse') const methods = { /** overload the original json with noun information */ - json: function(options) { + json: function (options) { let n = null if (typeof options === 'number') { n = options @@ -14,7 +14,7 @@ const methods = { } options = options || { text: true, normal: true, trim: true, terms: true } let res = [] - this.forEach(doc => { + this.forEach((doc) => { let json = doc.json(options)[0] json.article = getArticle(doc) res.push(json) @@ -25,22 +25,22 @@ const methods = { return res }, /** get all adjectives describing this noun*/ - adjectives: function() { + adjectives: function () { let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+') list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')) list = list.match('#Adjective') return list.sort('index') }, - isPlural: function() { + isPlural: function () { return this.if('#Plural') //assume tagger has run? }, - hasPlural: function() { - return this.filter(d => hasPlural(d)) + hasPlural: function () { + return this.filter((d) => hasPlural(d)) }, - toPlural: function(agree) { + toPlural: function (agree) { let toPlural = this.world.transforms.toPlural - this.forEach(doc => { + this.forEach((doc) => { if (doc.has('#Plural') || hasPlural(doc) === false) { return } @@ -62,10 +62,10 @@ const methods = { }) return this }, - toSingular: function(agree) { + toSingular: function (agree) { let toSingular = this.world.transforms.toSingular - this.forEach(doc => { - if (doc.has('#Singular') || hasPlural(doc) === false) { + this.forEach((doc) => { + if (doc.has('^#Singular+$') || hasPlural(doc) === false) { return } // double-check it isn't an un-tagged plural @@ -90,8 +90,8 @@ const methods = { }) return this }, - toPossessive: function() { - this.forEach(d => { + toPossessive: function () { + this.forEach((d) => { toPossessive(d) }) return this diff --git a/src/transforms/toSingular/_rules.js b/src/transforms/toSingular/_rules.js index 4f1fea485..95fde22af 100644 --- a/src/transforms/toSingular/_rules.js +++ b/src/transforms/toSingular/_rules.js @@ -9,7 +9,8 @@ module.exports = [ [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'], [/(buffal|tomat|tornad)(oes)$/i, '$1o'], // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'], - [/(..[aeiou]s)es$/i, '$1'], + [/(eas)es$/i, '$1e'], //diseases + [/(..[aeiou]s)es$/i, '$1'], //geniouses [/(vert|ind|cort)(ices)$/i, '$1ex'], [/(matr|append)(ices)$/i, '$1ix'], [/(x|ch|ss|sh|z|o)es$/i, '$1'], diff --git a/src/transforms/toSingular/index.js b/src/transforms/toSingular/index.js index f56ec4692..aaada21b4 100644 --- a/src/transforms/toSingular/index.js +++ b/src/transforms/toSingular/index.js @@ -1,15 +1,15 @@ const rules = require('./_rules') -const invertObj = function(obj) { +const invertObj = function (obj) { return Object.keys(obj).reduce((h, k) => { h[obj[k]] = k return h }, {}) } -const toSingular = function(str, world) { +const toSingular = function (str, world) { let irregulars = world.irregulars.nouns - let invert = invertObj(irregulars) + let invert = invertObj(irregulars) //(not very efficient) // check irregulars list if (invert.hasOwnProperty(str)) { diff --git a/tests/nouns/inflect.test.js b/tests/nouns/inflect.test.js index cb1e0b04c..d3074260c 100644 --- a/tests/nouns/inflect.test.js +++ b/tests/nouns/inflect.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('../_lib') -test('isPlural:', function(t) { +test('isPlural:', function (t) { let arr = [ ['octopus', false], ['tree', false], @@ -19,10 +19,11 @@ test('isPlural:', function(t) { ["toronto's", false], ['circus', false], ['circuses', true], + ['circuses', true], // ['simpsons\'', false], // ['she\'s', false], ] - arr.forEach(function(a) { + arr.forEach(function (a) { const r = nlp(a[0]).nouns() const msg = a[0] t.equal(r.isPlural().found, a[1], msg) @@ -30,7 +31,7 @@ test('isPlural:', function(t) { t.end() }) -test('toSingular:', function(t) { +test('toSingular:', function (t) { let arr = [ // ["Joneses", "Jones"], ['children', 'child'], @@ -109,18 +110,17 @@ test('toSingular:', function(t) { ['parentheses', 'parenthesis'], ['theses', 'thesis'], ['bases', 'base'], + // ['Isley Brothers members', 'Isley Brothers member'], ] - arr.forEach(function(a) { - const r = nlp(a[0]) - .tag('Noun') - .nouns() - const str = r.toSingular().out('normal') + arr.forEach(function (a) { + const r = nlp(a[0]).tag('Noun').nouns() + const str = r.toSingular().text() t.equal(str, a[1], a[0]) }) t.end() }) -test('toPlural:', function(t) { +test('toPlural:', function (t) { let arr = [ ['snake', 'snakes'], ['ski', 'skis'], @@ -199,10 +199,8 @@ test('toPlural:', function(t) { ['studios', 'studios'], ['zoos', 'zoos'], ] - arr.forEach(function(a) { - const r = nlp(a[0]) - .tag('Noun') - .nouns() + arr.forEach(function (a) { + const r = nlp(a[0]).tag('Noun').nouns() const str = r.toPlural().out('normal') t.equal(str, a[1], a[0]) }) From e4583b5f75eedcc1768907b7f8572a07bdaeb15a Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Tue, 14 Apr 2020 19:19:47 -0400 Subject: [PATCH 12/24] minor tagging issues --- scratch.js | 7 ++----- src/02-tagger/01-init/04-suffixes.js | 6 +++--- src/02-tagger/01-init/data/suffixMap.js | 2 ++ src/02-tagger/01-init/index.js | 2 +- src/02-tagger/04-correction/index.js | 2 +- src/02-tagger/04-correction/matches/08-place.js | 7 +++++++ 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scratch.js b/scratch.js index 8cae40537..3ad86dd42 100644 --- a/scratch.js +++ b/scratch.js @@ -1,13 +1,10 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') // nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) /* -### Tagging: -`in Hillsborough, California` -`based in Creston British Columbia` ### article issues `'20th-century American' - .article() -> a` @@ -20,6 +17,6 @@ const nlp = require('./src/index') `rhythm and blues singer-songwriters` */ -let doc = nlp('in Hillsborough, California') +let doc = nlp('based in Creston British Columbia') doc.nouns().toSingular() doc.debug() diff --git a/src/02-tagger/01-init/04-suffixes.js b/src/02-tagger/01-init/04-suffixes.js index 2d4ba640a..2ee715bde 100644 --- a/src/02-tagger/01-init/04-suffixes.js +++ b/src/02-tagger/01-init/04-suffixes.js @@ -1,7 +1,7 @@ const endsWith = require('./data/endsWith') const suffixMap = require('./data/suffixMap') -const endRegexs = function(term, world) { +const endRegexs = function (term, world) { let str = term.clean let char = str[str.length - 1] if (endsWith.hasOwnProperty(char) === true) { @@ -16,7 +16,7 @@ const endRegexs = function(term, world) { } //sweep-through all suffixes -const knownSuffixes = function(term, world) { +const knownSuffixes = function (term, world) { const len = term.clean.length let max = 7 if (len <= max) { @@ -33,7 +33,7 @@ const knownSuffixes = function(term, world) { } //all-the-way-down! -const checkRegex = function(term, world) { +const checkRegex = function (term, world) { knownSuffixes(term, world) endRegexs(term, world) } diff --git a/src/02-tagger/01-init/data/suffixMap.js b/src/02-tagger/01-init/data/suffixMap.js index f2bcdc940..630ae79d7 100644 --- a/src/02-tagger/01-init/data/suffixMap.js +++ b/src/02-tagger/01-init/data/suffixMap.js @@ -11,6 +11,7 @@ const Vb = 'Verb' const Noun = 'Noun' const Last = 'LastName' const Modal = 'Modal' +const Place = 'Place' // find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup module.exports = [ @@ -126,6 +127,7 @@ module.exports = [ { //7-letter opoulos: Last, //greek + borough: Place, //Hillsborough sdottir: Last, //swedish female }, ] diff --git a/src/02-tagger/01-init/index.js b/src/02-tagger/01-init/index.js index a13989479..0522b5dd0 100644 --- a/src/02-tagger/01-init/index.js +++ b/src/02-tagger/01-init/index.js @@ -7,7 +7,7 @@ const steps = { } //'lookups' look at a term by itself -const lookups = function(doc, terms) { +const lookups = function (doc, terms) { let world = doc.world //our list of known-words steps.lexicon(terms, world) diff --git a/src/02-tagger/04-correction/index.js b/src/02-tagger/04-correction/index.js index cd1d74bee..b14d0837c 100644 --- a/src/02-tagger/04-correction/index.js +++ b/src/02-tagger/04-correction/index.js @@ -5,7 +5,7 @@ const runner = require('./runner') // misc: 40ms //sequence of match-tag statements to correct mis-tags -const corrections = function(doc) { +const corrections = function (doc) { runner(doc) fixMisc(doc) return doc diff --git a/src/02-tagger/04-correction/matches/08-place.js b/src/02-tagger/04-correction/matches/08-place.js index 4baf11f84..e3724dfb8 100644 --- a/src/02-tagger/04-correction/matches/08-place.js +++ b/src/02-tagger/04-correction/matches/08-place.js @@ -27,6 +27,13 @@ let list = [ tag: 'Region', reason: 'district-of-Foo', }, + // in Foo California + { + match: 'in [#ProperNoun] #Place', + group: 0, + tag: 'Place', + reason: 'propernoun-place', + }, // ==== Address ==== { From ea1592c6190c33e4d0ce9a98bd5488b41fbfc5b0 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 16 Apr 2020 10:44:47 -0400 Subject: [PATCH 13/24] remove irregulars data from tokenize build --- builds/compromise-tokenize.js | 2 +- rollup.config.js | 2 ++ src/World/_data.js | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 7eaea0efe..0dadcc92b 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},M={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},W={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},M,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=L(this,e)[0]),r}},G=Object.assign({},_,T,z,q,W);function H(){return"undefined"!=typeof window&&window.document}var U=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,G),Object.assign(rt.prototype,et);var nt=rt,it={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ot(o)),!0===t.trim&&(o=o.trim()),o}},at={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ut=/[.?!]\s*$/,ct=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ut.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,r){var n=t.terms(),i=e.terms();ct(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ht=/ /,ft=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ht.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},pt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},dt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return ft(this,t,e),this},delete:function(t){return pt(this,t),this},replace:function(t,e){var r=this.length;lt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,pt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},gt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},vt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},mt=Object.assign({},it,st,at,dt,gt,vt),bt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},yt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=$t(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},Pt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},xt=/\{([0-9]+,?[0-9]*)\}/,kt=/&&/,jt=new RegExp(/^<(\S+)>/),Ot=function(t){return t[t.length-1]},Et=function(t){return t[0]},Ct=function(t){return t.substr(1)},_t=function(t){return t.substr(0,t.length-1)},Tt=function(t){return t=Ct(t),t=_t(t)},Ft=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Ot(e)&&(n.end=!0,e=_t(e)),"^"===Et(e)&&(n.start=!0,e=Ct(e)),("["===Et(e)||"]"===Ot(e))&&(n.named=!0,"["===Et(e)?n.groupType="]"===Ot(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Et(e))){var o=jt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Ot(e)&&(n.greedy=!0,e=_t(e)),"*"!==e&&"*"===Ot(e)&&"\\*"!==e&&(n.greedy=!0,e=_t(e)),"?"===Ot(e)&&(n.optional=!0,e=_t(e)),"!"===Et(e)&&(n.negative=!0,e=Ct(e)),"("===Et(e)&&")"===Ot(e)){kt.test(e)?(n.choices=e.split(kt),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Ct(n.choices[0]);var s=n.choices.length-1;n.choices[s]=_t(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Et(e)&&"/"===Ot(e))return e=Tt(e),n.regex=new RegExp(e),n;if("~"===Et(e)&&"~"===Ot(e))return e=Tt(e),n.soft=!0,n.word=e,n}return!0===xt.test(e)&&(e=e.replace(xt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Et(e)?(n.tag=Ct(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Et(e)?(n.method=Ct(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Nt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Ft),r=Nt(r)},St=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Vt(e)),!0===bt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=At(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),Pt(i,e,o)}for(var h=0;hi.length);h+=1){var f=At(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return Pt(i,e,o)}return Pt(i,e,o)},zt=function(t,e){var r={};St(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},Bt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=St(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return St(this,t,!0).length>0},not:function(t){var e=this,r=zt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},Dt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Dt.prototype.buildFrom=function(t,e,r){var n=new Dt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Dt.prototype,Bt),Object.assign(Dt.prototype,mt);var qt={term:"terms"};Object.keys(qt).forEach((function(t){return Dt.prototype[t]=Dt.prototype[qt[t]]}));var It=Dt,Lt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Lt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Lt(e)};for(var Mt=Lt,Wt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Gt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Ut=/[ .][A-Z]\.? *$/i,Qt=/(?:\u2026|\.{2,}) *$/,Rt=/((?:\r?\n|\r)+)/,Zt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Jt=/^\s+/,Yt=function(t,e){if(!0===Ut.test(t))return!1;if(!0===Qt.test(t))return!1;if(!1===Zt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Kt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Rt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Kt(t,e);n=n.map((function(t){return se(t)})),r=r||new Mt;var i=n.map((function(t){t=t.map((function(t){var e=new nt(t);return r.add(e),e})),Wt(t);var e=new It(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ue=function(t,e){var r=new Mt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new nt(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Wt(i),new It(i[0].id,i.length,r)}))},ce={},le=["Person","Place","Organization"],he={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},fe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pe={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},de=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ge={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:de},Conjunction:{notA:de},Preposition:{notA:de},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ve={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},me=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ve[e]?t[e].color=ve[e]:t[e].isA.some((function(r){return!!ve[r]&&(t[e].color=ve[r],!0)}))})),t},be=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Se.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},De(t),r)).Gerund&&(r.Gerund=Ie.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Ie.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Ie.PresentTense(t)),r},Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],We=[/ary$/],Ge={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},He=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Ue=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Qe=[/ary$/,/ous$/],Re={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ze=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],Je={toSuperlative:function(t){if(Ge.hasOwnProperty(t))return Ge[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=tr(t);return null!==n?n:Xe.test(t)?t+"es":t+"s"},rr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],nr=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),br={tag:function(t,e){return t?(mr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(mr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},yr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},$r=function(t){return t.split(/[ -]/g)},wr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=$r(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=xr(s)),o=ae(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},jr=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ae(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Cr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Tr=(_r.json,_r.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Vr.alphabetical=Vr.alpha,Vr.wordcount=Vr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},zr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Sr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===tn.test(o)){var a=o.replace(tn,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},nn=function(t){var e=t.termList();return rn(e,t.world),t},on=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},sn=/\./,an=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===sn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},un=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},cn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return nn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();In.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new In(t,this,this.world)},In.prototype.fromText=function(t){var e=ae(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(In.prototype,qn.misc),Object.assign(In.prototype,qn.selections),Dn(In);var Ln={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ln).forEach((function(t){return In.prototype[t]=In.prototype[Ln[t]]}));var Mn=In;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ae(t,r),i=new Mn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ae(t,n),o=new Mn(i,null,n);return e&&nn(o),o},n.extend=function(t){return t(Mn,r,this,It,nt,Mt),this},n.fromJSON=function(t){var e=ue(t,r);return new Mn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.version="13.1.1",n.import=n.load,n}(new fr)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},W={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},G={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},W,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=M(this,e)[0]),r}},U=Object.assign({},T,F,z,q,G);function _(){return"undefined"!=typeof window&&window.document}var H=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();nt.prototype.clone=function(){var t=new nt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(nt.prototype,U),Object.assign(nt.prototype,rt);var it=nt,ot={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=st(o)),!0===t.trim&&(o=o.trim()),o}},ut={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ct=/[.?!]\s*$/,lt=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ct.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},ht=function(t,e,r){var n=t.terms(),i=e.terms();lt(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ft=/ /,pt=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ft.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},dt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},gt={append:function(t,e){return ht(this,t,e),this},prepend:function(t,e){return pt(this,t,e),this},delete:function(t){return dt(this,t),this},replace:function(t,e){var r=this.length;ht(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,dt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},vt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},mt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},bt=Object.assign({},ot,at,ut,gt,vt,mt),yt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},$t=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=At(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},xt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},jt=/\{([0-9]+,?[0-9]*)\}/,Ot=/&&/,kt=new RegExp(/^<(\S+)>/),Et=function(t){return t[t.length-1]},Ct=function(t){return t[0]},Tt=function(t){return t.substr(1)},Ft=function(t){return t.substr(0,t.length-1)},Nt=function(t){return t=Tt(t),t=Ft(t)},Vt=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Et(e)&&(n.end=!0,e=Ft(e)),"^"===Ct(e)&&(n.start=!0,e=Tt(e)),("["===Ct(e)||"]"===Et(e))&&(n.named=!0,"["===Ct(e)?n.groupType="]"===Et(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ct(e))){var o=kt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Et(e)&&(n.greedy=!0,e=Ft(e)),"*"!==e&&"*"===Et(e)&&"\\*"!==e&&(n.greedy=!0,e=Ft(e)),"?"===Et(e)&&(n.optional=!0,e=Ft(e)),"!"===Ct(e)&&(n.negative=!0,e=Tt(e)),"("===Ct(e)&&")"===Et(e)){Ot.test(e)?(n.choices=e.split(Ot),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Tt(n.choices[0]);var s=n.choices.length-1;n.choices[s]=Ft(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Ct(e)&&"/"===Et(e))return e=Nt(e),n.regex=new RegExp(e),n;if("~"===Ct(e)&&"~"===Et(e))return e=Nt(e),n.soft=!0,n.word=e,n}return!0===jt.test(e)&&(e=e.replace(jt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Ct(e)?(n.tag=Tt(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Ct(e)?(n.method=Tt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},St=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Vt),r=St(r)},zt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Bt(e)),!0===yt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=Pt(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),xt(i,e,o)}for(var h=0;hi.length);h+=1){var f=Pt(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return xt(i,e,o)}return xt(i,e,o)},Dt=function(t,e){var r={};zt(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},It={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=zt(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return zt(this,t,!0).length>0},not:function(t){var e=this,r=Dt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},qt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};qt.prototype.buildFrom=function(t,e,r){var n=new qt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(qt.prototype,It),Object.assign(qt.prototype,bt);var Lt={term:"terms"};Object.keys(Lt).forEach((function(t){return qt.prototype[t]=qt.prototype[Lt[t]]}));var Mt=qt,Wt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Wt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Wt(e)};var Gt=Wt,Ut=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},_t=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Qt=/[ .][A-Z]\.? *$/i,Rt=/(?:\u2026|\.{2,}) *$/,Zt=/((?:\r?\n|\r)+)/,Jt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Yt=/^\s+/,Kt=function(t,e){if(!0===Qt.test(t))return!1;if(!0===Rt.test(t))return!1;if(!1===Jt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Xt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Zt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Xt(t,e);n=n.map((function(t){return ae(t)})),r=r||new Gt;var i=n.map((function(t){t=t.map((function(t){var e=new it(t);return r.add(e),e})),Ut(t);var e=new Mt(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ce=function(t,e){var r=new Gt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new it(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Ut(i),new Mt(i[0].id,i.length,r)}))},le={},he=["Person","Place","Organization"],fe={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:he},Actor:{isA:"Noun",notA:he},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:he},Demonym:{isA:["Noun","ProperNoun"],notA:he},Possessive:{isA:"Noun"}},pe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},de={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ge=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ve={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ge},Conjunction:{notA:ge},Preposition:{notA:ge},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},me={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},be=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:me[e]?t[e].color=me[e]:t[e].isA.some((function(r){return!!me[r]&&(t[e].color=me[r],!0)}))})),t},ye=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Te.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},Ve(t),r)).Gerund&&(r.Gerund=Be.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Be.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Be.PresentTense(t)),r},De=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Ie=[/ary$/],qe={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Le=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],We=[/ary$/,/ous$/],Ge={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ue=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],_e={toSuperlative:function(t){if(qe.hasOwnProperty(t))return qe[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=Ze(t);return null!==n?n:Re.test(t)?t+"es":t+"s"},Ye=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(eas)es$/i,"$1e"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],Ke=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),pr={tag:function(t,e){return t?(fr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(fr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},dr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},gr=function(t){return t.split(/[ -]/g)},vr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=gr(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=yr(s)),o=ue(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},Ar=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ue(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ue(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&xr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Or=(jr.json,jr.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Cr.alphabetical=Cr.alpha,Cr.wordcount=Cr.wordCount;var Tr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Fr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Tr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Zr.test(o)){var a=o.replace(Zr,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},Kr=function(t){var e=t.termList();return Yr(e,t.world),t},Xr=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},tn=/\./,en=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===tn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},rn=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},nn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return Kr(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();Bn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new Bn(t,this,this.world)},Bn.prototype.fromText=function(t){var e=ue(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(Bn.prototype,Sn.misc),Object.assign(Bn.prototype,Sn.selections),Vn(Bn);var zn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(zn).forEach((function(t){return Bn.prototype[t]=Bn.prototype[zn[t]]}));var Dn=Bn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ue(t,r),i=new Dn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ue(t,n),o=new Dn(i,null,n);return e&&Kr(o),o},n.extend=function(t){return t(Dn,r,this,Mt,it,Gt),this},n.fromJSON=function(t){var e=ce(t,r);return new Dn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.world=function(){return r},n.version="13.1.1",n.import=n.load,n}(new ar)})); diff --git a/rollup.config.js b/rollup.config.js index d3b7abbe3..52886d518 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -25,6 +25,8 @@ export default [ alias({ //remove a bunch of imports with no-ops entries: [ + { find: './data/conjugations', replacement: __dirname + '/scripts/build/no-ops/_object' }, + { find: './data/plurals', replacement: __dirname + '/scripts/build/no-ops/_object' }, { find: './_data', replacement: __dirname + '/scripts/build/no-ops/_object' }, { find: '../02-tagger', replacement: __dirname + '/src/02-tagger/tiny' }, { find: 'efrt-unpack', replacement: __dirname + '/scripts/build/no-ops/_function' }, diff --git a/src/World/_data.js b/src/World/_data.js index 011eea381..8fb7f9549 100644 --- a/src/World/_data.js +++ b/src/World/_data.js @@ -19,7 +19,7 @@ module.exports={ "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", From b67bf94e803cdbb79d008b6158945771ceca79af Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 16 Apr 2020 10:48:34 -0400 Subject: [PATCH 14/24] remove sourcemaps from build --- changelog.md | 2 ++ rollup.config.js | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 8ca578434..2ecf4dfaa 100644 --- a/changelog.md +++ b/changelog.md @@ -17,6 +17,8 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - add `.world()` method to constructor - add more abbreviations - fix regex backtracking #739 +- remove conjugation and inflection data from tokenize build +- remove sourcemaps from build #### 13.1.1 diff --git a/rollup.config.js b/rollup.config.js index 52886d518..4e7258e96 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -27,6 +27,7 @@ export default [ entries: [ { find: './data/conjugations', replacement: __dirname + '/scripts/build/no-ops/_object' }, { find: './data/plurals', replacement: __dirname + '/scripts/build/no-ops/_object' }, + { find: './data/misc', replacement: __dirname + '/scripts/build/no-ops/_object' }, { find: './_data', replacement: __dirname + '/scripts/build/no-ops/_object' }, { find: '../02-tagger', replacement: __dirname + '/src/02-tagger/tiny' }, { find: 'efrt-unpack', replacement: __dirname + '/scripts/build/no-ops/_function' }, @@ -52,7 +53,7 @@ export default [ }, { input: 'src/index.js', - output: [{ banner: banner, file: 'builds/compromise.js', format: 'umd', sourcemap: true, name: 'nlp' }], + output: [{ banner: banner, file: 'builds/compromise.js', format: 'umd', sourcemap: false, name: 'nlp' }], plugins: [ resolve(), json(), From 4c40b18fa3fe42c086eb9da9198fa2d61b8590e9 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Thu, 16 Apr 2020 10:56:45 -0400 Subject: [PATCH 15/24] remove transforms from tokenize build --- builds/compromise-tokenize.js | 2 +- builds/compromise.js | 128 ++++++++++++++++++++++++++-------- builds/compromise.js.map | 1 - builds/compromise.min.js | 2 +- builds/compromise.mjs | 128 ++++++++++++++++++++++++++-------- rollup.config.js | 17 +++-- 6 files changed, 210 insertions(+), 68 deletions(-) delete mode 100644 builds/compromise.js.map diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 0dadcc92b..48e83f4b0 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},W={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},G={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},W,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=M(this,e)[0]),r}},U=Object.assign({},T,F,z,q,G);function _(){return"undefined"!=typeof window&&window.document}var H=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=l(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=E(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();nt.prototype.clone=function(){var t=new nt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(nt.prototype,U),Object.assign(nt.prototype,rt);var it=nt,ot={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=st(o)),!0===t.trim&&(o=o.trim()),o}},ut={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ct=/[.?!]\s*$/,lt=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ct.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},ht=function(t,e,r){var n=t.terms(),i=e.terms();lt(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ft=/ /,pt=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ft.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},dt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},gt={append:function(t,e){return ht(this,t,e),this},prepend:function(t,e){return pt(this,t,e),this},delete:function(t){return dt(this,t),this},replace:function(t,e){var r=this.length;ht(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,dt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},vt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},mt={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},bt=Object.assign({},ot,at,ut,gt,vt,mt),yt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},$t=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var g=At(t,s,e[a+1],u,r);if(void 0!==u.min&&g-su.max){s+=u.max;continue}if(null===g)return[!1,null];c&&(wt(i,h,t,s,u.named).length=g-s),s=g}}return[t.slice(0,s),i]},xt=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},jt=/\{([0-9]+,?[0-9]*)\}/,Ot=/&&/,kt=new RegExp(/^<(\S+)>/),Et=function(t){return t[t.length-1]},Ct=function(t){return t[0]},Tt=function(t){return t.substr(1)},Ft=function(t){return t.substr(0,t.length-1)},Nt=function(t){return t=Tt(t),t=Ft(t)},Vt=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Et(e)&&(n.end=!0,e=Ft(e)),"^"===Ct(e)&&(n.start=!0,e=Tt(e)),("["===Ct(e)||"]"===Et(e))&&(n.named=!0,"["===Ct(e)?n.groupType="]"===Et(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ct(e))){var o=kt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Et(e)&&(n.greedy=!0,e=Ft(e)),"*"!==e&&"*"===Et(e)&&"\\*"!==e&&(n.greedy=!0,e=Ft(e)),"?"===Et(e)&&(n.optional=!0,e=Ft(e)),"!"===Ct(e)&&(n.negative=!0,e=Tt(e)),"("===Ct(e)&&")"===Et(e)){Ot.test(e)?(n.choices=e.split(Ot),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Tt(n.choices[0]);var s=n.choices.length-1;n.choices[s]=Ft(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===Ct(e)&&"/"===Et(e))return e=Nt(e),n.regex=new RegExp(e),n;if("~"===Ct(e)&&"~"===Et(e))return e=Nt(e),n.soft=!0,n.word=e,n}return!0===jt.test(e)&&(e=e.replace(jt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Ct(e)?(n.tag=Tt(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Ct(e)?(n.method=Tt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},St=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(Vt),r=St(r)},zt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Bt(e)),!0===yt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=Pt(i,e,0,i.length),a=u(s,2),c=a[0],l=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:l})),xt(i,e,o)}for(var h=0;hi.length);h+=1){var f=Pt(i.slice(h),e,h,i.length),p=u(f,2),d=p[0],g=p[1];if(!1!==d&&d.length>0&&(h+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:g}),!0===r))return xt(i,e,o)}return xt(i,e,o)},Dt=function(t,e){var r={};zt(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},It={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=zt(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return zt(this,t,!0).length>0},not:function(t){var e=this,r=Dt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},qt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};qt.prototype.buildFrom=function(t,e,r){var n=new qt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(qt.prototype,It),Object.assign(qt.prototype,bt);var Lt={term:"terms"};Object.keys(Lt).forEach((function(t){return qt.prototype[t]=qt.prototype[Lt[t]]}));var Mt=qt,Wt=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Wt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Wt(e)};var Gt=Wt,Ut=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},_t=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ht=/\S/,Qt=/[ .][A-Z]\.? *$/i,Rt=/(?:\u2026|\.{2,}) *$/,Zt=/((?:\r?\n|\r)+)/,Jt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Yt=/^\s+/,Kt=function(t,e){if(!0===Qt.test(t))return!1;if(!0===Rt.test(t))return!1;if(!1===Jt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},Xt=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Ht.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Zt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var l=1;l0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=Xt(t,e);n=n.map((function(t){return ae(t)})),r=r||new Gt;var i=n.map((function(t){t=t.map((function(t){var e=new it(t);return r.add(e),e})),Ut(t);var e=new Mt(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},ce=function(t,e){var r=new Gt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new it(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Ut(i),new Mt(i[0].id,i.length,r)}))},le={},he=["Person","Place","Organization"],fe={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:he},Actor:{isA:"Noun",notA:he},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:he},Demonym:{isA:["Noun","ProperNoun"],notA:he},Possessive:{isA:"Noun"}},pe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},de={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ge=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ve={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ge},Conjunction:{notA:ge},Preposition:{notA:ge},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},me={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},be=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:me[e]?t[e].color=me[e]:t[e].isA.some((function(r){return!!me[r]&&(t[e].color=me[r],!0)}))})),t},ye=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c0&&void 0!==arguments[0]?arguments[0]:"",e=t[t.length-1];if(!0===Te.hasOwnProperty(e))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r={};return e&&e.irregulars&&!0===e.irregulars.verbs.hasOwnProperty(t)&&(r=Object.assign({},e.irregulars.verbs[t])),void 0===(r=Object.assign({},Ve(t),r)).Gerund&&(r.Gerund=Be.Gerund(t)),void 0===r.PastTense&&(r.PastTense=Be.PastTense(t)),void 0===r.PresentTense&&(r.PresentTense=Be.PresentTense(t)),r},De=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Ie=[/ary$/],qe={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Le=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Me=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],We=[/ary$/,/ous$/],Ge={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},Ue=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],_e={toSuperlative:function(t){if(qe.hasOwnProperty(t))return qe[t];for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=e.irregulars.nouns;if(r.hasOwnProperty(t))return r[t];var n=Ze(t);return null!==n?n:Re.test(t)?t+"es":t+"s"},Ye=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(eas)es$/i,"$1e"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],Ke=function(t,e){var r,n=e.irregulars.nouns,i=(r=n,Object.keys(r).reduce((function(t,e){return t[r[e]]=e,t}),{}));if(i.hasOwnProperty(t))return i[t];for(var o=0;o1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),pr={tag:function(t,e){return t?(fr(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(fr(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},dr={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},gr=function(t){return t.split(/[ -]/g)},vr=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=gr(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=yr(s)),o=ue(s,r.world,r.pool()),r.buildFrom(o).tagger()}if(!0===n.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},Ar=C((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ue(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=ue(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&xr(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),Or=(jr.json,jr.data,C((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};Cr.alphabetical=Cr.alpha,Cr.wordcount=Cr.wordCount;var Tr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Fr={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):Tr.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Zr.test(o)){var a=o.replace(Zr,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},Kr=function(t){var e=t.termList();return Yr(e,t.world),t},Xr=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},tn=/\./,en=function(t){var r=function(t){function r(){return e(this,r),a(this,o(r).apply(this,arguments))}return i(r,t),n(r,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===tn.test(t.post)&&(e+="."),t.set(e)})),this}}]),r}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},rn=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},nn=function(t){var r=function(t){function r(t,n,i){var s;return e(this,r),(s=a(this,o(r).call(this,t,n,i))).contracted=null,s}return i(r,t),n(r,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return Kr(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();Bn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new Bn(t,this,this.world)},Bn.prototype.fromText=function(t){var e=ue(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(Bn.prototype,Sn.misc),Object.assign(Bn.prototype,Sn.selections),Vn(Bn);var zn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(zn).forEach((function(t){return Bn.prototype[t]=Bn.prototype[zn[t]]}));var Dn=Bn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=ue(t,r),i=new Dn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=ue(t,n),o=new Dn(i,null,n);return e&&Kr(o),o},n.extend=function(t){return t(Dn,r,this,Mt,it,Gt),this},n.fromJSON=function(t){var e=ce(t,r);return new Dn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.world=function(){return r},n.version="13.1.1",n.import=n.load,n}(new ar)})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;nr[e].lineage.length?1:r[t].isA.length>r[e].isA.length?-1:0:0:1}))},W={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},U={json:function(t,e){t=t||{};var n={};return(t=Object.assign({},W,t)).text&&(n.text=this.text),t.normal&&(n.normal=this.normal),t.tags&&(n.tags=Object.keys(this.tags)),t.clean&&(n.clean=this.clean),(t.id||t.offset)&&(n.id=this.id),t.implicit&&null!==this.implicit&&(n.implicit=this.implicit),t.whitespace&&(n.pre=this.pre,n.post=this.post),t.bestTag&&(n.bestTag=z(this,e)[0]),n}},_=Object.assign({},T,N,I,L,U);function H(){return"undefined"!=typeof window&&window.document}var G=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),n=String(n);var r=k(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=h(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(t,[{key:"set",value:function(t){var e=k(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,_),Object.assign(rt.prototype,nt);var it=rt,ot={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),i=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(i=!0);var o=r.reduce((function(o,s,a){t.last=n&&a===r.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===r.length-1&&n&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&n&&(o=st(o)),!0===t.trim&&(o=o.trim()),o}},ut={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ct=/[.?!]\s*$/,ht=function(t,e){e[0].pre=t[0].pre;var n,r,i=t[t.length-1],o=e[e.length-1];o.post=(n=i.post,r=o.post,ct.test(r)?r+n.match(/\s*$/):n),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,n){var r=t.terms(),i=e.terms();ht(r,i),function(t,e,n){var r=t[t.length-1],i=e[e.length-1],o=r.next;(r.next=e[0].id,i.next=o,o)&&(n.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(r,i,t.pool);var o,s=[t],a=t.start,u=[n];return(u=u.concat(n.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ft=/ /,pt=function(t,e,n){var r=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ft.test(e.post)&&(e.post+=" ")}(i),function(t,e,n){var r=n[n.length-1];r.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);n[0].prev=t.terms(0).prev,t.terms(0).prev=r.id}(t,e,i);var o,s=[t],a=[n];return(a=a.concat(n.parents())).forEach((function(t){var n=t.list.filter((function(t){return t.hasId(r)||t.hasId(e.start)}));s=s.concat(n)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===r&&(t.start=e.start),t.cache={}})),t},dt=function(t,e){var n=e.pool(),r=t.terms(),i=n.get(r[0].prev)||{},o=n.get(r[r.length-1].next)||{};r[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,n,r){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=n,i.start===e&&(i.start=r.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},vt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return pt(this,t,e),this},delete:function(t){return dt(this,t),this},replace:function(t,e){var n=this.length;lt(this,t,e);var r=this.buildFrom(this.start,this.length);r.length=n,dt(r,e)},splitOn:function(t){var e=this.terms(),n={before:null,match:null,after:null},r=e.findIndex((function(e){return e.id===t.start}));if(-1===r)return n;var i=e.slice(0,r);i.length>0&&(n.before=this.buildFrom(i[0].id,i.length));var o=e.slice(r,r+t.length);o.length>0&&(n.match=this.buildFrom(o[0].id,o.length));var s=e.slice(r+t.length,e.length);return s.length>0&&(n.after=this.buildFrom(s[0].id,s.length,this.pool)),n}},mt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n={};return t.text&&(n.text=this.text()),t.normal&&(n.normal=this.text("normal")),t.clean&&(n.clean=this.text("clean")),t.reduced&&(n.reduced=this.text("reduced")),t.root&&(n.root=this.text("root")),t.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),n.terms=this.terms().map((function(n){return n.json(t.terms,e)}))),n}},gt={lookAhead:function(t){t||(t=".*");var e=this.pool,n=[],r=this.terms();return function t(r){var i=e.get(r);i&&(n.push(i),i.prev&&t(i.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,n=[];return function t(r){var i=e.get(r);i&&(n.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(t)}},bt=Object.assign({},ot,at,ut,vt,mt,gt),yt=function(t,e){if(0===e.length)return!0;for(var n=0;n0)return!0;if(!0===r.anything&&!0===r.negative)return!0}return!1},At=function(t,e,n,r,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,n+s,r)))return[!1,null];s+=2}}else{var v=wt(t,s,e[a+1],u,n);if(void 0!==u.min&&v-su.max){s+=u.max;continue}if(null===v)return[!1,null];c&&(Pt(i,l,t,s,u.named).length=v-s),s=v}}return[t.slice(0,s),i]},jt=function(t,e,n){if(!n||0===n.length)return n;if(e.some((function(t){return t.end}))){var r=t[t.length-1];n=n.filter((function(t){return-1!==t.match.indexOf(r)}))}return n},Et=/\{([0-9]+,?[0-9]*)\}/,Ot=/&&/,Ct=new RegExp(/^<(\S+)>/),kt=function(t){return t[t.length-1]},Ft=function(t){return t[0]},Tt=function(t){return t.substr(1)},Nt=function(t){return t.substr(0,t.length-1)},Vt=function(t){return t=Tt(t),t=Nt(t)},$t=function t(e){for(var n,r={},i=0;i<2;i+=1){if("$"===kt(e)&&(r.end=!0,e=Nt(e)),"^"===Ft(e)&&(r.start=!0,e=Tt(e)),("["===Ft(e)||"]"===kt(e))&&(r.named=!0,"["===Ft(e)?r.groupType="]"===kt(e)?"single":"start":r.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ft(e))){var o=Ct.exec(e);o.length>=2&&(r.named=o[1],e=e.replace(o[0],""))}if("+"===kt(e)&&(r.greedy=!0,e=Nt(e)),"*"!==e&&"*"===kt(e)&&"\\*"!==e&&(r.greedy=!0,e=Nt(e)),"?"===kt(e)&&(r.optional=!0,e=Nt(e)),"!"===Ft(e)&&(r.negative=!0,e=Tt(e)),"("===Ft(e)&&")"===kt(e)){Ot.test(e)?(r.choices=e.split(Ot),r.operator="and"):(r.choices=e.split("|"),r.operator="or"),r.choices[0]=Tt(r.choices[0]);var s=r.choices.length-1;r.choices[s]=Nt(r.choices[s]),r.choices=r.choices.map((function(t){return t.trim()})),r.choices=r.choices.filter((function(t){return t})),r.choices=r.choices.map(t),e=""}if("/"===Ft(e)&&"/"===kt(e))return e=Vt(e),r.regex=new RegExp(e),r;if("~"===Ft(e)&&"~"===kt(e))return e=Vt(e),r.soft=!0,r.word=e,r}return!0===Et.test(e)&&(e=e.replace(Et,(function(t,e){var n=e.split(/,/g);return 1===n.length?(r.min=Number(n[0]),r.max=Number(n[0])):(r.min=Number(n[0]),r.max=Number(n[1]||999)),r.greedy=!0,""}))),"#"===Ft(e)?(r.tag=Tt(e),r.tag=(n=r.tag).charAt(0).toUpperCase()+n.substr(1),r):"@"===Ft(e)?(r.method=Tt(e),r):"."===e?(r.anything=!0,r):"*"===e?(r.anything=!0,r.greedy=!0,r.optional=!0,r):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),r.word=e.toLowerCase()),r)},St=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,n,r=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return n=(n=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var n=t.split(" ");n=n.filter((function(t){return t})),e=e.concat(n)}})),e}(n)).map($t),n=St(n)},It=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Bt(e)),!0===yt(t,e))return[];var r=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=xt(i,e,0,i.length),a=u(s,2),c=a[0],h=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:h})),jt(i,e,o)}for(var l=0;li.length);l+=1){var f=xt(i.slice(l),e,l,i.length),p=u(f,2),d=p[0],v=p[1];if(!1!==d&&d.length>0&&(l+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:v}),!0===n))return jt(i,e,o)}return jt(i,e,o)},Dt=function(t,e){var n={};It(t,e).forEach((function(t){t.match.forEach((function(t){n[t.id]=!0}))}));var r=t.terms(),i=[],o=[];return r.forEach((function(t){!0!==n[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},qt={match:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=It(this,t,n);return r=r.map((function(t){var n=t.match,r=t.groups,i=e.buildFrom(n[0].id,n.length,r);return i.cache.terms=n,i}))},has:function(t){return It(this,t,!0).length>0},not:function(t){var e=this,n=Dt(this,t);return n=n.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var n=this,r=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return n.buildFrom(t[0].id,t.length)}))}},Lt=function t(n,r,i){e(this,t),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Lt.prototype.buildFrom=function(t,e,n){var r=new Lt(t,e,this.pool);return n&&Object.keys(n).length>0?r.groups=n:r.groups=this.groups,r},Object.assign(Lt.prototype,qt),Object.assign(Lt.prototype,bt);var Mt={term:"terms"};Object.keys(Mt).forEach((function(t){return Lt.prototype[t]=Lt.prototype[Mt[t]]}));var zt=Lt,Wt=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Wt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,n){var r=t.words[n].clone();return e[r.id]=r,e}),{});return new Wt(e)};var Ut=Wt,_t=function(t){t.forEach((function(e,n){n>0&&(e.prev=t[n-1].id),t[n+1]&&(e.next=t[n+1].id)}))},Ht=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Gt=/\S/,Qt=/[ .][A-Z]\.? *$/i,Rt=/(?:\u2026|\.{2,}) *$/,Zt=/((?:\r?\n|\r)+)/,Jt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Yt=/^\s+/,Kt=function(t,e){if(!0===Qt.test(t))return!1;if(!0===Rt.test(t))return!1;if(!1===Jt.test(t))return!1;var n=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!e.hasOwnProperty(r)},Xt=function(t,e){var n=e.cache.abbreviations;t=t||"";var r=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Gt.test(t))return r;for(var o=function(t){for(var e=[],n=t.split(Zt),r=0;r0&&(r.push(c),i[u]="")}if(0===r.length)return[t];for(var h=1;h0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var r=Xt(t,e);r=r.map((function(t){return ae(t)})),n=n||new Ut;var i=r.map((function(t){t=t.map((function(t){var e=new it(t);return n.add(e),e})),_t(t);var e=new zt(t[0].id,t.length,n);return e.cache.terms=t,e}));return i},ce=function(t,e){var n=new Ut;return t.map((function(t,r){var i=t.terms.map((function(i,o){var s=new it(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",r>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),n.add(s),s}));return _t(i),new zt(i[0].id,i.length,n)}))},he={},le=["Person","Place","Organization"],fe={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},pe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},de={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ve=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],me={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ve},Conjunction:{notA:ve},Preposition:{notA:ve},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ge={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},be=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ge[e]?t[e].color=ge[e]:t[e].isA.some((function(n){return!!ge[n]&&(t[e].color=ge[n],!0)}))})),t},ye=function(t){return Object.keys(t).forEach((function(e){for(var n=t[e],r=n.isA.length,i=0;i1&&(n.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,n);r[s]=r[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,n),u=Object.keys(a),c=0;c1?i[o]&&"."!==i[o]&&n.tag(i[o],r,e.world):n.tag(t,r,e.world)}))}))}),ze={tag:function(t,e){return t?(Me(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(Me(t,this,!0,e),this):this},unTag:function(t,e){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(t,e,n.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(t,e))}),[]);return this.buildFrom(n)}},We={map:function(e){var n=this;if(!e)return this;var r=this.list.map((function(t,r){var i=n.buildFrom([t]);i.from=null;var o=e(i,r);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(r=r.filter((function(t){return t}))).length?this.buildFrom(r):"object"!==t(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(t,e){var n=this;return t?(this.list.forEach((function(r,i){var o=n.buildFrom([r]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var n=this.list.filter((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)}));return this.buildFrom(n)},find:function(t){var e=this;if(!t)return this;var n=this.list.find((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)}));return n?this.buildFrom([n]):void 0},some:function(t){var e=this;return t?this.list.some((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var n=[this.list[e]];return this.buildFrom(n)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},Ue=function(t){return t.split(/[ -]/g)},_e=function(t,e,n){for(var r=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n={};return t.forEach((function(t,r){var i=!0;void 0!==e[r]&&(i=e[r]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=Ue(t).map((function(t){return t.trim()}));n[o[0]]=n[o[0]]||{},1===o.length?n[o[0]].value=i:(n[o[0]].more=n[o[0]].more||[],n[o[0]].more.push({rest:o.slice(1),value:i}))})),n}(t,e),i=[],o=function(t){for(var e=n.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==r[o[t]]&&(void 0!==r[o[t]].more&&r[o[t]].more.forEach((function(n){void 0!==o[t+n.rest.length]&&(!0===n.rest.every((function(e,n){return e===o[t+n+1]}))&&i.push({id:e.terms()[t].id,value:n.value,length:n.rest.length+1}))})),void 0!==r[o[t]].value&&i.push({id:e.terms()[t].id,value:r[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,n.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==r.keepCase&&i.terms(0).isTitleCase()&&(s=Qe(s)),o=ue(s,n.world,n.pool()),n.buildFrom(o).tagger()}if(!0===r.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",n.world)}))}i.replace(o[0],n)})),this):this.delete()},replace:function(t,e,n){return void 0===e?this.replaceWith(t,n):(this.match(t).replaceWith(e,n),this)}},Ze=F((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(n){var r=ue(t,e.world,e.pool())[0];e.buildFrom([r]).tagger(),n.append(r,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(n){var r=ue(t,e.world,e.pool())[0];e.buildFrom([r]).tagger(),n.prepend(r,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(n);!0===(e=r(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(n){return n.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Ke(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),tn=(Xe.json,Xe.data,F((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countr?1:0},length:function(t,e){var n=t.text().trim().length,r=e.text().trim().length;return nr?-1:0},wordCount:function(t,e){var n=t.wordCount(),r=e.wordCount();return nr?-1:0}};rn.alphabetical=rn.alpha,rn.wordcount=rn.wordCount;var on={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},sn={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(r);n[e]=n[e]||0,n[e]+=1})),e.list.sort((function(t,e){var i=n[t.text(r)],o=n[e.text(r)];return io?-1:0})),e):on.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,n){return e[t.start]>e[n.start]?1:e[t.start]0){i+=s;continue}}if(void 0===n[o]||!0!==n.hasOwnProperty(o))if(o===t[i].reduced||!0!==n.hasOwnProperty(t[i].reduced)){if(!0===jn.test(o)){var a=o.replace(jn,"");!0===n.hasOwnProperty(a)&&t[i].tag(n[a],"noprefix-lexicon",e)}}else t[i].tag(n[t[i].reduced],"lexicon",e);else t[i].tag(n[o],"lexicon",e)}return t},Cn=function(t){var e=t.termList();return On(e,t.world),t},kn=function(t){var n=function(t){function n(){return e(this,n),a(this,o(n).apply(this,arguments))}return i(n,t),r(n,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),n}(t);return n.prototype.unwrap=n.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new n(e.list,this,this.world)},t},Fn=/\./,Tn=function(t){var n=function(t){function n(){return e(this,n),a(this,o(n).apply(this,arguments))}return i(n,t),r(n,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===Fn.test(t.post)&&(e+="."),t.set(e)})),this}}]),n}(t);return n.prototype.unwrap=n.prototype.stripPeriods,n.prototype.strip=n.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new n(e.list,this,this.world)},t},Nn=function(t){return t.prototype.clauses=function(e){var n=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),r=this.splitAfter(n),i=r.quotations(),o=(r=r.splitOn(i)).parentheses(),s=(r=r.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(r=r.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(r=(r=(r=(r=(r=(r=r.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(c.eq(0))}return"number"==typeof e&&(r=r.get(e)),new t(r.list,this,this.world)},t},Vn=function(t){var n=function(t){function n(t,r,i){var s;return e(this,n),(s=a(this,o(n).call(this,t,r,i))).contracted=null,s}return i(n,t),r(n,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),n=e[0].isTitleCase();e.forEach((function(t,n){t.set(t.implicit||t.text),t.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(t,[{key:"tagger",value:function(){return Cn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();cr.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new cr(t,this,this.world)},cr.prototype.fromText=function(t){var e=ue(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(cr.prototype,ur.misc),Object.assign(cr.prototype,ur.selections),ar(cr);var hr={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(hr).forEach((function(t){return cr.prototype[t]=cr.prototype[hr[t]]}));var lr=cr;return function t(e){var n=e,r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&n.addWords(e);var r=ue(t,n),i=new lr(r,null,n);return i.tagger(),i};return r.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=n;e&&((r=r.clone()).words={},r.addWords(e));var i=ue(t,r),o=new lr(i,null,r);return e&&Cn(o),o},r.extend=function(t){return t(lr,n,this,zt,it,Ut),this},r.fromJSON=function(t){var e=ce(t,n);return new lr(e,null,n)},r.clone=function(){return t(n.clone())},r.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return n.verbose(t),this},r.world=function(){return n},r.version="13.1.1",r.import=r.load,r}(new Be)})); diff --git a/builds/compromise.js b/builds/compromise.js index 8e8b76381..8eb060aab 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -1051,14 +1051,26 @@ var add = addTags; + var lowerCase = /^[a-z]/; + + var titleCase$1 = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); + }; /** remove this tag, and its descentents from the term */ + var unTag = function unTag(t, tag, reason, world) { var isVerbose = world.isVerbose(); //support '*' for removing all tags if (tag === '*') { t.tags = {}; return t; + } + + tag = tag.replace(/^#/, ''); + + if (lowerCase.test(tag) === true) { + tag = titleCase$1(tag); } // remove the tag @@ -2289,7 +2301,7 @@ var andSign = /&&/; var captureName = new RegExp(/^<(\S+)>/); - var titleCase$1 = function titleCase(str) { + var titleCase$2 = function titleCase(str) { return str.charAt(0).toUpperCase() + str.substr(1); }; @@ -2444,7 +2456,7 @@ if (start(w) === '#') { obj.tag = stripStart(w); - obj.tag = titleCase$1(obj.tag); + obj.tag = titleCase$2(obj.tag); return obj; } //dynamic function on a term object @@ -3157,7 +3169,7 @@ var wordlike = /\S/; var isBoundary = /^[!?.]+$/; var naiiveSplit = /(\S+)/; - var isSlash = /\/\W*$/; + var isSlash = /[a-z] ?\/ ?[a-z]*$/; var notWord = { '.': true, '-': true, @@ -3379,7 +3391,7 @@ "Superlative": "true¦earlier", "PresentTense": "true¦is,sounds", "Value": "true¦a few", - "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", + "Noun": "true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", @@ -3395,17 +3407,17 @@ "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", "Currency": "true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s", "City": "true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg", - "Abbreviation": "true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v", - "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", + "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", "WeekDay": "true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s", "Month": "true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il", "Date": "true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w", @@ -3416,7 +3428,7 @@ "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", "PhrasalVerb": "true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", + "Adjective": "true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt", "Comparable": "true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", @@ -5575,7 +5587,9 @@ //patterns for turning 'dwarves' to 'dwarf' var _rules$1 = [[/([^v])ies$/i, '$1y'], [/ises$/i, 'isis'], [/(kn|[^o]l|w)ives$/i, '$1ife'], [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'], [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'], [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'], [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'], [/(buffal|tomat|tornad)(oes)$/i, '$1o'], // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'], - [/(..[aeiou]s)es$/i, '$1'], [/(vert|ind|cort)(ices)$/i, '$1ex'], [/(matr|append)(ices)$/i, '$1ix'], [/(x|ch|ss|sh|z|o)es$/i, '$1'], [/men$/i, 'man'], [/(n)ews$/i, '$1ews'], [/([ti])a$/i, '$1um'], [/([^aeiouy]|qu)ies$/i, '$1y'], [/(s)eries$/i, '$1eries'], [/(m)ovies$/i, '$1ovie'], [/([m|l])ice$/i, '$1ouse'], [/(cris|ax|test)es$/i, '$1is'], [/(alias|status)es$/i, '$1'], [/(ss)$/i, '$1'], [/(ics)$/i, '$1'], [/s$/i, '']]; + [/(eas)es$/i, '$1e'], //diseases + [/(..[aeiou]s)es$/i, '$1'], //geniouses + [/(vert|ind|cort)(ices)$/i, '$1ex'], [/(matr|append)(ices)$/i, '$1ix'], [/(x|ch|ss|sh|z|o)es$/i, '$1'], [/men$/i, 'man'], [/(n)ews$/i, '$1ews'], [/([ti])a$/i, '$1um'], [/([^aeiouy]|qu)ies$/i, '$1y'], [/(s)eries$/i, '$1eries'], [/(m)ovies$/i, '$1ovie'], [/([m|l])ice$/i, '$1ouse'], [/(cris|ax|test)es$/i, '$1is'], [/(alias|status)es$/i, '$1'], [/(ss)$/i, '$1'], [/(ics)$/i, '$1'], [/s$/i, '']]; var invertObj = function invertObj(obj) { return Object.keys(obj).reduce(function (h, k) { @@ -5586,7 +5600,8 @@ var toSingular = function toSingular(str, world) { var irregulars = world.irregulars.nouns; - var invert = invertObj(irregulars); // check irregulars list + var invert = invertObj(irregulars); //(not very efficient) + // check irregulars list if (invert.hasOwnProperty(str)) { return invert[str]; @@ -6578,6 +6593,22 @@ }); return this.buildFrom(befores); }; + /** return only results with this match afterwards */ + + + exports.hasAfter = function (reg) { + return this.filter(function (doc) { + return doc.lookAfter(reg).found; + }); + }; + /** return only results with this match before it */ + + + exports.hasBefore = function (reg) { + return this.filter(function (doc) { + return doc.lookBefore(reg).found; + }); + }; }); var _03Match_1 = _03Match.match; var _03Match_2 = _03Match.not; @@ -6590,6 +6621,8 @@ var _03Match_9 = _03Match.lookBefore; var _03Match_10 = _03Match.before; var _03Match_11 = _03Match.after; + var _03Match_12 = _03Match.hasAfter; + var _03Match_13 = _03Match.hasBefore; /** apply a tag, or tags to all terms */ var tagTerms = function tagTerms(tag, doc, safe, reason) { @@ -7070,7 +7103,7 @@ uncache: uncache }; - var titleCase$2 = function titleCase(str) { + var titleCase$3 = function titleCase(str) { return str.charAt(0).toUpperCase() + str.substr(1); }; /** substitute-in new content */ @@ -7118,7 +7151,7 @@ } else if (typeof input === 'string') { //input is a string if (options.keepCase !== false && p.terms(0).isTitleCase()) { - input = titleCase$2(input); + input = titleCase$3(input); } newPhrases = _01Tokenizer(input, _this.world, _this.pool()); //tag the new phrases @@ -8641,7 +8674,7 @@ return m; }; - /** money + currency pair */ + /** Deprecated: please use compromise-numbers plugin */ methods$5.money = function (n) { @@ -8799,7 +8832,9 @@ var _01Lexicon = checkLexicon; - var apostrophes = /[\'‘’‛‵′`´]$/; // + var apostrophes = /[\'‘’‛‵′`´]$/; + var perSec = /^(m|k|cm|km|m)\/(s|h|hr)$/; // '5 k/m' + // var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8827,6 +8862,11 @@ term.tag(['Gerund'], 'chillin', world); } } + } // '5 km/s' + + + if (perSec.test(term.text)) { + term.tag('Unit', 'per-sec', world); } // 'NASA' is, but not 'i REALLY love it.' // if (term.tags.Noun === true && isAcronym(term, world)) { // term.tag('Acronym', 'acronym-step', world) @@ -8971,7 +9011,7 @@ ], i: [[/.[oau][wvl]ski$/, Last] //polish (male) ], - k: [[/^(k)+$/, Exp] //kkkk + k: [[/^(k){2}$/, Exp] //kkkk ], l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]], m: [[/.[^aeiou]ium$/, Sing], [/[^aeiou]ism$/, Sing], [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm @@ -9005,7 +9045,8 @@ var Vb = 'Verb'; var Noun$1 = 'Noun'; var Last$1 = 'LastName'; - var Modal = 'Modal'; // find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup + var Modal = 'Modal'; + var Place = 'Place'; // find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup var suffixMap = [null, //0 null, //1 @@ -9122,6 +9163,8 @@ //7-letter opoulos: Last$1, //greek + borough: Place, + //Hillsborough sdottir: Last$1 //swedish female }]; @@ -9503,7 +9546,7 @@ var _01Neighbours = checkNeighbours; - var titleCase$3 = /^[A-Z][a-z'\u00C0-\u00FF]/; + var titleCase$4 = /^[A-Z][a-z'\u00C0-\u00FF]/; var hasNumber = /[0-9]/; /** look for any grammar signals based on capital/lowercase */ @@ -9515,7 +9558,7 @@ for (var i = 1; i < terms.length; i++) { var term = terms[i]; - if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { + if (titleCase$4.test(term.text) === true && hasNumber.test(term.text) === false) { term.tag('ProperNoun', 'titlecase-noun', world); } } @@ -10949,6 +10992,7 @@ tag: 'PhoneNumber', reason: '(800) PhoneNumber' }, // ==== Currency ==== + // chinese yuan { match: '#Demonym #Currency', tag: 'Currency', @@ -10959,11 +11003,6 @@ group: 0, tag: 'Ordinal', reason: 'second-noun' - }, // ==== Money ==== - { - match: '#Value+ #Currency', - tag: 'Money', - reason: '15 usd' }, // ==== Unit ==== //5 yan { @@ -10983,19 +11022,30 @@ reason: 'minus-value' }, //5 kg. { - match: '#Value #Abbreviation', - tag: 'Value', + match: '#Value [#Abbreviation]', + group: 0, + tag: 'Unit', reason: 'value-abbr' + }, { + match: '#Value [k]', + group: 0, + tag: 'Unit', + reason: 'value-k' + }, { + match: '#Unit an hour', + tag: 'Unit', + reason: 'unit-an-hour' }, //seven point five { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' - }, // ten grand + }, // ten bucks { - match: '#Value grand', - tag: 'Value', - reason: 'value-grand' + match: '(#Value|a) [(buck|bucks|grand)]', + group: 0, + tag: 'Currency', + reason: 'value-bucks' }, //quarter million { match: '#Determiner [(half|quarter)] #Ordinal', @@ -11006,6 +11056,12 @@ match: 'a #Value', tag: 'Value', reason: 'a-value' + }, // ==== Money ==== + { + match: '[#Value+] #Currency', + group: 0, + tag: 'Money', + reason: '15 usd' }, // thousand and two { match: "(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value", @@ -11265,6 +11321,12 @@ match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun', tag: 'Region', reason: 'district-of-Foo' + }, // in Foo California + { + match: 'in [#ProperNoun] #Place', + group: 0, + tag: 'Place', + reason: 'propernoun-place' }, // ==== Address ==== { match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)', @@ -12466,7 +12528,7 @@ var toSingular = this.world.transforms.toSingular; this.forEach(function (doc) { - if (doc.has('#Singular') || hasPlural_1(doc) === false) { + if (doc.has('^#Singular+$') || hasPlural_1(doc) === false) { return; } // double-check it isn't an un-tagged plural @@ -13636,6 +13698,12 @@ world.verbose(bool); return this; }; + /** grab currently-used World object */ + + + nlp.world = function () { + return world; + }; /** current version of the library */ diff --git a/builds/compromise.js.map b/builds/compromise.js.map deleted file mode 100644 index 25095b92d..000000000 --- a/builds/compromise.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"compromise.js","sources":["../src/Term/_id.js","../src/Term/normalize/unicode.js","../src/Term/normalize/isAcronym.js","../src/Term/normalize/clean.js","../src/Term/normalize/reduce.js","../src/Term/parse.js","../src/Term/methods/01-case.js","../src/Term/methods/02-punctuation.js","../src/Term/methods/_doesMatch.js","../src/Term/methods/03-misc.js","../src/Term/methods/04-text.js","../src/Term/methods/_bestTag.js","../src/Term/methods/05-json.js","../src/Term/methods/index.js","../src/Term/tag/fns.js","../src/Term/tag/add.js","../src/Term/tag/unTag.js","../src/Term/tag/canBe.js","../src/Term/tag/index.js","../src/Term/Term.js","../src/Phrase/methods/01-utils.js","../src/Phrase/methods/02-text.js","../src/Phrase/methods/03-change.js","../src/Phrase/insert/append.js","../src/Phrase/insert/prepend.js","../src/Phrase/insert/delete.js","../src/Phrase/methods/04-insert.js","../src/Phrase/methods/05-json.js","../src/Phrase/methods/06-lookahead.js","../src/Phrase/methods/index.js","../src/Phrase/match/02-failFast.js","../src/Phrase/match/03-tryMatch.js","../src/Phrase/match/04-postProcess.js","../src/Doc/match/parseToken.js","../src/Doc/match/postProcess.js","../src/Doc/match/syntax.js","../src/Phrase/match/01-matchAll.js","../src/Phrase/match/not.js","../src/Phrase/match/index.js","../src/Phrase/Phrase.js","../src/01-tokenizer/Pool.js","../src/01-tokenizer/_linkTerms.js","../src/01-tokenizer/01-sentences.js","../src/01-tokenizer/02-words.js","../src/01-tokenizer/index.js","../src/01-tokenizer/fromJSON.js","../src/_version.js","../src/World/_data.js","../src/World/tags/tags/nouns.js","../src/World/tags/tags/verbs.js","../src/World/tags/tags/values.js","../src/World/tags/tags/misc.js","../src/World/tags/inference/_color.js","../src/World/tags/inference/_isA.js","../src/World/tags/inference/_notA.js","../src/World/tags/inference/_lineage.js","../src/World/tags/inference/index.js","../src/World/tags/index.js","../node_modules/efrt-unpack/efrt-unpack.min.js","../src/World/addWords.js","../src/World/addIrregulars.js","../src/World/data/misc.js","../src/World/data/plurals.js","../src/World/data/conjugations.js","../src/transforms/conjugate/suffixes.js","../src/transforms/conjugate/01-suffixes.js","../src/transforms/conjugate/02-generic.js","../src/transforms/conjugate/index.js","../src/transforms/adjectives/toSuperlative.js","../src/transforms/adjectives/toComparative.js","../src/transforms/adjectives/index.js","../src/transforms/toPlural/_rules.js","../src/transforms/toPlural/index.js","../src/transforms/toSingular/_rules.js","../src/transforms/toSingular/index.js","../src/transforms/toInfinitive/_transform.js","../src/transforms/toInfinitive/_guess.js","../src/transforms/toInfinitive/index.js","../src/World/World.js","../src/Doc/methods/01-utils.js","../src/Doc/methods/02-accessors.js","../src/Doc/match/checkCache.js","../src/Doc/methods/03-match.js","../src/Doc/methods/_setTag.js","../src/Doc/methods/04-tag.js","../src/Doc/methods/05-loops.js","../src/Doc/methods/_lookup.js","../src/Doc/methods/06-lookup.js","../src/Doc/methods/07-cache.js","../src/Doc/methods/insert/01-replace.js","../src/Doc/methods/insert/02-insert.js","../src/Doc/methods/output/01-text.js","../src/Doc/methods/output/_offset.js","../src/Doc/methods/output/02-json.js","../src/Doc/methods/output/_debug.js","../src/Doc/methods/output/_topk.js","../src/Doc/methods/output/03-out.js","../src/Doc/methods/transform/01-sort.js","../src/Doc/methods/transform/_methods.js","../src/Doc/methods/transform/02-normalize.js","../src/Doc/methods/transform/03-split.js","../src/Doc/methods/transform/04-case.js","../src/Doc/methods/transform/05-whitespace.js","../src/Doc/methods/transform/06-join.js","../src/Doc/methods/transform/07-contract.js","../src/Doc/methods/index.js","../src/Subset/_simple.js","../src/02-tagger/01-init/01-lexicon.js","../src/02-tagger/01-init/02-punctuation.js","../src/02-tagger/01-init/data/startsWith.js","../src/02-tagger/01-init/03-prefixes.js","../src/02-tagger/01-init/data/endsWith.js","../src/02-tagger/01-init/data/suffixMap.js","../src/02-tagger/01-init/04-suffixes.js","../src/02-tagger/01-init/data/emoticons.js","../src/02-tagger/01-init/05-emoji.js","../src/02-tagger/01-init/index.js","../src/02-tagger/02-fallbacks/data/markov.js","../src/02-tagger/02-fallbacks/01-neighbours.js","../src/02-tagger/02-fallbacks/02-case.js","../src/02-tagger/02-fallbacks/03-stem.js","../src/02-tagger/02-fallbacks/data/isPlural.js","../src/02-tagger/02-fallbacks/04-plurals.js","../src/02-tagger/02-fallbacks/data/organizations.js","../src/02-tagger/02-fallbacks/05-organizations.js","../src/02-tagger/02-fallbacks/06-acronyms.js","../src/02-tagger/02-fallbacks/index.js","../src/02-tagger/03-contractions/01-negative.js","../src/02-tagger/03-contractions/02-simple.js","../src/02-tagger/03-contractions/03-irregulars.js","../src/02-tagger/03-contractions/04-possessive.js","../src/02-tagger/03-contractions/05-perfectTense.js","../src/02-tagger/03-contractions/06-ranges.js","../src/02-tagger/03-contractions/07-french.js","../src/02-tagger/03-contractions/index.js","../src/02-tagger/04-correction/fixMisc.js","../src/02-tagger/04-correction/_unique.js","../src/02-tagger/04-correction/matches/01-misc.js","../src/02-tagger/04-correction/matches/02-dates.js","../src/02-tagger/04-correction/matches/03-noun.js","../src/02-tagger/04-correction/matches/04-adjective.js","../src/02-tagger/04-correction/matches/05-adverb.js","../src/02-tagger/04-correction/matches/06-value.js","../src/02-tagger/04-correction/matches/07-verbs.js","../src/02-tagger/04-correction/matches/08-place.js","../src/02-tagger/04-correction/matches/09-org.js","../src/02-tagger/04-correction/matches/10-people.js","../src/02-tagger/04-correction/matches/index.js","../src/02-tagger/04-correction/runner.js","../src/02-tagger/04-correction/index.js","../src/02-tagger/index.js","../src/Subset/Abbreviations.js","../src/Subset/Acronyms.js","../src/Subset/Clauses.js","../src/Subset/Contractions.js","../src/Subset/Lists.js","../src/Subset/Nouns/plural/hasPlural.js","../src/Subset/Nouns/getArticle.js","../src/Subset/Nouns/plural/isPlural/_rules.js","../src/Subset/Nouns/plural/isPlural/index.js","../src/Subset/Nouns/toPossessive.js","../src/Subset/Nouns/parse.js","../src/Subset/Nouns/methods.js","../src/Subset/Nouns/index.js","../src/Subset/Parentheses.js","../src/Subset/Possessives.js","../src/Subset/Quotations.js","../src/Subset/Verbs/toInfinitive/index.js","../src/Subset/Verbs/isPlural.js","../src/Subset/Verbs/toNegative.js","../src/Subset/Verbs/parse.js","../src/Subset/Verbs/conjugate/toBe.js","../src/Subset/Verbs/conjugate/index.js","../src/Subset/Verbs/methods.js","../src/Subset/Verbs/index.js","../src/Subset/People.js","../src/Subset/index.js","../src/Doc/Doc.js","../src/02-tagger/tiny.js","../src/index.js"],"sourcesContent":["//this is a not-well-thought-out way to reduce our dependence on `object===object` stuff\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split('')\n\n//generates a unique id for this term\nfunction makeId(str) {\n str = str || '_'\n let text = str + '-'\n for (let i = 0; i < 7; i++) {\n text += chars[Math.floor(Math.random() * chars.length)]\n }\n return text\n}\n\nmodule.exports = makeId\n","//a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii.\n//approximate visual (not semantic or phonetic) relationship between unicode and ascii characters\n//http://en.wikipedia.org/wiki/List_of_Unicode_characters\n//https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E\nlet compact = {\n '!': '¡',\n '?': '¿Ɂ',\n '\"': '“”\"❝❞',\n \"'\": '‘‛❛❜',\n '-': '—–',\n a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ',\n b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ',\n c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ',\n d: 'ÐĎďĐđƉƊȡƋƌǷ',\n e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ',\n f: 'ƑƒϜϝӺӻҒғſ',\n g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ',\n h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ',\n I: 'ÌÍÎÏ',\n i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії',\n j: 'ĴĵǰȷɈɉϳЈј',\n k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ',\n l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ',\n m: 'ΜϺϻМмӍӎ',\n n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ',\n o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ',\n p: 'ƤƿΡρϷϸϼРрҎҏÞ',\n q: 'Ɋɋ',\n r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ',\n s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ',\n t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт',\n u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ',\n v: 'νѴѵѶѷ',\n w: 'ŴŵƜωώϖϢϣШЩшщѡѿ',\n x: '×ΧχϗϰХхҲҳӼӽӾӿ',\n y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ',\n z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ',\n}\n//decompress data into two hashes\nlet unicode = {}\nObject.keys(compact).forEach(function(k) {\n compact[k].split('').forEach(function(s) {\n unicode[s] = k\n })\n})\n\nconst killUnicode = str => {\n let chars = str.split('')\n chars.forEach((s, i) => {\n if (unicode[s]) {\n chars[i] = unicode[s]\n }\n })\n return chars.join('')\n}\nmodule.exports = killUnicode\n// console.log(killUnicode('bjŏȒk—Ɏó'));\n","const periodAcronym = /([A-Z]\\.)+[A-Z]?,?$/\nconst oneLetterAcronym = /^[A-Z]\\.,?$/\nconst noPeriodAcronym = /[A-Z]{2,}('s|,)?$/\nconst lowerCaseAcronym = /([a-z]\\.){2,}[a-z]\\.?$/\n\nconst isAcronym = function(str) {\n //like N.D.A\n if (periodAcronym.test(str) === true) {\n return true\n }\n //like c.e.o\n if (lowerCaseAcronym.test(str) === true) {\n return true\n }\n //like 'F.'\n if (oneLetterAcronym.test(str) === true) {\n return true\n }\n //like NDA\n if (noPeriodAcronym.test(str) === true) {\n return true\n }\n return false\n}\nmodule.exports = isAcronym\n","const killUnicode = require('./unicode')\nconst isAcronym = require('./isAcronym')\nconst hasSlash = /[a-z\\u00C0-\\u00FF] ?\\/ ?[a-z\\u00C0-\\u00FF]/\n\n/** some basic operations on a string to reduce noise */\nconst clean = function(str) {\n str = str || ''\n str = str.toLowerCase()\n str = str.trim()\n let original = str\n //(very) rough ASCII transliteration - bjŏrk -> bjork\n str = killUnicode(str)\n //rough handling of slashes - 'see/saw'\n if (hasSlash.test(str) === true) {\n str = str.replace(/\\/.*/, '')\n }\n //#tags, @mentions\n str = str.replace(/^[#@]/, '')\n //punctuation\n str = str.replace(/[,;.!?]+$/, '')\n // coerce single curly quotes\n str = str.replace(/[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]+/g, \"'\")\n // coerce double curly quotes\n str = str.replace(\n /[\\u0022\\u00AB\\u00BB\\u201C\\u201D\\u201E\\u201F\\u2033\\u2034\\u2036\\u2037\\u2E42\\u301D\\u301E\\u301F\\uFF02]+/g,\n '\"'\n )\n //coerce Unicode ellipses\n str = str.replace(/\\u2026/g, '...')\n //en-dash\n str = str.replace(/\\u2013/g, '-')\n //lookin'->looking (make it easier for conjugation)\n str = str.replace(/([aeiou][ktrp])in$/, '$1ing')\n //turn re-enactment to reenactment\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n str = str.replace('-', '')\n }\n //strip leading & trailing grammatical punctuation\n if (/^[:;]/.test(str) === false) {\n str = str.replace(/\\.{3,}$/g, '')\n str = str.replace(/[\",\\.!:;\\?\\)]+$/g, '')\n str = str.replace(/^['\"\\(]+/g, '')\n }\n //do this again..\n str = str.trim()\n //oh shucks,\n if (str === '') {\n str = original\n }\n //compact acronyms\n if (isAcronym(str)) {\n str = str.replace(/\\./g, '')\n }\n //nice-numbers\n str = str.replace(/([0-9]),([0-9])/g, '$1$2')\n return str\n}\n\nmodule.exports = clean\n// console.log(normalize('Dr. V Cooper'));\n","/** reduced is one step further than clean */\nconst reduced = function(str) {\n // remove apostrophes\n str = str.replace(/['’]s$/, '')\n str = str.replace(/s['’]$/, 's')\n return str\n}\nmodule.exports = reduced\n","const normalize = require('./normalize/clean')\nconst reduce = require('./normalize/reduce')\n// basically, tokenize for terms.\n\n//all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation\n//we have slightly different rules for start/end - like #hashtags.\nconst startings = /^[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F]+/\nconst endings = /[ \\n\\t\\.’'\\[\\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\\-?‘’;\\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E]+$/\n\n//money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥\nconst hasSlash = /\\//\nconst hasApostrophe = /['’]/\nconst hasAcronym = /^[a-z]\\.([a-z]\\.)+/i\nconst minusNumber = /^[-+\\.][0-9]/\n\n/** turn given text into a parsed-up object\n * seperate the 'meat' of the word from the whitespace+punctuation\n */\nconst parseTerm = str => {\n let original = str\n let pre = ''\n let post = ''\n str = str.replace(startings, found => {\n pre = found\n // support '-40'\n if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) {\n pre = ''\n return found\n }\n return ''\n })\n str = str.replace(endings, found => {\n post = found\n // keep s-apostrophe - \"flanders'\" or \"chillin'\"\n if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) {\n post = post.replace(hasApostrophe, '')\n return `'`\n }\n //keep end-period in acronym\n if (hasAcronym.test(str) === true) {\n post = post.replace(/\\./, '')\n return '.'\n }\n return ''\n })\n //we went too far..\n if (str === '') {\n // do a very mild parse, and hope for the best.\n original = original.replace(/ *$/, after => {\n post = after || ''\n return ''\n })\n str = original\n pre = ''\n post = post\n }\n // create the various forms of our text,\n let clean = normalize(str)\n const parsed = {\n text: str,\n clean: clean,\n reduced: reduce(clean),\n pre: pre,\n post: post,\n }\n // support aliases for slashes\n if (hasSlash.test(str)) {\n str.split(hasSlash).forEach(word => {\n parsed.alias = parsed.alias || {}\n parsed.alias[word.trim()] = true\n })\n }\n return parsed\n}\nmodule.exports = parseTerm\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst upperCase = /^[A-Z]+s?$/\n\n/** convert all text to uppercase */\nexports.toUpperCase = function() {\n this.text = this.text.toUpperCase()\n return this\n}\n\n/** convert all text to lowercase */\nexports.toLowerCase = function() {\n this.text = this.text.toLowerCase()\n return this\n}\n\n/** only set the first letter to uppercase\n * leave any existing uppercase alone\n */\nexports.toTitleCase = function() {\n this.text = this.text.replace(/^ *[a-z\\u00C0-\\u00FF]/, x => x.toUpperCase()) //support unicode?\n return this\n}\n\n/** if all letters are uppercase */\nexports.isUpperCase = function() {\n return upperCase.test(this.text)\n}\n/** if the first letter is uppercase, and the rest are lowercase */\nexports.isTitleCase = function() {\n return titleCase.test(this.text)\n}\nexports.titleCase = exports.isTitleCase\n","// these methods are called with '@hasComma' in the match syntax\n// various unicode quotation-mark formats\nconst startQuote = /(\\u0022|\\uFF02|\\u0027|\\u201C|\\u2018|\\u201F|\\u201B|\\u201E|\\u2E42|\\u201A|\\u00AB|\\u2039|\\u2035|\\u2036|\\u2037|\\u301D|\\u0060|\\u301F)/\nconst endQuote = /(\\u0022|\\uFF02|\\u0027|\\u201D|\\u2019|\\u201D|\\u2019|\\u201D|\\u201D|\\u2019|\\u00BB|\\u203A|\\u2032|\\u2033|\\u2034|\\u301E|\\u00B4|\\u301E)/\n\n/** search the term's 'post' punctuation */\nexports.hasPost = function(punct) {\n return this.post.indexOf(punct) !== -1\n}\n/** search the term's 'pre' punctuation */\nexports.hasPre = function(punct) {\n return this.pre.indexOf(punct) !== -1\n}\n\n/** does it have a quotation symbol? */\nexports.hasQuote = function() {\n return startQuote.test(this.pre) || endQuote.test(this.post)\n}\nexports.hasQuotation = exports.hasQuote\n\n/** does it have a comma? */\nexports.hasComma = function() {\n return this.hasPost(',')\n}\n\n/** does it end in a period? */\nexports.hasPeriod = function() {\n return this.hasPost('.') === true && this.hasPost('...') === false\n}\n\n/** does it end in an exclamation */\nexports.hasExclamation = function() {\n return this.hasPost('!')\n}\n\n/** does it end with a question mark? */\nexports.hasQuestionMark = function() {\n return this.hasPost('?') || this.hasPost('¿')\n}\n\n/** is there a ... at the end? */\nexports.hasEllipses = function() {\n return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…')\n}\n\n/** is there a semicolon after this word? */\nexports.hasSemicolon = function() {\n return this.hasPost(';')\n}\n\n/** is there a slash '/' in this word? */\nexports.hasSlash = function() {\n return /\\//.test(this.text)\n}\n\n/** a hyphen connects two words like-this */\nexports.hasHyphen = function() {\n const hyphen = /(-|–|—)/\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n/** a dash separates words - like that */\nexports.hasDash = function() {\n const hyphen = / (-|–|—) /\n return hyphen.test(this.post) || hyphen.test(this.pre)\n}\n\n/** is it multiple words combinded */\nexports.hasContraction = function() {\n return Boolean(this.implicit)\n}\n\n/** try to sensibly put this punctuation mark into the term */\nexports.addPunctuation = function(punct) {\n // dont add doubles\n if (punct === ',' || punct === ';') {\n this.post = this.post.replace(punct, '')\n }\n this.post = punct + this.post\n return this\n}\n","//declare it up here\nlet wrapMatch = function() {}\n\n/** ignore optional/greedy logic, straight-up term match*/\nconst doesMatch = function(t, reg, index, length) {\n // support id matches\n if (reg.id === t.id) {\n return true\n }\n // support '.'\n if (reg.anything === true) {\n return true\n }\n // support '^' (in parentheses)\n if (reg.start === true && index !== 0) {\n return false\n }\n // support '$' (in parentheses)\n if (reg.end === true && index !== length - 1) {\n return false\n }\n //support a text match\n if (reg.word !== undefined) {\n //match contractions\n if (t.implicit !== null && t.implicit === reg.word) {\n return true\n }\n // term aliases for slashes and things\n if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) {\n return true\n }\n // support ~ match\n if (reg.soft === true && reg.word === t.root) {\n return true\n }\n //match either .clean or .text\n return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced\n }\n //support #Tag\n if (reg.tag !== undefined) {\n return t.tags[reg.tag] === true\n }\n //support @method\n if (reg.method !== undefined) {\n if (typeof t[reg.method] === 'function' && t[reg.method]() === true) {\n return true\n }\n return false\n }\n //support /reg/\n if (reg.regex !== undefined) {\n return reg.regex.test(t.clean)\n }\n // support optimized (one|two)\n if (reg.oneOf !== undefined) {\n return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text)\n }\n //support (one|two)\n if (reg.choices !== undefined) {\n // try to support && operator\n if (reg.operator === 'and') {\n // must match them all\n return reg.choices.every(r => wrapMatch(t, r, index, length))\n }\n // or must match one\n return reg.choices.some(r => wrapMatch(t, r, index, length))\n }\n return false\n}\n\n// wrap result for !negative match logic\nwrapMatch = function(t, reg, index, length) {\n let result = doesMatch(t, reg, index, length)\n if (reg.negative === true) {\n return !result\n }\n return result\n}\n\nmodule.exports = wrapMatch\n","const doesMatch = require('./_doesMatch')\nconst isAcronym = require('../normalize/isAcronym')\n\n// these tags aren't juicy-enough\nconst boring = {}\n\n/** check a match object against this term */\nexports.doesMatch = function(reg, index, length) {\n return doesMatch(this, reg, index, length)\n}\n\n/** does this term look like an acronym? */\nexports.isAcronym = function() {\n return isAcronym(this.text)\n}\n\n/** is this term implied by a contraction? */\nexports.isImplicit = function() {\n return this.text === '' && Boolean(this.implicit)\n}\n\n/** does the term have at least one good tag? */\nexports.isKnown = function() {\n return Object.keys(this.tags).some(t => boring[t] !== true)\n}\n\n/** cache the root property of the term */\nexports.setRoot = function(world) {\n let transform = world.transforms\n let str = this.implicit || this.clean\n if (this.tags.Plural) {\n str = transform.toSingular(str, world)\n }\n if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) {\n let tense = null\n if (this.tags.PastTense) {\n tense = 'PastTense'\n } else if (this.tags.Gerund) {\n tense = 'Gerund'\n } else if (this.tags.PresentTense) {\n tense = 'PresentTense'\n } else if (this.tags.Participle) {\n tense = 'Participle'\n } else if (this.tags.Actor) {\n tense = 'Actor'\n }\n str = transform.toInfinitive(str, world, tense)\n }\n this.root = str\n}\n","const killUnicode = require('../normalize/unicode')\nconst hasSpace = /[\\s-]/\nconst isUpperCase = /^[A-Z-]+$/\n\n// const titleCase = str => {\n// return str.charAt(0).toUpperCase() + str.substr(1)\n// }\n\n/** return various text formats of this term */\nexports.textOut = function(options, showPre, showPost) {\n options = options || {}\n let word = this.text\n let before = this.pre\n let after = this.post\n\n // -word-\n if (options.reduced === true) {\n word = this.reduced || ''\n }\n if (options.root === true) {\n word = this.root || ''\n }\n if (options.implicit === true && this.implicit) {\n word = this.implicit || ''\n }\n if (options.normal === true) {\n word = this.clean || this.text || ''\n }\n if (options.root === true) {\n word = this.root || this.reduced || ''\n }\n if (options.unicode === true) {\n word = killUnicode(word)\n }\n // cleanup case\n if (options.titlecase === true) {\n if (this.tags.ProperNoun && !this.titleCase()) {\n // word = titleCase(word)\n } else if (this.tags.Acronym) {\n word = word.toUpperCase() //uppercase acronyms\n } else if (isUpperCase.test(word) && !this.tags.Acronym) {\n // lowercase everything else\n word = word.toLowerCase()\n }\n }\n if (options.lowercase === true) {\n word = word.toLowerCase()\n }\n // remove the '.'s from 'F.B.I.' (safely)\n if (options.acronyms === true && this.tags.Acronym) {\n word = word.replace(/\\./g, '')\n }\n\n // -before/after-\n if (options.whitespace === true || options.root === true) {\n before = ''\n after = ' '\n if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) {\n after = ''\n }\n }\n if (options.punctuation === true && !options.root) {\n //normalized end punctuation\n if (this.hasPost('.') === true) {\n after = '.' + after\n } else if (this.hasPost('?') === true) {\n after = '?' + after\n } else if (this.hasPost('!') === true) {\n after = '!' + after\n } else if (this.hasPost(',') === true) {\n after = ',' + after\n } else if (this.hasEllipses() === true) {\n after = '...' + after\n }\n }\n if (showPre !== true) {\n before = ''\n }\n if (showPost !== true) {\n // let keep = after.match(/\\)/) || ''\n after = '' //keep //after.replace(/[ .?!,]+/, '')\n }\n // remove the '.' from 'Mrs.' (safely)\n if (options.abbreviations === true && this.tags.Abbreviation) {\n after = after.replace(/^\\./, '')\n }\n return before + word + after\n}\n","const boringTags = {\n Auxiliary: 1,\n Possessive: 1,\n}\n\n/** a subjective ranking of tags kinda tfidf-based */\nconst rankTags = function(term, world) {\n let tags = Object.keys(term.tags)\n const tagSet = world.tags\n tags = tags.sort((a, b) => {\n //bury the tags we dont want\n if (boringTags[b] || !tagSet[b]) {\n return -1\n }\n // unknown tags are interesting\n if (!tagSet[b]) {\n return 1\n }\n if (!tagSet[a]) {\n return 0\n }\n // then sort by #of parent tags (most-specific tags first)\n if (tagSet[a].lineage.length > tagSet[b].lineage.length) {\n return 1\n }\n if (tagSet[a].isA.length > tagSet[b].isA.length) {\n return -1\n }\n return 0\n })\n return tags\n}\nmodule.exports = rankTags\n","const rankTags = require('./_bestTag')\n\nconst jsonDefault = {\n text: true,\n tags: true,\n implicit: true,\n whitespace: true,\n\n clean: false,\n id: false,\n index: false,\n offset: false,\n bestTag: false,\n}\n\n/** return various metadata for this term */\nexports.json = function(options, world) {\n options = options || {}\n options = Object.assign({}, jsonDefault, options)\n let result = {}\n\n // default on\n if (options.text) {\n result.text = this.text\n }\n if (options.normal) {\n result.normal = this.normal\n }\n\n if (options.tags) {\n result.tags = Object.keys(this.tags)\n }\n\n // default off\n if (options.clean) {\n result.clean = this.clean\n }\n if (options.id || options.offset) {\n result.id = this.id\n }\n if (options.implicit && this.implicit !== null) {\n result.implicit = this.implicit\n }\n if (options.whitespace) {\n result.pre = this.pre\n result.post = this.post\n }\n if (options.bestTag) {\n result.bestTag = rankTags(this, world)[0]\n }\n\n return result\n}\n","module.exports = Object.assign(\n {},\n require('./01-case'),\n require('./02-punctuation'),\n require('./03-misc'),\n require('./04-text'),\n require('./05-json')\n)\n","function isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n/** add spaces at the end */\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\n/** output for verbose-mode */\nexports.logTag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 15) + '\\x1b[0m + \\x1b[32m' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason + ''\n }\n console.log(log)\n}\n\n/** output for verbose mode */\nexports.logUntag = function(t, tag, reason) {\n if (isClientSide()) {\n console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;')\n return\n }\n //server-side\n let log = '\\x1b[33m' + padEnd(t.clean, 3) + ' \\x1b[31m - #' + tag + '\\x1b[0m '\n if (reason) {\n log = padEnd(log, 35) + ' ' + reason\n }\n console.log(log)\n}\n\nexports.isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\nexports.titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n","const fns = require('./fns')\n\n/** add a tag, and its descendents, to a term */\nconst addTag = function(t, tag, reason, world) {\n let tagset = world.tags\n //support '.' or '-' notation for skipping the tag\n if (tag === '' || tag === '.' || tag === '-') {\n return\n }\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n tag = fns.titleCase(tag)\n //if we already got this one\n if (t.tags[tag] === true) {\n return\n }\n // log it?\n const isVerbose = world.isVerbose()\n if (isVerbose === true) {\n fns.logTag(t, tag, reason)\n }\n //add tag\n t.tags[tag] = true //whee!\n\n //check tagset for any additional things to do...\n if (tagset.hasOwnProperty(tag) === true) {\n //add parent Tags\n tagset[tag].isA.forEach(down => {\n t.tags[down] = true\n if (isVerbose === true) {\n fns.logTag(t, '→ ' + down)\n }\n })\n //remove any contrary tags\n t.unTag(tagset[tag].notA, '←', world)\n }\n}\n\n/** support an array of tags */\nconst addTags = function(term, tags, reason, world) {\n if (typeof tags !== 'string') {\n for (let i = 0; i < tags.length; i++) {\n addTag(term, tags[i], reason, world)\n }\n // tags.forEach(tag => addTag(term, tag, reason, world))\n } else {\n addTag(term, tags, reason, world)\n }\n}\nmodule.exports = addTags\n","const fns = require('./fns')\n\n/** remove this tag, and its descentents from the term */\nconst unTag = function(t, tag, reason, world) {\n const isVerbose = world.isVerbose()\n //support '*' for removing all tags\n if (tag === '*') {\n t.tags = {}\n return t\n }\n // remove the tag\n if (t.tags[tag] === true) {\n delete t.tags[tag]\n //log in verbose-mode\n if (isVerbose === true) {\n fns.logUntag(t, tag, reason)\n }\n }\n //delete downstream tags too\n const tagset = world.tags\n if (tagset[tag]) {\n let lineage = tagset[tag].lineage\n for (let i = 0; i < lineage.length; i++) {\n if (t.tags[lineage[i]] === true) {\n delete t.tags[lineage[i]]\n if (isVerbose === true) {\n fns.logUntag(t, ' - ' + lineage[i])\n }\n }\n }\n }\n return t\n}\n\n//handle an array of tags\nconst untagAll = function(term, tags, reason, world) {\n if (typeof tags !== 'string' && tags) {\n for (let i = 0; i < tags.length; i++) {\n unTag(term, tags[i], reason, world)\n }\n return\n }\n unTag(term, tags, reason, world)\n}\nmodule.exports = untagAll\n","'use strict'\n\n//recursively-check compatibility of this tag and term\nconst canBe = function(term, tag, world) {\n const tagset = world.tags\n // cleanup tag\n if (tag[0] === '#') {\n tag = tag.replace(/^#/, '')\n }\n //fail-fast\n if (tagset[tag] === undefined) {\n return true\n }\n //loop through tag's contradictory tags\n let enemies = tagset[tag].notA || []\n for (let i = 0; i < enemies.length; i++) {\n if (term.tags[enemies[i]] === true) {\n return false\n }\n }\n if (tagset[tag].isA !== undefined) {\n return canBe(term, tagset[tag].isA, world) //recursive\n }\n return true\n}\n\nmodule.exports = canBe\n","const add = require('./add')\nconst unTag = require('./unTag')\nconst canBe = require('./canBe')\n\n/** add a tag or tags, and their descendents to this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.tag = function(tags, reason, world) {\n add(this, tags, reason, world)\n return this\n}\n\n/** only tag this term if it's consistent with it's current tags */\nexports.tagSafe = function(tags, reason, world) {\n if (canBe(this, tags, world)) {\n add(this, tags, reason, world)\n }\n return this\n}\n\n/** remove a tag or tags, and their descendents from this term\n * @param {string | string[]} tags - a tag or tags\n * @param {string?} [reason] a clue for debugging\n */\nexports.unTag = function(tags, reason, world) {\n unTag(this, tags, reason, world)\n return this\n}\n\n/** is this tag consistent with the word's current tags?\n * @param {string | string[]} tags - a tag or tags\n * @returns {boolean}\n */\nexports.canBe = function(tags, world) {\n return canBe(this, tags, world)\n}\n","const makeId = require('./_id')\nconst parseTerm = require('./parse')\nconst methods = require('./methods')\nconst tagMethods = require('./tag')\n\nclass Term {\n constructor(text = '') {\n text = String(text)\n let obj = parseTerm(text)\n // the various forms of our text\n this.text = obj.text || ''\n this.clean = obj.clean\n this.reduced = obj.reduced\n this.root = obj.root || null\n this.implicit = obj.implicit || null\n\n this.pre = obj.pre || ''\n this.post = obj.post || ''\n this.tags = {}\n this.prev = null\n this.next = null\n this.id = makeId(obj.clean)\n this.isA = 'Term' // easier than .constructor...\n // support alternative matches\n if (obj.alias) {\n this.alias = obj.alias\n }\n }\n /** set the text of the Term to something else*/\n set(str) {\n let obj = parseTerm(str)\n\n this.text = obj.text\n this.clean = obj.clean\n return this\n }\n}\n\n/** create a deep-copy of this term */\nTerm.prototype.clone = function() {\n let term = new Term(this.text)\n term.pre = this.pre\n term.post = this.post\n term.tags = Object.assign({}, this.tags)\n //use the old id, so it can be matched with .match(doc)\n // term.id = this.id\n return term\n}\n\nObject.assign(Term.prototype, methods)\nObject.assign(Term.prototype, tagMethods)\n\nmodule.exports = Term\n","/** return a flat array of Term objects */\nexports.terms = function(n) {\n if (this.length === 0) {\n return []\n }\n // use cache, if it exists\n if (this.cache.terms) {\n if (n !== undefined) {\n return this.cache.terms[n]\n }\n return this.cache.terms\n }\n let terms = [this.pool.get(this.start)]\n for (let i = 0; i < this.length - 1; i += 1) {\n let id = terms[terms.length - 1].next\n if (id === null) {\n // throw new Error('linked-list broken')\n console.error(\"Compromise error: Linked list broken in phrase '\" + this.start + \"'\")\n break\n }\n let term = this.pool.get(id)\n terms.push(term)\n //return this one?\n if (n !== undefined && n === i) {\n return terms[n]\n }\n }\n if (n === undefined) {\n this.cache.terms = terms\n }\n if (n !== undefined) {\n return terms[n]\n }\n return terms\n}\n\n/** return a shallow or deep copy of this phrase */\nexports.clone = function(isShallow) {\n if (isShallow) {\n let p = this.buildFrom(this.start, this.length)\n p.cache = this.cache\n return p\n }\n //how do we clone part of the pool?\n let terms = this.terms()\n let newTerms = terms.map(t => t.clone())\n //connect these new ids up\n newTerms.forEach((t, i) => {\n //add it to the pool..\n this.pool.add(t)\n if (newTerms[i + 1]) {\n t.next = newTerms[i + 1].id\n }\n if (newTerms[i - 1]) {\n t.prev = newTerms[i - 1].id\n }\n })\n return this.buildFrom(newTerms[0].id, newTerms.length)\n}\n\n/** return last term object */\nexports.lastTerm = function() {\n let terms = this.terms()\n return terms[terms.length - 1]\n}\n\n/** quick lookup for a term id */\nexports.hasId = function(wantId) {\n if (this.length === 0 || !wantId) {\n return false\n }\n if (this.start === wantId) {\n return true\n }\n // use cache, if available\n if (this.cache.terms) {\n let terms = this.cache.terms\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === wantId) {\n return true\n }\n }\n return false\n }\n // otherwise, go through each term\n let lastId = this.start\n for (let i = 0; i < this.length - 1; i += 1) {\n let term = this.pool.get(lastId)\n if (term === undefined) {\n console.error(`Compromise error: Linked list broken. Missing term '${lastId}' in phrase '${this.start}'\\n`)\n // throw new Error('linked List error')\n return false\n }\n if (term.next === wantId) {\n return true\n }\n lastId = term.next\n }\n return false\n}\n\n/** how many seperate, non-empty words is it? */\nexports.wordCount = function() {\n return this.terms().filter(t => t.text !== '').length\n}\n\n/** get the full-sentence this phrase belongs to */\nexports.fullSentence = function() {\n let t = this.terms(0)\n //find first term in sentence\n while (t.prev) {\n t = this.pool.get(t.prev)\n }\n let start = t.id\n let len = 1\n //go to end of sentence\n while (t.next) {\n t = this.pool.get(t.next)\n len += 1\n }\n return this.buildFrom(start, len)\n}\n","const trimEnd = function(str) {\n return str.replace(/ +$/, '')\n}\n\n/** produce output in the given format */\nexports.text = function(options = {}, isFirst, isLast) {\n if (typeof options === 'string') {\n if (options === 'normal') {\n options = {\n whitespace: true,\n unicode: true,\n lowercase: true,\n punctuation: true,\n acronyms: true,\n abbreviations: true,\n implicit: true,\n normal: true,\n }\n } else if (options === 'clean') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n }\n } else if (options === 'reduced') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: false, //FIXME: reversed?\n whitespace: true,\n unicode: true,\n implicit: true,\n reduced: true,\n }\n } else if (options === 'root') {\n options = {\n titlecase: false,\n lowercase: true,\n punctuation: true,\n whitespace: true,\n unicode: true,\n implicit: true,\n root: true,\n }\n } else {\n options = {}\n }\n }\n let terms = this.terms()\n //this this phrase a complete sentence?\n let isFull = false\n if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) {\n isFull = true\n }\n let text = terms.reduce((str, t, i) => {\n options.last = isLast && i === terms.length - 1\n let showPre = true\n let showPost = true\n if (isFull === false) {\n // dont show beginning whitespace\n if (i === 0 && isFirst) {\n showPre = false\n }\n // dont show end-whitespace\n if (i === terms.length - 1 && isLast) {\n showPost = false\n }\n }\n let txt = t.textOut(options, showPre, showPost)\n // if (options.titlecase && i === 0) {\n // txt = titleCase(txt)\n // }\n return str + txt\n }, '')\n //full-phrases show punctuation, but not whitespace\n if (isFull === true && isLast) {\n text = trimEnd(text)\n }\n if (options.trim === true) {\n text = text.trim()\n }\n return text\n}\n","/** remove start and end whitespace */\nexports.trim = function() {\n let terms = this.terms()\n if (terms.length > 0) {\n //trim starting\n terms[0].pre = terms[0].pre.replace(/^\\s+/, '')\n //trim ending\n let lastTerm = terms[terms.length - 1]\n lastTerm.post = lastTerm.post.replace(/\\s+$/, '')\n }\n return this\n}\n","const endOfSentence = /[.?!]\\s*$/\n\n// replacing a 'word.' with a 'word!'\nconst combinePost = function(before, after) {\n //only transfer the whitespace\n if (endOfSentence.test(after)) {\n let whitespace = before.match(/\\s*$/)\n return after + whitespace\n }\n return before\n}\n\n//add whitespace to the start of the second bit\nconst addWhitespace = function(beforeTerms, newTerms) {\n // add any existing pre-whitespace to beginning\n newTerms[0].pre = beforeTerms[0].pre\n let lastTerm = beforeTerms[beforeTerms.length - 1]\n\n //add any existing punctuation to end of our new terms\n let newTerm = newTerms[newTerms.length - 1]\n newTerm.post = combinePost(lastTerm.post, newTerm.post)\n // remove existing punctuation\n lastTerm.post = ''\n\n //before ←[space] - after\n if (lastTerm.post === '') {\n lastTerm.post += ' '\n }\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(beforeTerms, newTerms, pool) {\n let lastBefore = beforeTerms[beforeTerms.length - 1]\n let lastNew = newTerms[newTerms.length - 1]\n let afterId = lastBefore.next\n //connect ours in (main → newPhrase)\n lastBefore.next = newTerms[0].id\n //stich the end in (newPhrase → after)\n lastNew.next = afterId\n //do it backwards, too\n if (afterId) {\n // newPhrase ← after\n let afterTerm = pool.get(afterId)\n afterTerm.prev = lastNew.id\n }\n // before ← newPhrase\n let beforeId = beforeTerms[0].id\n if (beforeId) {\n let newTerm = newTerms[0]\n newTerm.prev = beforeId\n }\n}\n\n// avoid stretching a phrase twice.\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another.\nconst appendPhrase = function(before, newPhrase, doc) {\n let beforeTerms = before.terms()\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(beforeTerms, newTerms)\n //insert this segment into the linked-list\n stitchIn(beforeTerms, newTerms, before.pool)\n\n // stretch!\n // make each effected phrase longer\n let toStretch = [before]\n let hasId = before.start\n let docs = [doc]\n\n docs = docs.concat(doc.parents()) // find them all!\n\n docs.forEach(parent => {\n // only the phrases that should change\n let shouldChange = parent.list.filter(p => {\n return p.hasId(hasId)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count a phrase\n toStretch = unique(toStretch)\n toStretch.forEach(p => {\n p.length += newPhrase.length\n })\n before.cache = {}\n return before\n}\nmodule.exports = appendPhrase\n","const hasSpace = / /\n\n//a new space needs to be added, either on the new phrase, or the old one\n// '[new] [◻old]' -or- '[old] [◻new] [old]'\nconst addWhitespace = function(newTerms) {\n //add a space before our new text?\n // add a space after our text\n let lastTerm = newTerms[newTerms.length - 1]\n if (hasSpace.test(lastTerm.post) === false) {\n lastTerm.post += ' '\n }\n return\n}\n\n//insert this segment into the linked-list\nconst stitchIn = function(main, newPhrase, newTerms) {\n // [newPhrase] → [main]\n let lastTerm = newTerms[newTerms.length - 1]\n lastTerm.next = main.start\n // [before] → [main]\n let pool = main.pool\n let start = pool.get(main.start)\n if (start.prev) {\n let before = pool.get(start.prev)\n before.next = newPhrase.start\n }\n //do it backwards, too\n // before ← newPhrase\n newTerms[0].prev = main.terms(0).prev\n // newPhrase ← main\n main.terms(0).prev = lastTerm.id\n}\n\nconst unique = function(list) {\n return list.filter((o, i) => {\n return list.indexOf(o) === i\n })\n}\n\n//append one phrase onto another\nconst joinPhrase = function(original, newPhrase, doc) {\n const starterId = original.start\n let newTerms = newPhrase.terms()\n //spruce-up the whitespace issues\n addWhitespace(newTerms, original)\n //insert this segment into the linked-list\n stitchIn(original, newPhrase, newTerms)\n //increase the length of our phrases\n let toStretch = [original]\n let docs = [doc]\n docs = docs.concat(doc.parents())\n docs.forEach(d => {\n // only the phrases that should change\n let shouldChange = d.list.filter(p => {\n return p.hasId(starterId) || p.hasId(newPhrase.start)\n })\n toStretch = toStretch.concat(shouldChange)\n })\n // don't double-count\n toStretch = unique(toStretch)\n // stretch these phrases\n toStretch.forEach(p => {\n p.length += newPhrase.length\n // change the start too, if necessary\n if (p.start === starterId) {\n p.start = newPhrase.start\n }\n p.cache = {}\n })\n return original\n}\nmodule.exports = joinPhrase\n","//recursively decrease the length of all the parent phrases\nconst shrinkAll = function(doc, id, deleteLength, after) {\n let arr = doc.parents()\n arr.push(doc)\n\n arr.forEach(d => {\n //find our phrase to shrink\n let phrase = d.list.find(p => p.hasId(id))\n if (!phrase) {\n return\n }\n phrase.length -= deleteLength\n // does it start with this soon-removed word?\n if (phrase.start === id) {\n phrase.start = after.id\n }\n phrase.cache = {}\n })\n // cleanup empty phrase objects\n doc.list = doc.list.filter(p => {\n if (!p.start || !p.length) {\n return false\n }\n return true\n })\n}\n\n/** wrap the linked-list around these terms\n * so they don't appear any more\n */\nconst deletePhrase = function(phrase, doc) {\n let pool = doc.pool()\n let terms = phrase.terms()\n\n //grab both sides of the chain,\n let prev = pool.get(terms[0].prev) || {}\n let after = pool.get(terms[terms.length - 1].next) || {}\n\n if (terms[0].implicit && prev.implicit) {\n prev.set(prev.implicit)\n prev.post += ' '\n }\n\n // //first, change phrase lengths\n shrinkAll(doc, phrase.start, phrase.length, after)\n\n // connect [prev]->[after]\n if (prev) {\n prev.next = after.id\n }\n // connect [prev]<-[after]\n if (after) {\n after.prev = prev.id\n }\n\n // lastly, actually delete the terms from the pool?\n // for (let i = 0; i < terms.length; i++) {\n // pool.remove(terms[i].id)\n // }\n}\nmodule.exports = deletePhrase\n","const append = require('../insert/append')\nconst prepend = require('../insert/prepend')\nconst deletePhrase = require('../insert/delete')\n// const tokenize = require('../../01-tokenizer')\n\n/** put this text at the end */\nexports.append = function(newPhrase, doc) {\n append(this, newPhrase, doc)\n return this\n}\n\n/** add this text to the beginning */\nexports.prepend = function(newPhrase, doc) {\n prepend(this, newPhrase, doc)\n return this\n}\n\nexports.delete = function(doc) {\n deletePhrase(this, doc)\n return this\n}\n\n// stich-in newPhrase, stretch 'doc' + parents\nexports.replace = function(newPhrase, doc) {\n //add it do the end\n let firstLength = this.length\n append(this, newPhrase, doc)\n\n //delete original terms\n let tmp = this.buildFrom(this.start, this.length)\n tmp.length = firstLength\n deletePhrase(tmp, doc)\n}\n\n/**\n * Turn this phrase object into 3 phrase objects\n */\nexports.splitOn = function(p) {\n let terms = this.terms()\n let result = {\n before: null,\n match: null,\n after: null,\n }\n let index = terms.findIndex(t => t.id === p.start)\n if (index === -1) {\n return result\n }\n //make all three sections into phrase-objects\n let start = terms.slice(0, index)\n if (start.length > 0) {\n result.before = this.buildFrom(start[0].id, start.length)\n }\n let match = terms.slice(index, index + p.length)\n if (match.length > 0) {\n result.match = this.buildFrom(match[0].id, match.length)\n }\n let end = terms.slice(index + p.length, terms.length)\n if (end.length > 0) {\n result.after = this.buildFrom(end[0].id, end.length, this.pool)\n }\n return result\n}\n","/** return json metadata for this phrase */\nexports.json = function(options = {}, world) {\n let res = {}\n // text data\n if (options.text) {\n res.text = this.text()\n }\n if (options.normal) {\n res.normal = this.text('normal')\n }\n if (options.clean) {\n res.clean = this.text('clean')\n }\n if (options.reduced) {\n res.reduced = this.text('reduced')\n }\n if (options.root) {\n res.root = this.text('root')\n }\n if (options.trim) {\n if (res.text) {\n res.text = res.text.trim()\n }\n if (res.normal) {\n res.normal = res.normal.trim()\n }\n if (res.reduced) {\n res.reduced = res.reduced.trim()\n }\n }\n // terms data\n if (options.terms) {\n if (options.terms === true) {\n options.terms = {}\n }\n res.terms = this.terms().map(t => t.json(options.terms, world))\n }\n return res\n}\n","/** match any terms after this phrase */\nexports.lookAhead = function(regs) {\n // if empty match string, return everything after\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getAfter = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getAfter(term.next) //recursion\n }\n }\n let all = this.terms()\n let lastTerm = all[all.length - 1]\n getAfter(lastTerm.next)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[0].id, terms.length)\n return p.match(regs)\n}\n\n/** match any terms before this phrase */\nexports.lookBehind = function(regs) {\n // if empty match string, return everything before\n if (!regs) {\n regs = '.*'\n }\n let pool = this.pool\n // get a list of all terms preceding our start\n let terms = []\n const getBefore = function(id) {\n let term = pool.get(id)\n if (!term) {\n return\n }\n terms.push(term)\n if (term.prev) {\n getBefore(term.prev) //recursion\n }\n }\n let term = pool.get(this.start)\n getBefore(term.prev)\n if (terms.length === 0) {\n return []\n }\n // got the terms, make a phrase from them\n let p = this.buildFrom(terms[terms.length - 1].id, terms.length)\n return p.match(regs)\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-text'),\n require('./03-change'),\n require('./04-insert'),\n require('./05-json'),\n require('./06-lookahead')\n)\n","// try to avoid doing the match\nconst failFast = function(p, regs) {\n if (regs.length === 0) {\n return true\n }\n for (let i = 0; i < regs.length; i += 1) {\n let reg = regs[i]\n //logical quick-ones\n if (reg.optional !== true && reg.negative !== true) {\n //start/end impossibilites\n if (reg.start === true && i > 0) {\n return true\n }\n }\n //this is not possible\n if (reg.anything === true && reg.negative === true) {\n return true\n }\n }\n return false\n}\nmodule.exports = failFast\n","const makeId = require('../../Term/_id')\n// i formally apologize for how complicated this is.\n\n//found a match? it's greedy? keep going!\nconst getGreedy = function(terms, t, reg, until, index, length) {\n let start = t\n for (; t < terms.length; t += 1) {\n //stop for next-reg match\n if (until && terms[t].doesMatch(until, index + t, length)) {\n return t\n }\n let count = t - start + 1\n // is it max-length now?\n if (reg.max !== undefined && count === reg.max) {\n return t\n }\n //stop here\n if (terms[t].doesMatch(reg, index + t, length) === false) {\n // is it too short?\n if (reg.min !== undefined && count < reg.min) {\n return null\n }\n return t\n }\n }\n return t\n}\n\n//'unspecific greedy' is a weird situation.\nconst greedyTo = function(terms, t, nextReg, index, length) {\n //if there's no next one, just go off the end!\n if (!nextReg) {\n return terms.length\n }\n //otherwise, we're looking for the next one\n for (; t < terms.length; t += 1) {\n if (terms[t].doesMatch(nextReg, index + t, length) === true) {\n return t\n }\n }\n //guess it doesn't exist, then.\n return null\n}\n\n// get or create named group\nconst getOrCreateGroup = function(namedGroups, namedGroupId, terms, startIndex, group) {\n const g = namedGroups[namedGroupId]\n\n if (g) {\n return g\n }\n\n const { id } = terms[startIndex]\n\n namedGroups[namedGroupId] = {\n group: String(group),\n start: id,\n length: 0,\n }\n\n return namedGroups[namedGroupId]\n}\n\n/** tries to match a sequence of terms, starting from here */\nconst tryHere = function(terms, regs, index, length) {\n const namedGroups = {}\n let previousGroupId = null\n let t = 0\n // we must satisfy each rule in 'regs'\n for (let r = 0; r < regs.length; r += 1) {\n let reg = regs[r]\n\n // Check if this reg has a named capture group\n const isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'\n let namedGroupId = null\n\n // Reuse previous capture group if same\n if (isNamedGroup) {\n const prev = regs[r - 1]\n if (prev && prev.named === reg.named && previousGroupId) {\n namedGroupId = previousGroupId\n } else {\n namedGroupId = makeId(reg.named)\n previousGroupId = namedGroupId\n }\n }\n\n //should we fail here?\n if (!terms[t]) {\n //are all remaining regs optional?\n const hasNeeds = regs.slice(r).some(remain => !remain.optional)\n if (hasNeeds === false) {\n break\n }\n // have unmet needs\n return [false, null]\n }\n\n //support 'unspecific greedy' .* properly\n if (reg.anything === true && reg.greedy === true) {\n let skipto = greedyTo(terms, t, regs[r + 1], reg, index, length)\n // ensure it's long enough\n if (reg.min !== undefined && skipto - t < reg.min) {\n return [false, null]\n }\n // reduce it back, if it's too long\n if (reg.max !== undefined && skipto - t > reg.max) {\n t = t + reg.max\n continue\n }\n\n if (skipto === null) {\n return [false, null] //couldn't find it\n }\n\n // is it really this easy?....\n if (isNamedGroup) {\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named)\n\n // Update group\n g.length = skipto - t\n }\n\n t = skipto\n\n continue\n }\n\n //if it looks like a match, continue\n //we have a special case where an end-anchored greedy match may need to\n //start matching before the actual end; we do this by (temporarily!)\n //removing the \"end\" property from the matching token... since this is\n //very situation-specific, we *only* do this when we really need to.\n if (\n reg.anything === true ||\n (reg.end === true &&\n reg.greedy === true &&\n index + t < length - 1 &&\n terms[t].doesMatch(Object.assign({}, reg, { end: false }), index + t, length) === true) ||\n terms[t].doesMatch(reg, index + t, length) === true\n ) {\n let startAt = t\n // okay, it was a match, but if it optional too,\n // we should check the next reg too, to skip it?\n if (reg.optional && regs[r + 1]) {\n // does the next reg match it too?\n if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) {\n // but does the next reg match the next term??\n // only skip if it doesn't\n if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) {\n r += 1\n }\n }\n }\n //advance to the next term!\n t += 1\n //check any ending '$' flags\n if (reg.end === true) {\n //if this isn't the last term, refuse the match\n if (t !== terms.length && reg.greedy !== true) {\n return [false, null]\n }\n }\n\n //try keep it going!\n if (reg.greedy === true) {\n // for greedy checking, we no longer care about the reg.start\n // value, and leaving it can cause failures for anchored greedy\n // matches. ditto for end-greedy matches: we need an earlier non-\n // ending match to succceed until we get to the actual end.\n t = getGreedy(terms, t, Object.assign({}, reg, { start: false, end: false }), regs[r + 1], index, length)\n if (t === null) {\n return [false, null] //greedy was too short\n }\n // if this was also an end-anchor match, check to see we really\n // reached the end\n if (reg.end === true && index + t !== length) {\n return [false, null] //greedy didn't reach the end\n }\n }\n if (isNamedGroup) {\n // Get or create capture group\n const g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named)\n\n // Update group - add greedy or increment length\n if (t > 1 && reg.greedy) {\n g.length += t - startAt\n } else {\n g.length++\n }\n }\n\n continue\n }\n\n //bah, who cares, keep going\n if (reg.optional === true) {\n continue\n }\n // should we skip-over an implicit word?\n if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) {\n // does the next one match?\n if (terms[t + 1].doesMatch(reg, index + t, length)) {\n t += 2\n continue\n }\n }\n // console.log(' ❌\\n\\n')\n return [false, null]\n }\n\n //return our result\n return [terms.slice(0, t), namedGroups]\n}\nmodule.exports = tryHere\n","const postProcess = function(terms, regs, matches) {\n if (!matches || matches.length === 0) {\n return matches\n }\n // ensure end reg has the end term\n let atEnd = regs.some(r => r.end)\n if (atEnd) {\n let lastTerm = terms[terms.length - 1]\n matches = matches.filter(({ match: arr }) => arr.indexOf(lastTerm) !== -1)\n }\n return matches\n}\nmodule.exports = postProcess\n","/* break-down a match expression into this:\n{\n word:'',\n tag:'',\n regex:'',\n\n start:false,\n end:false,\n negative:false,\n anything:false,\n greedy:false,\n optional:false,\n\n named:'',\n choices:[],\n}\n*/\nconst hasMinMax = /\\{([0-9]+,?[0-9]*)\\}/\nconst andSign = /&&/\nconst captureName = new RegExp(/^<(\\S+)>/)\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\nconst end = function(str) {\n return str[str.length - 1]\n}\nconst start = function(str) {\n return str[0]\n}\nconst stripStart = function(str) {\n return str.substr(1)\n}\nconst stripEnd = function(str) {\n return str.substr(0, str.length - 1)\n}\nconst stripBoth = function(str) {\n str = stripStart(str)\n str = stripEnd(str)\n return str\n}\n\n//\nconst parseToken = function(w) {\n let obj = {}\n //collect any flags (do it twice)\n for (let i = 0; i < 2; i += 1) {\n //end-flag\n if (end(w) === '$') {\n obj.end = true\n w = stripEnd(w)\n }\n //front-flag\n if (start(w) === '^') {\n obj.start = true\n w = stripStart(w)\n }\n //capture group (this one can span multiple-terms)\n if (start(w) === '[' || end(w) === ']') {\n obj.named = true\n\n if (start(w) === '[') {\n obj.groupType = end(w) === ']' ? 'single' : 'start'\n } else {\n obj.groupType = 'end'\n }\n\n w = w.replace(/^\\[/, '')\n w = w.replace(/\\]$/, '')\n\n // Use capture group name\n if (start(w) === '<') {\n const res = captureName.exec(w)\n\n if (res.length >= 2) {\n obj.named = res[1]\n w = w.replace(res[0], '')\n }\n }\n }\n //back-flags\n if (end(w) === '+') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (w !== '*' && end(w) === '*' && w !== '\\\\*') {\n obj.greedy = true\n w = stripEnd(w)\n }\n if (end(w) === '?') {\n obj.optional = true\n w = stripEnd(w)\n }\n\n if (start(w) === '!') {\n obj.negative = true\n w = stripStart(w)\n }\n //wrapped-flags\n if (start(w) === '(' && end(w) === ')') {\n // support (one && two)\n if (andSign.test(w)) {\n obj.choices = w.split(andSign)\n obj.operator = 'and'\n } else {\n obj.choices = w.split('|')\n obj.operator = 'or'\n }\n //remove '(' and ')'\n obj.choices[0] = stripStart(obj.choices[0])\n let last = obj.choices.length - 1\n obj.choices[last] = stripEnd(obj.choices[last])\n // clean up the results\n obj.choices = obj.choices.map(s => s.trim())\n obj.choices = obj.choices.filter(s => s)\n //recursion alert!\n obj.choices = obj.choices.map(parseToken)\n w = ''\n }\n\n //regex\n if (start(w) === '/' && end(w) === '/') {\n w = stripBoth(w)\n obj.regex = new RegExp(w) //potential vuln - security/detect-non-literal-regexp\n return obj\n }\n //soft-match\n if (start(w) === '~' && end(w) === '~') {\n w = stripBoth(w)\n obj.soft = true\n obj.word = w\n return obj\n }\n }\n // support #Tag{0,9}\n if (hasMinMax.test(w) === true) {\n w = w.replace(hasMinMax, (a, b) => {\n let arr = b.split(/,/g)\n if (arr.length === 1) {\n // '{3}'\tExactly three times\n obj.min = Number(arr[0])\n obj.max = Number(arr[0])\n } else {\n // '{2,4}' Two to four times\n // '{3,}' Three or more times\n obj.min = Number(arr[0])\n obj.max = Number(arr[1] || 999)\n }\n obj.greedy = true\n return ''\n })\n }\n\n //do the actual token content\n if (start(w) === '#') {\n obj.tag = stripStart(w)\n obj.tag = titleCase(obj.tag)\n return obj\n }\n //dynamic function on a term object\n if (start(w) === '@') {\n obj.method = stripStart(w)\n return obj\n }\n if (w === '.') {\n obj.anything = true\n return obj\n }\n //support alone-astrix\n if (w === '*') {\n obj.anything = true\n obj.greedy = true\n obj.optional = true\n return obj\n }\n if (w) {\n //somehow handle encoded-chars?\n w = w.replace('\\\\*', '*')\n w = w.replace('\\\\.', '.')\n obj.word = w.toLowerCase()\n }\n return obj\n}\nmodule.exports = parseToken\n","const isNamed = function(capture) {\n return typeof capture === 'string' || typeof capture === 'number'\n}\n\nconst fillGroups = function(tokens) {\n let convert = false\n let index = -1\n let current\n\n //'fill in' capture groups between start-end\n for (let i = 0; i < tokens.length; i++) {\n const n = tokens[i]\n\n // Give name to un-named single tokens\n if (n.groupType === 'single' && n.named === true) {\n index += 1\n n.named = index\n continue\n }\n\n // Start converting tokens\n if (n.groupType === 'start') {\n convert = true\n if (isNamed(n.named)) {\n current = n.named\n } else {\n index += 1\n current = index\n }\n }\n\n // Ensure this token has the right name\n if (convert) {\n n.named = current\n }\n\n // Stop converting tokens\n if (n.groupType === 'end') {\n convert = false\n }\n }\n return tokens\n}\n\nconst useOneOf = function(tokens) {\n return tokens.map(token => {\n if (token.choices !== undefined) {\n // are they all straight non-optional words?\n let shouldPack = token.choices.every(c => c.optional !== true && c.negative !== true && c.word !== undefined)\n if (shouldPack === true) {\n let oneOf = {}\n token.choices.forEach(c => (oneOf[c.word] = true))\n token.oneOf = oneOf\n delete token.choices\n }\n }\n return token\n })\n}\n\nconst postProcess = function(tokens) {\n // ensure all capture groups are filled between start and end\n // give all capture groups names\n let count = tokens.filter(t => t.groupType).length\n if (count > 0) {\n tokens = fillGroups(tokens)\n }\n // convert 'choices' format to 'oneOf' format\n tokens = useOneOf(tokens)\n // console.log(tokens)\n\n return tokens\n}\nmodule.exports = postProcess\n","const parseToken = require('./parseToken')\nconst postProcess = require('./postProcess')\n\nconst isArray = function(arr) {\n return Object.prototype.toString.call(arr) === '[object Array]'\n}\n\n//split-up by (these things)\nconst byParentheses = function(str) {\n let arr = str.split(/([\\^\\[\\!]*(?:<\\S+>)?\\(.*?\\)[?+*]*\\]?\\$?)/)\n arr = arr.map(s => s.trim())\n return arr\n}\n\nconst byWords = function(arr) {\n let words = []\n arr.forEach(a => {\n //keep brackets lumped together\n if (/^[[^_/]?\\(/.test(a[0])) {\n words.push(a)\n return\n }\n let list = a.split(' ')\n list = list.filter(w => w)\n words = words.concat(list)\n })\n return words\n}\n\n//turn an array into a 'choices' list\nconst byArray = function(arr) {\n return [\n {\n choices: arr.map(s => {\n return {\n word: s,\n }\n }),\n },\n ]\n}\n\nconst fromDoc = function(doc) {\n if (!doc || !doc.list || !doc.list[0]) {\n return []\n }\n let ids = []\n doc.list.forEach(p => {\n p.terms().forEach(t => {\n ids.push({ id: t.id })\n })\n })\n return [{ choices: ids, greedy: true }]\n}\n\n/** parse a match-syntax string into json */\nconst syntax = function(input) {\n // fail-fast\n if (input === null || input === undefined || input === '') {\n return []\n }\n //try to support a ton of different formats:\n if (typeof input === 'object') {\n if (isArray(input)) {\n if (input.length === 0 || !input[0]) {\n return []\n }\n\n //is it a pre-parsed reg-list?\n if (typeof input[0] === 'object') {\n return input\n }\n //support a flat array of normalized words\n if (typeof input[0] === 'string') {\n return byArray(input)\n }\n }\n //support passing-in a compromise object as a match\n if (input && input.isA === 'Doc') {\n return fromDoc(input)\n }\n return []\n }\n if (typeof input === 'number') {\n input = String(input) //go for it?\n }\n let tokens = byParentheses(input)\n tokens = byWords(tokens)\n tokens = tokens.map(parseToken)\n //clean up anything weird\n tokens = postProcess(tokens)\n // console.log(JSON.stringify(tokens, null, 2))\n return tokens\n}\n\nmodule.exports = syntax\n","const failFast = require('./02-failFast')\nconst tryMatch = require('./03-tryMatch')\nconst postProcess = require('./04-postProcess')\nconst syntax = require('../../Doc/match/syntax')\n\n/** returns a simple array of arrays */\nconst matchAll = function(p, regs, matchOne = false) {\n //if we forgot to parse it..\n if (typeof regs === 'string') {\n regs = syntax(regs)\n }\n //try to dismiss it, at-once\n if (failFast(p, regs) === true) {\n return []\n }\n\n //any match needs to be this long, at least\n const minLength = regs.filter(r => r.optional !== true).length\n let terms = p.terms()\n let matches = []\n\n //optimisation for '^' start logic\n if (regs[0].start === true) {\n let [match, groups] = tryMatch(terms, regs, 0, terms.length)\n if (match !== false && match.length > 0) {\n match = match.filter(m => m)\n matches.push({ match, groups })\n }\n\n return postProcess(terms, regs, matches)\n }\n //try starting, from every term\n for (let i = 0; i < terms.length; i += 1) {\n // slice may be too short\n if (i + minLength > terms.length) {\n break\n }\n //try it!\n let [match, groups] = tryMatch(terms.slice(i), regs, i, terms.length)\n if (match !== false && match.length > 0) {\n //zoom forward!\n i += match.length - 1\n //[capture-groups] return some null responses\n match = match.filter(m => m)\n matches.push({ match, groups })\n\n //ok, maybe that's enough?\n if (matchOne === true) {\n return postProcess(terms, regs, matches)\n }\n }\n }\n return postProcess(terms, regs, matches)\n}\nmodule.exports = matchAll\n","const matchAll = require('./01-matchAll')\n\n/** return anything that doesn't match.\n * returns a simple array of arrays\n */\nconst notMatch = function(p, regs) {\n let found = {}\n let arr = matchAll(p, regs)\n arr.forEach(({ match: ts }) => {\n ts.forEach(t => {\n found[t.id] = true\n })\n })\n //return anything not found\n let terms = p.terms()\n let result = []\n let current = []\n terms.forEach(t => {\n if (found[t.id] === true) {\n if (current.length > 0) {\n result.push(current)\n current = []\n }\n return\n }\n current.push(t)\n })\n if (current.length > 0) {\n result.push(current)\n }\n return result\n}\nmodule.exports = notMatch\n","const matchAll = require('./01-matchAll')\nconst notMatch = require('./not')\n\n/** return an array of matching phrases */\nexports.match = function(regs, justOne = false) {\n let matches = matchAll(this, regs, justOne)\n //make them phrase objects\n matches = matches.map(({ match, groups }) => {\n let p = this.buildFrom(match[0].id, match.length, groups)\n p.cache.terms = match\n return p\n })\n return matches\n}\n\n/** return boolean if one match is found */\nexports.has = function(regs) {\n let matches = matchAll(this, regs, true)\n return matches.length > 0\n}\n\n/** remove all matches from the result */\nexports.not = function(regs) {\n let matches = notMatch(this, regs)\n //make them phrase objects\n matches = matches.map(list => {\n return this.buildFrom(list[0].id, list.length)\n })\n return matches\n}\n\n/** return a list of phrases that can have this tag */\nexports.canBe = function(tag, world) {\n let results = []\n let terms = this.terms()\n let previous = false\n for (let i = 0; i < terms.length; i += 1) {\n let can = terms[i].canBe(tag, world)\n if (can === true) {\n if (previous === true) {\n //add it to the end\n results[results.length - 1].push(terms[i])\n } else {\n results.push([terms[i]]) //make a new one\n }\n previous = can\n }\n }\n //turn them into Phrase objects\n results = results\n .filter(a => a.length > 0)\n .map(arr => {\n return this.buildFrom(arr[0].id, arr.length)\n })\n return results\n}\n","const methods = require('./methods')\nconst matchMethods = require('./match')\n// const tokenize = require('../01-tokenizer')\n\nclass Phrase {\n constructor(id, length, pool) {\n this.start = id\n this.length = length\n this.isA = 'Phrase' // easier than .constructor...\n Object.defineProperty(this, 'pool', {\n enumerable: false,\n writable: true,\n value: pool,\n })\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n Object.defineProperty(this, 'groups', {\n enumerable: false,\n writable: true,\n value: {},\n })\n }\n}\n\n/** create a new Phrase object from an id and length */\nPhrase.prototype.buildFrom = function(id, length, groups) {\n let p = new Phrase(id, length, this.pool)\n //copy-over or replace capture-groups too\n if (groups && Object.keys(groups).length > 0) {\n p.groups = groups\n } else {\n p.groups = this.groups\n }\n return p\n}\n\n//apply methods\nObject.assign(Phrase.prototype, matchMethods)\nObject.assign(Phrase.prototype, methods)\n\n//apply aliases\nconst aliases = {\n term: 'terms',\n}\nObject.keys(aliases).forEach(k => (Phrase.prototype[k] = Phrase.prototype[aliases[k]]))\n\nmodule.exports = Phrase\n","/** a key-value store of all terms in our Document */\nclass Pool {\n constructor(words = {}) {\n //quiet this property in console.logs\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: words,\n })\n }\n /** throw a new term object in */\n add(term) {\n this.words[term.id] = term\n return this\n }\n /** find a term by it's id */\n get(id) {\n return this.words[id]\n }\n /** find a term by it's id */\n remove(id) {\n delete this.words[id]\n }\n merge(pool) {\n Object.assign(this.words, pool.words)\n return this\n }\n /** helper method */\n stats() {\n return {\n words: Object.keys(this.words).length,\n }\n }\n}\n\n/** make a deep-copy of all terms */\nPool.prototype.clone = function() {\n let keys = Object.keys(this.words)\n let words = keys.reduce((h, k) => {\n let t = this.words[k].clone()\n h[t.id] = t\n return h\n }, {})\n return new Pool(words)\n}\n\nmodule.exports = Pool\n","//add forward/backward 'linked-list' prev/next ids\nconst linkTerms = terms => {\n terms.forEach((term, i) => {\n if (i > 0) {\n term.prev = terms[i - 1].id\n }\n if (terms[i + 1]) {\n term.next = terms[i + 1].id\n }\n })\n}\nmodule.exports = linkTerms\n","//(Rule-based sentence boundary segmentation) - chop given text into its proper sentences.\n// Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc.\n// @spencermountain 2017 MIT\n\n//proper nouns with exclamation marks\n// const blacklist = {\n// yahoo: true,\n// joomla: true,\n// jeopardy: true,\n// }\n\n//regs-\nconst initSplit = /(\\S.+?[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049])(?=\\s+|$)/g\nconst hasSomething = /\\S/\n\nconst isAcronym = /[ .][A-Z]\\.? *$/i\nconst hasEllipse = /(?:\\u2026|\\.{2,}) *$/\nconst newLine = /((?:\\r?\\n|\\r)+)/ // Match different new-line formats\nconst hasLetter = /[a-z0-9\\u00C0-\\u00FF\\u00a9|\\u00ae|[\\u2000-\\u3300]|\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff]/i\n\nconst startWhitespace = /^\\s+/\n\n// Start with a regex:\nconst naiive_split = function(text) {\n let all = []\n //first, split by newline\n let lines = text.split(newLine)\n for (let i = 0; i < lines.length; i++) {\n //split by period, question-mark, and exclamation-mark\n let arr = lines[i].split(initSplit)\n for (let o = 0; o < arr.length; o++) {\n all.push(arr[o])\n }\n }\n return all\n}\n\n/** does this look like a sentence? */\nconst isSentence = function(str, abbrevs) {\n // check for 'F.B.I.'\n if (isAcronym.test(str) === true) {\n return false\n }\n //check for '...'\n if (hasEllipse.test(str) === true) {\n return false\n }\n // must have a letter\n if (hasLetter.test(str) === false) {\n return false\n }\n\n let txt = str.replace(/[.!?\\u203D\\u2E18\\u203C\\u2047-\\u2049] *$/, '')\n let words = txt.split(' ')\n let lastWord = words[words.length - 1].toLowerCase()\n // check for 'Mr.'\n if (abbrevs.hasOwnProperty(lastWord)) {\n return false\n }\n // //check for jeopardy!\n // if (blacklist.hasOwnProperty(lastWord)) {\n // return false\n // }\n return true\n}\n\nconst splitSentences = function(text, world) {\n let abbrevs = world.cache.abbreviations\n\n text = text || ''\n text = String(text)\n let sentences = []\n // First do a greedy-split..\n let chunks = []\n // Ensure it 'smells like' a sentence\n if (!text || typeof text !== 'string' || hasSomething.test(text) === false) {\n return sentences\n }\n // Start somewhere:\n let splits = naiive_split(text)\n // Filter-out the crap ones\n for (let i = 0; i < splits.length; i++) {\n let s = splits[i]\n if (s === undefined || s === '') {\n continue\n }\n //this is meaningful whitespace\n if (hasSomething.test(s) === false) {\n //add it to the last one\n if (chunks[chunks.length - 1]) {\n chunks[chunks.length - 1] += s\n continue\n } else if (splits[i + 1]) {\n //add it to the next one\n splits[i + 1] = s + splits[i + 1]\n continue\n }\n }\n //else, only whitespace, no terms, no sentence\n chunks.push(s)\n }\n\n //detection of non-sentence chunks:\n //loop through these chunks, and join the non-sentence chunks back together..\n for (let i = 0; i < chunks.length; i++) {\n let c = chunks[i]\n //should this chunk be combined with the next one?\n if (chunks[i + 1] && isSentence(c, abbrevs) === false) {\n chunks[i + 1] = c + (chunks[i + 1] || '')\n } else if (c && c.length > 0) {\n //&& hasLetter.test(c)\n //this chunk is a proper sentence..\n sentences.push(c)\n chunks[i] = ''\n }\n }\n //if we never got a sentence, return the given text\n if (sentences.length === 0) {\n return [text]\n }\n\n //move whitespace to the ends of sentences, when possible\n //['hello',' world'] -> ['hello ','world']\n for (let i = 1; i < sentences.length; i += 1) {\n let ws = sentences[i].match(startWhitespace)\n if (ws !== null) {\n sentences[i - 1] += ws[0]\n sentences[i] = sentences[i].replace(startWhitespace, '')\n }\n }\n return sentences\n}\n\nmodule.exports = splitSentences\n// console.log(sentence_parser('john f. kennedy'));\n","const wordlike = /\\S/\nconst isBoundary = /^[!?.]+$/\nconst naiiveSplit = /(\\S+)/\nconst isSlash = /\\/\\W*$/\n\nconst notWord = {\n '.': true,\n '-': true, //dash\n '–': true, //en-dash\n '—': true, //em-dash\n '--': true,\n '...': true,\n // '/': true, // 'one / two'\n}\n\nconst hasHyphen = function(str) {\n //dont split 're-do'\n if (/^(re|un)-?[^aeiou]./.test(str) === true) {\n return false\n }\n //letter-number\n let reg = /^([a-z\\u00C0-\\u00FF`\"'/]+)(-|–|—)([a-z0-9\\u00C0-\\u00FF].*)/i\n if (reg.test(str) === true) {\n return true\n }\n //support weird number-emdash combo '2010–2011'\n // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i\n // if (reg2.test(str)) {\n // return true\n // }\n return false\n}\n\n// 'he / she' should be one word\nconst combineSlashes = function(arr) {\n for (let i = 1; i < arr.length - 1; i++) {\n if (isSlash.test(arr[i])) {\n arr[i - 1] += arr[i] + arr[i + 1]\n arr[i] = null\n arr[i + 1] = null\n }\n }\n return arr\n}\n\nconst splitHyphens = function(word) {\n let arr = []\n //support multiple-hyphenated-terms\n const hyphens = word.split(/[-–—]/)\n let whichDash = '-'\n let found = word.match(/[-–—]/)\n if (found && found[0]) {\n whichDash = found\n }\n for (let o = 0; o < hyphens.length; o++) {\n if (o === hyphens.length - 1) {\n arr.push(hyphens[o])\n } else {\n arr.push(hyphens[o] + whichDash)\n }\n }\n return arr\n}\n\n//turn a string into an array of strings (naiive for now, lumped later)\nconst splitWords = function(str) {\n let result = []\n let arr = []\n //start with a naiive split\n str = str || ''\n if (typeof str === 'number') {\n str = String(str)\n }\n\n const words = str.split(naiiveSplit)\n for (let i = 0; i < words.length; i++) {\n //split 'one-two'\n if (hasHyphen(words[i]) === true) {\n arr = arr.concat(splitHyphens(words[i]))\n continue\n }\n arr.push(words[i])\n }\n //greedy merge whitespace+arr to the right\n let carry = ''\n for (let i = 0; i < arr.length; i++) {\n let word = arr[i]\n //if it's more than a whitespace\n if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) {\n //put whitespace on end of previous term, if possible\n if (result.length > 0) {\n result[result.length - 1] += carry\n result.push(word)\n } else {\n //otherwise, but whitespace before\n result.push(carry + word)\n }\n carry = ''\n } else {\n carry += word\n }\n }\n //handle last one\n if (carry) {\n if (result.length === 0) {\n result[0] = ''\n }\n result[result.length - 1] += carry //put it on the end\n }\n // combine 'one / two'\n result = combineSlashes(result)\n // remove empty results\n result = result.filter(s => s)\n return result\n}\nmodule.exports = splitWords\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\nconst splitSentences = require('./01-sentences')\nconst splitTerms = require('./02-words')\n\n/** turn a string into an array of Phrase objects */\nconst fromText = function(text = '', world, pool) {\n //a bit of validation, first\n if (typeof text !== 'string') {\n if (typeof text === 'number') {\n text = String(text)\n }\n }\n //tokenize into words\n let sentences = splitSentences(text, world)\n sentences = sentences.map(str => splitTerms(str))\n\n //turn them into proper objects\n pool = pool || new Pool()\n\n let phrases = sentences.map(terms => {\n terms = terms.map(str => {\n let term = new Term(str)\n pool.add(term)\n return term\n })\n //add next/previous ids\n linkTerms(terms)\n\n //return phrase objects\n let p = new Phrase(terms[0].id, terms.length, pool)\n p.cache.terms = terms\n return p\n })\n //return them ready for a Document object\n return phrases\n}\n\nmodule.exports = fromText\n","const Term = require('../Term/Term')\nconst Phrase = require('../Phrase/Phrase')\nconst Pool = require('./Pool')\nconst linkTerms = require('./_linkTerms')\n\nconst fromJSON = function(json, world) {\n let pool = new Pool()\n let phrases = json.map((p, k) => {\n let terms = p.terms.map((o, i) => {\n let term = new Term(o.text)\n term.pre = o.pre !== undefined ? o.pre : ''\n if (o.post === undefined) {\n o.post = ' '\n //no given space for very last term\n if (i >= p.terms.length - 1) {\n o.post = '. '\n if (k >= p.terms.length - 1) {\n o.post = '.'\n }\n }\n }\n term.post = o.post !== undefined ? o.post : ' '\n\n if (o.tags) {\n o.tags.forEach(tag => term.tag(tag, '', world))\n }\n pool.add(term)\n return term\n })\n //add prev/next links\n linkTerms(terms)\n // return a proper Phrase object\n return new Phrase(terms[0].id, terms.length, pool)\n })\n return phrases\n}\nmodule.exports = fromJSON\n","module.exports = '13.1.1'","module.exports={\n \"Comparative\": \"true¦better\",\n \"Superlative\": \"true¦earlier\",\n \"PresentTense\": \"true¦is,sounds\",\n \"Value\": \"true¦a few\",\n \"Noun\": \"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc\",\n \"Copula\": \"true¦a1is,w0;as,ere;m,re\",\n \"PastTense\": \"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan\",\n \"Condition\": \"true¦if,unless\",\n \"Gerund\": \"true¦accord0be0develop0go0result0stain0;ing\",\n \"Negative\": \"true¦n0;ever,o0;!n,t\",\n \"QuestionWord\": \"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s\",\n \"Plural\": \"true¦records\",\n \"Conjunction\": \"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh\",\n \"Pronoun\": \"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s\",\n \"Singular\": \"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em\",\n \"Actor\": \"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt\",\n \"Honorific\": \"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al\",\n \"SportsTeam\": \"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls\",\n \"Uncountable\": \"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics\",\n \"Infinitive\": \"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on\",\n \"Unit\": \"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s\",\n \"Organization\": \"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c\",\n \"Demonym\": \"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an\",\n \"Possessive\": \"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne\",\n \"Currency\": \"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s\",\n \"City\": \"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg\",\n \"Abbreviation\": \"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v\",\n \"Place\": \"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s\",\n \"Country\": \"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an\",\n \"Region\": \"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma\",\n \"FemaleName\": \"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah\",\n \"WeekDay\": \"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s\",\n \"Month\": \"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il\",\n \"Date\": \"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w\",\n \"FirstName\": \"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is\",\n \"LastName\": \"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams\",\n \"MaleName\": \"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on\",\n \"Person\": \"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er\",\n \"Verb\": \"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en\",\n \"PhrasalVerb\": \"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut\",\n \"Modal\": \"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld\",\n \"Adjective\": \"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt\",\n \"Comparable\": \"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd\",\n \"TextValue\": \"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th\",\n \"Ordinal\": \"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th\",\n \"Cardinal\": \"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion\",\n \"Expression\": \"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la\",\n \"Adverb\": \"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori\",\n \"Preposition\": \"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut\",\n \"Determiner\": \"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er\"\n}","const entity = ['Person', 'Place', 'Organization']\n\nmodule.exports = {\n Noun: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n // - singular\n Singular: {\n isA: 'Noun',\n notA: 'Plural',\n },\n //a specific thing that's capitalized\n ProperNoun: {\n isA: 'Noun',\n },\n\n // -- people\n Person: {\n isA: ['ProperNoun', 'Singular'],\n notA: ['Place', 'Organization', 'Date'],\n },\n FirstName: {\n isA: 'Person',\n },\n MaleName: {\n isA: 'FirstName',\n notA: ['FemaleName', 'LastName'],\n },\n FemaleName: {\n isA: 'FirstName',\n notA: ['MaleName', 'LastName'],\n },\n LastName: {\n isA: 'Person',\n notA: ['FirstName'],\n },\n NickName: {\n isA: 'Person',\n notA: ['FirstName', 'LastName'],\n },\n Honorific: {\n isA: 'Noun',\n notA: ['FirstName', 'LastName', 'Value'],\n },\n\n // -- places\n Place: {\n isA: 'Singular',\n notA: ['Person', 'Organization'],\n },\n Country: {\n isA: ['Place', 'ProperNoun'],\n notA: ['City'],\n },\n City: {\n isA: ['Place', 'ProperNoun'],\n notA: ['Country'],\n },\n Region: {\n isA: ['Place', 'ProperNoun'],\n },\n Address: {\n isA: 'Place',\n },\n\n //---Orgs---\n Organization: {\n isA: ['Singular', 'ProperNoun'],\n notA: ['Person', 'Place'],\n },\n SportsTeam: {\n isA: 'Organization',\n },\n School: {\n isA: 'Organization',\n },\n Company: {\n isA: 'Organization',\n },\n\n // - plural\n Plural: {\n isA: 'Noun',\n notA: ['Singular'],\n },\n //(not plural or singular)\n Uncountable: {\n isA: 'Noun',\n },\n Pronoun: {\n isA: 'Noun',\n notA: entity,\n },\n //a word for someone doing something -'plumber'\n Actor: {\n isA: 'Noun',\n notA: entity,\n },\n //a gerund-as-noun - 'swimming'\n Activity: {\n isA: 'Noun',\n notA: ['Person', 'Place'],\n },\n //'kilograms'\n Unit: {\n isA: 'Noun',\n notA: entity,\n },\n //'Canadians'\n Demonym: {\n isA: ['Noun', 'ProperNoun'],\n notA: entity,\n },\n //`john's`\n Possessive: {\n isA: 'Noun',\n // notA: 'Pronoun',\n },\n}\n","module.exports = {\n Verb: {\n notA: ['Noun', 'Adjective', 'Adverb', 'Value'],\n },\n // walks\n PresentTense: {\n isA: 'Verb',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // neutral form - 'walk'\n Infinitive: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Gerund'],\n },\n // walking\n Gerund: {\n isA: 'PresentTense',\n notA: ['PastTense', 'Copula', 'FutureTense'],\n },\n // walked\n PastTense: {\n isA: 'Verb',\n notA: ['FutureTense'],\n },\n // will walk\n FutureTense: {\n isA: 'Verb',\n },\n\n // is\n Copula: {\n isA: 'Verb',\n },\n // would have\n Modal: {\n isA: 'Verb',\n notA: ['Infinitive'],\n },\n // had walked\n PerfectTense: {\n isA: 'Verb',\n notA: 'Gerund',\n },\n Pluperfect: {\n isA: 'Verb',\n },\n // shown\n Participle: {\n isA: 'Verb',\n },\n // show up\n PhrasalVerb: {\n isA: 'Verb',\n },\n //'up' part\n Particle: {\n isA: 'PhrasalVerb',\n },\n}\n","module.exports = {\n Value: {\n notA: ['Verb', 'Adjective', 'Adverb'],\n },\n Ordinal: {\n isA: 'Value',\n notA: ['Cardinal'],\n },\n Cardinal: {\n isA: 'Value',\n notA: ['Ordinal'],\n },\n RomanNumeral: {\n isA: 'Cardinal', //can be a person, too\n notA: ['Ordinal', 'TextValue'],\n },\n TextValue: {\n isA: 'Value',\n notA: ['NumericValue'],\n },\n NumericValue: {\n isA: 'Value',\n notA: ['TextValue'],\n },\n Money: {\n isA: 'Cardinal',\n },\n Percent: {\n isA: 'Value',\n },\n}\n","const anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']\n\nmodule.exports = {\n //--Adjectives--\n Adjective: {\n notA: ['Noun', 'Verb', 'Adverb', 'Value'],\n },\n // adjectives that can conjugate\n Comparable: {\n isA: ['Adjective'],\n },\n // better\n Comparative: {\n isA: ['Adjective'],\n },\n // best\n Superlative: {\n isA: ['Adjective'],\n notA: ['Comparative'],\n },\n\n NumberRange: {\n isA: ['Contraction'],\n },\n Adverb: {\n notA: ['Noun', 'Verb', 'Adjective', 'Value'],\n },\n\n // Dates:\n //not a noun, but usually is\n Date: {\n notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'],\n },\n Month: {\n isA: ['Date', 'Singular'],\n notA: ['Year', 'WeekDay', 'Time'],\n },\n WeekDay: {\n isA: ['Date', 'Noun'],\n },\n // '9:20pm'\n Time: {\n isA: ['Date'],\n notA: ['Value'],\n },\n\n //glue\n Determiner: {\n notA: anything,\n },\n Conjunction: {\n notA: anything,\n },\n Preposition: {\n notA: anything,\n },\n\n // what, who, why\n QuestionWord: {\n notA: ['Determiner'],\n },\n\n // peso, euro\n Currency: {},\n // ughh\n Expression: {\n notA: ['Noun', 'Adjective', 'Verb', 'Adverb'],\n },\n // dr.\n Abbreviation: {},\n\n // internet tags\n Url: {\n notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n PhoneNumber: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'],\n },\n HashTag: {},\n AtMention: {\n isA: ['Noun'],\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'],\n },\n Emoji: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Emoticon: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n Email: {\n notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'],\n },\n\n //non-exclusive\n Auxiliary: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n Acronym: {\n notA: ['Plural', 'RomanNumeral'],\n },\n Negative: {\n notA: ['Noun', 'Adjective', 'Value'],\n },\n // if, unless, were\n Condition: {\n notA: ['Verb', 'Adjective', 'Noun', 'Value'],\n },\n}\n","// i just made these up\nconst colorMap = {\n Noun: 'blue',\n\n Verb: 'green',\n Negative: 'green',\n\n Date: 'red',\n Value: 'red',\n\n Adjective: 'magenta',\n\n Preposition: 'cyan',\n Conjunction: 'cyan',\n Determiner: 'cyan',\n Adverb: 'cyan',\n}\n\n/** add a debug color to some tags */\nconst addColors = function(tags) {\n Object.keys(tags).forEach(k => {\n // assigned from plugin, for example\n if (tags[k].color) {\n tags[k].color = tags[k].color\n return\n }\n // defined above\n if (colorMap[k]) {\n tags[k].color = colorMap[k]\n return\n }\n tags[k].isA.some(t => {\n if (colorMap[t]) {\n tags[k].color = colorMap[t]\n return true\n }\n return false\n })\n })\n return tags\n}\n\nmodule.exports = addColors\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n//add 'downward' tags (that immediately depend on this one)\nconst inferIsA = function(tags) {\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n let len = tag.isA.length\n for (let i = 0; i < len; i++) {\n let down = tag.isA[i]\n if (tags[down]) {\n tag.isA = tag.isA.concat(tags[down].isA)\n }\n }\n // clean it up\n tag.isA = unique(tag.isA)\n })\n return tags\n}\nmodule.exports = inferIsA\n","const unique = function(arr) {\n return arr.filter((v, i, a) => a.indexOf(v) === i)\n}\n\n// crawl the tag-graph and infer any conflicts\n// faster than doing this at tag-time\nconst inferNotA = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.notA = tag.notA || []\n tag.isA.forEach(down => {\n if (tags[down] && tags[down].notA) {\n // borrow its conflicts\n let notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []\n tag.notA = tag.notA.concat(notA)\n }\n })\n // any tag that lists us as a conflict, we conflict it back.\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (tags[key].notA.indexOf(k) !== -1) {\n tag.notA.push(key)\n }\n }\n // clean it up\n tag.notA = unique(tag.notA)\n })\n return tags\n}\nmodule.exports = inferNotA\n","// a lineage is all 'incoming' tags that have this as 'isA'\nconst inferLineage = function(tags) {\n let keys = Object.keys(tags)\n keys.forEach(k => {\n let tag = tags[k]\n tag.lineage = []\n // find all tags with it in their 'isA' set\n for (let i = 0; i < keys.length; i++) {\n if (tags[keys[i]].isA.indexOf(k) !== -1) {\n tag.lineage.push(keys[i])\n }\n }\n })\n return tags\n}\nmodule.exports = inferLineage\n","const inferColor = require('./_color')\nconst inferIsA = require('./_isA')\nconst inferNotA = require('./_notA')\nconst lineage = require('./_lineage')\n\nconst validate = function(tags) {\n // cleanup format\n Object.keys(tags).forEach(k => {\n let tag = tags[k]\n // ensure isA is an array\n tag.isA = tag.isA || []\n if (typeof tag.isA === 'string') {\n tag.isA = [tag.isA]\n }\n // ensure notA is an array\n tag.notA = tag.notA || []\n if (typeof tag.notA === 'string') {\n tag.notA = [tag.notA]\n }\n })\n return tags\n}\n\n// build-out the tag-graph structure\nconst inferTags = function(tags) {\n // validate data\n tags = validate(tags)\n // build its 'down tags'\n tags = inferIsA(tags)\n // infer the conflicts\n tags = inferNotA(tags)\n // debug tag color\n tags = inferColor(tags)\n // find incoming links\n tags = lineage(tags)\n return tags\n}\nmodule.exports = inferTags\n","const nouns = require('./tags/nouns')\nconst verbs = require('./tags/verbs')\nconst values = require('./tags/values')\nconst misc = require('./tags/misc')\nconst inferTags = require('./inference/index')\n\n//extend tagset with new tags\nconst addIn = function(obj, tags) {\n Object.keys(obj).forEach(k => {\n tags[k] = obj[k]\n })\n}\n\nconst build = () => {\n let tags = {}\n addIn(nouns, tags)\n addIn(verbs, tags)\n addIn(values, tags)\n addIn(misc, tags)\n // do the graph-stuff\n tags = inferTags(tags)\n return tags\n}\nmodule.exports = build()\n","\"use strict\";const BASE=36,seq=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\",cache=seq.split(\"\").reduce(function(n,o,e){return n[o]=e,n},{}),toAlphaCode=function(n){if(void 0!==seq[n])return seq[n];let o=1,e=36,t=\"\";for(;n>=e;n-=e,o++,e*=36);for(;o--;){const o=n%36;t=String.fromCharCode((o<10?48:55)+o)+t,n=(n-o)/36}return t},fromAlphaCode=function(n){if(void 0!==cache[n])return cache[n];let o=0,e=1,t=36,r=1;for(;e=0;e--,r*=36){let t=n.charCodeAt(e)-48;t>10&&(t-=7),o+=t*r}return o};var encoding={toAlphaCode:toAlphaCode,fromAlphaCode:fromAlphaCode},symbols=function(n){const o=new RegExp(\"([0-9A-Z]+):([0-9A-Z]+)\");for(let e=0;e{let s=n.nodes[t];\"!\"===s[0]&&(o.push(r),s=s.slice(1));const c=s.split(/([A-Z0-9,]+)/g);for(let s=0;s{const e=o.split(\"¦\");return n[e[0]]=e[1],n},{}),e={};return Object.keys(o).forEach(function(n){const t=unpack_1(o[n]);\"true\"===n&&(n=!0);for(let o=0;o 1) {\n //cache the beginning word\n world.hasCompound[words[0]] = true\n }\n // inflect our nouns\n if (tag === 'Singular') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || 'Plural' // only if it's safe\n }\n //conjugate our verbs\n if (tag === 'Infinitive') {\n let conj = transform.conjugate(word, world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //derive more adjective forms\n if (tag === 'Comparable') {\n let conj = transform.adjectives(word)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n let w = conj[tags[i]]\n lexicon[w] = lexicon[w] || tags[i] // only if it's safe\n }\n }\n //conjugate phrasal-verbs\n if (tag === 'PhrasalVerb') {\n //add original form\n addWord(word, 'Infinitive', lexicon)\n //conjugate first word\n let conj = transform.conjugate(words[0], world)\n let tags = Object.keys(conj)\n for (let i = 0; i < tags.length; i++) {\n //add it to our cache\n world.hasCompound[conj[tags[i]]] = true\n //first + last words\n let w = conj[tags[i]] + ' ' + words[1]\n\n addWord(w, tags[i], lexicon)\n addWord(w, 'PhrasalVerb', lexicon)\n }\n }\n // inflect our demonyms - 'germans'\n if (tag === 'Demonym') {\n let plural = transform.toPlural(word, world)\n lexicon[plural] = lexicon[plural] || ['Demonym', 'Plural'] // only if it's safe\n }\n}\n\n// throw a bunch of words in our lexicon\n// const doWord = function(words, tag, world) {\n// let lexicon = world.words\n// for (let i = 0; i < words.length; i++) {\n// addWord(words[i], tag, lexicon)\n// // do some fancier stuff\n// addMore(words[i], tag, world)\n// }\n// }\nmodule.exports = {\n addWord: addWord,\n addMore: addMore,\n}\n","// add words from plurals and conjugations data\nconst addIrregulars = function(world) {\n //add irregular plural nouns\n let nouns = world.irregulars.nouns\n let words = Object.keys(nouns)\n for (let i = 0; i < words.length; i++) {\n const w = words[i]\n world.words[w] = 'Singular'\n world.words[nouns[w]] = 'Plural'\n }\n\n // add irregular verb conjugations\n let verbs = world.irregulars.verbs\n let keys = Object.keys(verbs)\n for (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n //add only if it it's safe...\n world.words[inf] = world.words[inf] || 'Infinitive'\n let forms = world.transforms.conjugate(inf, world)\n forms = Object.assign(forms, verbs[inf])\n //add the others\n Object.keys(forms).forEach(tag => {\n world.words[forms[tag]] = world.words[forms[tag]] || tag\n })\n }\n}\nmodule.exports = addIrregulars\n","//words that can't be compressed, for whatever reason\nmodule.exports = {\n // numbers\n '20th century fox': 'Organization',\n // '3m': 'Organization',\n '7 eleven': 'Organization',\n '7-eleven': 'Organization',\n g8: 'Organization',\n 'motel 6': 'Organization',\n vh1: 'Organization',\n q1: 'Date',\n q2: 'Date',\n q3: 'Date',\n q4: 'Date',\n}\n","//nouns with irregular plural/singular forms\n//used in noun.inflect, and also in the lexicon.\n\nmodule.exports = {\n addendum: 'addenda',\n alga: 'algae',\n alumna: 'alumnae',\n alumnus: 'alumni',\n analysis: 'analyses',\n antenna: 'antennae',\n appendix: 'appendices',\n avocado: 'avocados',\n axis: 'axes',\n bacillus: 'bacilli',\n barracks: 'barracks',\n beau: 'beaux',\n bus: 'buses',\n cactus: 'cacti',\n chateau: 'chateaux',\n child: 'children',\n circus: 'circuses',\n clothes: 'clothes',\n corpus: 'corpora',\n criterion: 'criteria',\n curriculum: 'curricula',\n database: 'databases',\n deer: 'deer',\n diagnosis: 'diagnoses',\n echo: 'echoes',\n embargo: 'embargoes',\n epoch: 'epochs',\n foot: 'feet',\n formula: 'formulae',\n fungus: 'fungi',\n genus: 'genera',\n goose: 'geese',\n halo: 'halos',\n hippopotamus: 'hippopotami',\n index: 'indices',\n larva: 'larvae',\n leaf: 'leaves',\n libretto: 'libretti',\n loaf: 'loaves',\n man: 'men',\n matrix: 'matrices',\n memorandum: 'memoranda',\n modulus: 'moduli',\n mosquito: 'mosquitoes',\n mouse: 'mice',\n move: 'moves',\n nebula: 'nebulae',\n nucleus: 'nuclei',\n octopus: 'octopi',\n opus: 'opera',\n ovum: 'ova',\n ox: 'oxen',\n parenthesis: 'parentheses',\n person: 'people',\n phenomenon: 'phenomena',\n prognosis: 'prognoses',\n quiz: 'quizzes',\n radius: 'radii',\n referendum: 'referenda',\n rodeo: 'rodeos',\n sex: 'sexes',\n shoe: 'shoes',\n sombrero: 'sombreros',\n stimulus: 'stimuli',\n stomach: 'stomachs',\n syllabus: 'syllabi',\n synopsis: 'synopses',\n tableau: 'tableaux',\n thesis: 'theses',\n thief: 'thieves',\n tooth: 'teeth',\n tornado: 'tornados',\n tuxedo: 'tuxedos',\n vertebra: 'vertebrae',\n // virus: 'viri',\n // zero: 'zeros',\n}\n","// a list of irregular verb conjugations\n// used in verbs().conjugate()\n// but also added to our lexicon\n\n//use shorter key-names\nconst mapping = {\n g: 'Gerund',\n prt: 'Participle',\n perf: 'PerfectTense',\n pst: 'PastTense',\n fut: 'FuturePerfect',\n pres: 'PresentTense',\n pluperf: 'Pluperfect',\n a: 'Actor',\n}\n\n// '_' in conjugations is the infinitive form\nlet conjugations = {\n act: {\n a: '_or',\n },\n ache: {\n pst: 'ached',\n g: 'aching',\n },\n age: {\n g: 'ageing',\n pst: 'aged',\n pres: 'ages',\n },\n aim: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n arise: {\n prt: '_n',\n pst: 'arose',\n },\n babysit: {\n a: '_ter',\n pst: 'babysat',\n },\n ban: {\n a: '',\n g: '_ning',\n pst: '_ned',\n },\n be: {\n a: '',\n g: 'am',\n prt: 'been',\n pst: 'was',\n pres: 'is',\n },\n beat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n },\n become: {\n prt: '_',\n },\n begin: {\n g: '_ning',\n prt: 'begun',\n pst: 'began',\n },\n being: {\n g: 'are',\n pst: 'were',\n pres: 'are',\n },\n bend: {\n prt: 'bent',\n },\n bet: {\n a: '_ter',\n prt: '_',\n },\n bind: {\n pst: 'bound',\n },\n bite: {\n g: 'biting',\n prt: 'bitten',\n pst: 'bit',\n },\n bleed: {\n prt: 'bled',\n pst: 'bled',\n },\n blow: {\n prt: '_n',\n pst: 'blew',\n },\n boil: {\n a: '_er',\n },\n brake: {\n prt: 'broken',\n },\n break: {\n pst: 'broke',\n },\n breed: {\n pst: 'bred',\n },\n bring: {\n prt: 'brought',\n pst: 'brought',\n },\n broadcast: {\n pst: '_',\n },\n budget: {\n pst: '_ed',\n },\n build: {\n prt: 'built',\n pst: 'built',\n },\n burn: {\n prt: '_ed',\n },\n burst: {\n prt: '_',\n },\n buy: {\n prt: 'bought',\n pst: 'bought',\n },\n can: {\n a: '',\n fut: '_',\n g: '',\n pst: 'could',\n perf: 'could',\n pluperf: 'could',\n pres: '_',\n },\n catch: {\n pst: 'caught',\n },\n choose: {\n g: 'choosing',\n prt: 'chosen',\n pst: 'chose',\n },\n cling: {\n prt: 'clung',\n },\n come: {\n prt: '_',\n pst: 'came',\n g: 'coming',\n },\n compete: {\n a: 'competitor',\n g: 'competing',\n pst: '_d',\n },\n cost: {\n pst: '_',\n },\n creep: {\n prt: 'crept',\n },\n cut: {\n prt: '_',\n },\n deal: {\n prt: '_t',\n pst: '_t',\n },\n develop: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n die: {\n g: 'dying',\n pst: '_d',\n },\n dig: {\n g: '_ging',\n prt: 'dug',\n pst: 'dug',\n },\n dive: {\n prt: '_d',\n },\n do: {\n pst: 'did',\n pres: '_es',\n },\n draw: {\n prt: '_n',\n pst: 'drew',\n },\n dream: {\n prt: '_t',\n },\n drink: {\n prt: 'drunk',\n pst: 'drank',\n },\n drive: {\n g: 'driving',\n prt: '_n',\n pst: 'drove',\n },\n drop: {\n g: '_ping',\n pst: '_ped',\n },\n eat: {\n a: '_er',\n g: '_ing',\n prt: '_en',\n pst: 'ate',\n },\n edit: {\n g: '_ing',\n },\n egg: {\n pst: '_ed',\n },\n fall: {\n prt: '_en',\n pst: 'fell',\n },\n feed: {\n prt: 'fed',\n pst: 'fed',\n },\n feel: {\n a: '_er',\n pst: 'felt',\n },\n fight: {\n prt: 'fought',\n pst: 'fought',\n },\n find: {\n pst: 'found',\n },\n flee: {\n g: '_ing',\n prt: 'fled',\n },\n fling: {\n prt: 'flung',\n },\n fly: {\n prt: 'flown',\n pst: 'flew',\n },\n forbid: {\n pst: 'forbade',\n },\n forget: {\n g: '_ing',\n prt: 'forgotten',\n pst: 'forgot',\n },\n forgive: {\n g: 'forgiving',\n prt: '_n',\n pst: 'forgave',\n },\n free: {\n a: '',\n g: '_ing',\n },\n freeze: {\n g: 'freezing',\n prt: 'frozen',\n pst: 'froze',\n },\n get: {\n pst: 'got',\n prt: 'gotten',\n },\n give: {\n g: 'giving',\n prt: '_n',\n pst: 'gave',\n },\n go: {\n prt: '_ne',\n pst: 'went',\n pres: 'goes',\n },\n grow: {\n prt: '_n',\n },\n hang: {\n prt: 'hung',\n pst: 'hung',\n },\n have: {\n g: 'having',\n prt: 'had',\n pst: 'had',\n pres: 'has',\n },\n hear: {\n prt: '_d',\n pst: '_d',\n },\n hide: {\n prt: 'hidden',\n pst: 'hid',\n },\n hit: {\n prt: '_',\n },\n hold: {\n prt: 'held',\n pst: 'held',\n },\n hurt: {\n prt: '_',\n pst: '_',\n },\n ice: {\n g: 'icing',\n pst: '_d',\n },\n imply: {\n pst: 'implied',\n pres: 'implies',\n },\n is: {\n a: '',\n g: 'being',\n pst: 'was',\n pres: '_',\n },\n keep: {\n prt: 'kept',\n },\n kneel: {\n prt: 'knelt',\n },\n know: {\n prt: '_n',\n },\n lay: {\n prt: 'laid',\n pst: 'laid',\n },\n lead: {\n prt: 'led',\n pst: 'led',\n },\n leap: {\n prt: '_t',\n },\n leave: {\n prt: 'left',\n pst: 'left',\n },\n lend: {\n prt: 'lent',\n },\n lie: {\n g: 'lying',\n pst: 'lay',\n },\n light: {\n prt: 'lit',\n pst: 'lit',\n },\n log: {\n g: '_ging',\n pst: '_ged',\n },\n loose: {\n prt: 'lost',\n },\n lose: {\n g: 'losing',\n pst: 'lost',\n },\n make: {\n prt: 'made',\n pst: 'made',\n },\n mean: {\n prt: '_t',\n pst: '_t',\n },\n meet: {\n a: '_er',\n g: '_ing',\n prt: 'met',\n pst: 'met',\n },\n miss: {\n pres: '_',\n },\n name: {\n g: 'naming',\n },\n pay: {\n prt: 'paid',\n pst: 'paid',\n },\n prove: {\n prt: '_n',\n },\n puke: {\n g: 'puking',\n },\n put: {\n prt: '_',\n },\n quit: {\n prt: '_',\n },\n read: {\n prt: '_',\n pst: '_',\n },\n ride: {\n prt: 'ridden',\n },\n ring: {\n prt: 'rung',\n pst: 'rang',\n },\n rise: {\n fut: 'will have _n',\n g: 'rising',\n prt: '_n',\n pst: 'rose',\n pluperf: 'had _n',\n },\n rub: {\n g: '_bing',\n pst: '_bed',\n },\n run: {\n g: '_ning',\n prt: '_',\n pst: 'ran',\n },\n say: {\n prt: 'said',\n pst: 'said',\n pres: '_s',\n },\n seat: {\n prt: 'sat',\n },\n see: {\n g: '_ing',\n prt: '_n',\n pst: 'saw',\n },\n seek: {\n prt: 'sought',\n },\n sell: {\n prt: 'sold',\n pst: 'sold',\n },\n send: {\n prt: 'sent',\n },\n set: {\n prt: '_',\n },\n sew: {\n prt: '_n',\n },\n shake: {\n prt: '_n',\n },\n shave: {\n prt: '_d',\n },\n shed: {\n g: '_ding',\n pst: '_',\n pres: '_s',\n },\n shine: {\n prt: 'shone',\n pst: 'shone',\n },\n shoot: {\n prt: 'shot',\n pst: 'shot',\n },\n show: {\n pst: '_ed',\n },\n shut: {\n prt: '_',\n },\n sing: {\n prt: 'sung',\n pst: 'sang',\n },\n sink: {\n pst: 'sank',\n pluperf: 'had sunk',\n },\n sit: {\n pst: 'sat',\n },\n ski: {\n pst: '_ied',\n },\n slay: {\n prt: 'slain',\n },\n sleep: {\n prt: 'slept',\n },\n slide: {\n prt: 'slid',\n pst: 'slid',\n },\n smash: {\n pres: '_es',\n },\n sneak: {\n prt: 'snuck',\n },\n speak: {\n fut: 'will have spoken',\n prt: 'spoken',\n pst: 'spoke',\n perf: 'have spoken',\n pluperf: 'had spoken',\n },\n speed: {\n prt: 'sped',\n },\n spend: {\n prt: 'spent',\n },\n spill: {\n prt: '_ed',\n pst: 'spilt',\n },\n spin: {\n g: '_ning',\n prt: 'spun',\n pst: 'spun',\n },\n spit: {\n prt: 'spat',\n },\n split: {\n prt: '_',\n },\n spread: {\n pst: '_',\n },\n spring: {\n prt: 'sprung',\n },\n stand: {\n pst: 'stood',\n },\n steal: {\n a: '_er',\n pst: 'stole',\n },\n stick: {\n pst: 'stuck',\n },\n sting: {\n pst: 'stung',\n },\n stink: {\n prt: 'stunk',\n pst: 'stunk',\n },\n stream: {\n a: '_er',\n },\n strew: {\n prt: '_n',\n },\n strike: {\n g: 'striking',\n pst: 'struck',\n },\n suit: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n sware: {\n prt: 'sworn',\n },\n swear: {\n pst: 'swore',\n },\n sweep: {\n prt: 'swept',\n },\n swim: {\n g: '_ming',\n pst: 'swam',\n },\n swing: {\n pst: 'swung',\n },\n take: {\n fut: 'will have _n',\n pst: 'took',\n perf: 'have _n',\n pluperf: 'had _n',\n },\n teach: {\n pst: 'taught',\n pres: '_es',\n },\n tear: {\n pst: 'tore',\n },\n tell: {\n pst: 'told',\n },\n think: {\n pst: 'thought',\n },\n thrive: {\n prt: '_d',\n },\n tie: {\n g: 'tying',\n pst: '_d',\n },\n undergo: {\n prt: '_ne',\n },\n understand: {\n pst: 'understood',\n },\n upset: {\n prt: '_',\n },\n wait: {\n a: '_er',\n g: '_ing',\n pst: '_ed',\n },\n wake: {\n pst: 'woke',\n },\n wear: {\n pst: 'wore',\n },\n weave: {\n prt: 'woven',\n },\n wed: {\n pst: 'wed',\n },\n weep: {\n prt: 'wept',\n },\n win: {\n g: '_ning',\n pst: 'won',\n },\n wind: {\n prt: 'wound',\n },\n withdraw: {\n pst: 'withdrew',\n },\n wring: {\n prt: 'wrung',\n },\n write: {\n g: 'writing',\n prt: 'written',\n pst: 'wrote',\n },\n}\n\n//uncompress our ad-hoc compression scheme\nlet keys = Object.keys(conjugations)\nfor (let i = 0; i < keys.length; i++) {\n const inf = keys[i]\n let final = {}\n Object.keys(conjugations[inf]).forEach(key => {\n let str = conjugations[inf][key]\n //swap-in infinitives for '_'\n str = str.replace('_', inf)\n\n let full = mapping[key]\n final[full] = str\n })\n //over-write original\n conjugations[inf] = final\n}\n\nmodule.exports = conjugations\n","const endsWith = {\n b: [\n {\n reg: /([^aeiou][aeiou])b$/i,\n repl: {\n pr: '$1bs',\n pa: '$1bbed',\n gr: '$1bbing',\n },\n },\n ],\n d: [\n {\n reg: /(end)$/i,\n repl: {\n pr: '$1s',\n pa: 'ent',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(eed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n {\n reg: /(ed)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ded',\n ar: '$1der',\n gr: '$1ding',\n },\n },\n {\n reg: /([^aeiou][ou])d$/i,\n repl: {\n pr: '$1ds',\n pa: '$1dded',\n gr: '$1dding',\n },\n },\n ],\n e: [\n {\n reg: /(eave)$/i,\n repl: {\n pr: '$1s',\n pa: '$1d',\n gr: 'eaving',\n ar: '$1r',\n },\n },\n {\n reg: /(ide)$/i,\n repl: {\n pr: '$1s',\n pa: 'ode',\n gr: 'iding',\n ar: 'ider',\n },\n },\n {\n //shake\n reg: /(t|sh?)(ake)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ook',\n gr: '$1aking',\n ar: '$1$2r',\n },\n },\n {\n //awake\n reg: /w(ake)$/i,\n repl: {\n pr: 'w$1s',\n pa: 'woke',\n gr: 'waking',\n ar: 'w$1r',\n },\n },\n {\n //make\n reg: /m(ake)$/i,\n repl: {\n pr: 'm$1s',\n pa: 'made',\n gr: 'making',\n ar: 'm$1r',\n },\n },\n {\n reg: /(a[tg]|i[zn]|ur|nc|gl|is)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n // prt: '$1en',\n },\n },\n {\n reg: /([bd]l)e$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(om)e$/i,\n repl: {\n pr: '$1es',\n pa: 'ame',\n gr: '$1ing',\n },\n },\n ],\n\n g: [\n {\n reg: /([^aeiou][ou])g$/i,\n repl: {\n pr: '$1gs',\n pa: '$1gged',\n gr: '$1gging',\n },\n },\n ],\n h: [\n {\n reg: /(..)([cs]h)$/i,\n repl: {\n pr: '$1$2es',\n pa: '$1$2ed',\n gr: '$1$2ing',\n },\n },\n ],\n k: [\n {\n reg: /(ink)$/i,\n repl: {\n pr: '$1s',\n pa: 'unk',\n gr: '$1ing',\n ar: '$1er',\n },\n },\n ],\n\n m: [\n {\n reg: /([^aeiou][aeiou])m$/i,\n repl: {\n pr: '$1ms',\n pa: '$1mmed',\n gr: '$1mming',\n },\n },\n ],\n\n n: [\n {\n reg: /(en)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n p: [\n {\n reg: /(e)(ep)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1pt',\n gr: '$1$2ing',\n ar: '$1$2er',\n },\n },\n {\n reg: /([^aeiou][aeiou])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1pped',\n gr: '$1pping',\n },\n },\n {\n reg: /([aeiu])p$/i,\n repl: {\n pr: '$1ps',\n pa: '$1p',\n gr: '$1pping',\n },\n },\n ],\n\n r: [\n {\n reg: /([td]er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(er)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n s: [\n {\n reg: /(ish|tch|ess)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n\n t: [\n {\n reg: /(ion|end|e[nc]t)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /(.eat)$/i,\n repl: {\n pr: '$1s',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n {\n reg: /([aeiu])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1t',\n gr: '$1tting',\n },\n },\n {\n reg: /([^aeiou][aeiou])t$/i,\n repl: {\n pr: '$1ts',\n pa: '$1tted',\n gr: '$1tting',\n },\n },\n ],\n\n w: [\n {\n reg: /(..)(ow)$/i,\n repl: {\n pr: '$1$2s',\n pa: '$1ew',\n gr: '$1$2ing',\n prt: '$1$2n',\n },\n },\n ],\n y: [\n {\n reg: /([i|f|rr])y$/i,\n repl: {\n pr: '$1ies',\n pa: '$1ied',\n gr: '$1ying',\n },\n },\n ],\n\n z: [\n {\n reg: /([aeiou]zz)$/i,\n repl: {\n pr: '$1es',\n pa: '$1ed',\n gr: '$1ing',\n },\n },\n ],\n}\n\nmodule.exports = endsWith\n","const suffixes = require('./suffixes')\nconst posMap = {\n pr: 'PresentTense',\n pa: 'PastTense',\n gr: 'Gerund',\n prt: 'Participle',\n ar: 'Actor',\n}\n\nconst doTransform = function(str, obj) {\n let found = {}\n let keys = Object.keys(obj.repl)\n for (let i = 0; i < keys.length; i += 1) {\n let pos = keys[i]\n found[posMap[pos]] = str.replace(obj.reg, obj.repl[pos])\n }\n return found\n}\n\n//look at the end of the word for clues\nconst checkSuffix = function(str = '') {\n let c = str[str.length - 1]\n if (suffixes.hasOwnProperty(c) === true) {\n for (let r = 0; r < suffixes[c].length; r += 1) {\n const reg = suffixes[c][r].reg\n if (reg.test(str) === true) {\n return doTransform(str, suffixes[c][r])\n }\n }\n }\n return {}\n}\nmodule.exports = checkSuffix\n","//non-specifc, 'hail-mary' transforms from infinitive, into other forms\nconst hasY = /[bcdfghjklmnpqrstvwxz]y$/\n\nconst generic = {\n Gerund: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf.replace(/e$/, 'ing')\n }\n return inf + 'ing'\n },\n\n PresentTense: inf => {\n if (inf.charAt(inf.length - 1) === 's') {\n return inf + 'es'\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ies'\n }\n return inf + 's'\n },\n\n PastTense: inf => {\n if (inf.charAt(inf.length - 1) === 'e') {\n return inf + 'd'\n }\n if (inf.substr(-2) === 'ed') {\n return inf\n }\n if (hasY.test(inf) === true) {\n return inf.slice(0, -1) + 'ied'\n }\n return inf + 'ed'\n },\n}\n\nmodule.exports = generic\n","const checkSuffix = require('./01-suffixes')\nconst genericFill = require('./02-generic')\n\n//we run this on every verb in the lexicon, so please keep it fast\n//we assume the input word is a proper infinitive\nconst conjugate = function(inf = '', world) {\n let found = {}\n // 1. look at irregulars\n //the lexicon doesn't pass this in\n if (world && world.irregulars) {\n if (world.irregulars.verbs.hasOwnProperty(inf) === true) {\n found = Object.assign({}, world.irregulars.verbs[inf])\n }\n }\n //2. rule-based regex\n found = Object.assign({}, checkSuffix(inf), found)\n\n //3. generic transformations\n //'buzzing'\n if (found.Gerund === undefined) {\n found.Gerund = genericFill.Gerund(inf)\n }\n //'buzzed'\n if (found.PastTense === undefined) {\n found.PastTense = genericFill.PastTense(inf)\n }\n //'buzzes'\n if (found.PresentTense === undefined) {\n found.PresentTense = genericFill.PresentTense(inf)\n }\n return found\n}\nmodule.exports = conjugate\n\n// console.log(conjugate('bake'))\n","//turn 'quick' into 'quickest'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /oud$/, /...p$/]\nconst dont_rules = [/ary$/]\n\nconst irregulars = {\n nice: 'nicest',\n late: 'latest',\n hard: 'hardest',\n inner: 'innermost',\n outer: 'outermost',\n far: 'furthest',\n worse: 'worst',\n bad: 'worst',\n good: 'best',\n big: 'biggest',\n large: 'largest',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'iest',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1ttest',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1dest',\n },\n {\n reg: /nge$/i,\n repl: 'ngest',\n },\n {\n reg: /([aeiou])te$/i,\n repl: '$1test',\n },\n]\n\nconst to_superlative = function(str) {\n //irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str)) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-rules\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-rules\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n if (str.charAt(str.length - 1) === 'e') {\n return str + 'st'\n }\n return str + 'est'\n }\n }\n return str + 'est'\n}\n\nmodule.exports = to_superlative\n","//turn 'quick' into 'quickly'\nconst do_rules = [/ght$/, /nge$/, /ough$/, /ain$/, /uel$/, /[au]ll$/, /ow$/, /old$/, /oud$/, /e[ae]p$/]\nconst dont_rules = [/ary$/, /ous$/]\n\nconst irregulars = {\n grey: 'greyer',\n gray: 'grayer',\n green: 'greener',\n yellow: 'yellower',\n red: 'redder',\n good: 'better',\n well: 'better',\n bad: 'worse',\n sad: 'sadder',\n big: 'bigger',\n}\n\nconst transforms = [\n {\n reg: /y$/i,\n repl: 'ier',\n },\n {\n reg: /([aeiou])t$/i,\n repl: '$1tter',\n },\n {\n reg: /([aeou])de$/i,\n repl: '$1der',\n },\n {\n reg: /nge$/i,\n repl: 'nger',\n },\n]\n\nconst to_comparative = function(str) {\n //known-irregulars\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //known-transforms\n for (let i = 0; i < transforms.length; i++) {\n if (transforms[i].reg.test(str) === true) {\n return str.replace(transforms[i].reg, transforms[i].repl)\n }\n }\n //dont-patterns\n for (let i = 0; i < dont_rules.length; i++) {\n if (dont_rules[i].test(str) === true) {\n return null\n }\n }\n //do-patterns\n for (let i = 0; i < do_rules.length; i++) {\n if (do_rules[i].test(str) === true) {\n return str + 'er'\n }\n }\n //easy-one\n if (/e$/.test(str) === true) {\n return str + 'r'\n }\n return str + 'er'\n}\n\nmodule.exports = to_comparative\n","const fns = {\n toSuperlative: require('./toSuperlative'),\n toComparative: require('./toComparative'),\n}\n\n/** conjugate an adjective into other forms */\nconst conjugate = function(w) {\n let res = {}\n // 'greatest'\n let sup = fns.toSuperlative(w)\n if (sup) {\n res.Superlative = sup\n }\n // 'greater'\n let comp = fns.toComparative(w)\n if (comp) {\n res.Comparative = comp\n }\n return res\n}\nmodule.exports = conjugate\n","/** patterns for turning 'bus' to 'buses'*/\nconst suffixes = {\n a: [[/(antenn|formul|nebul|vertebr|vit)a$/i, '$1ae'], [/([ti])a$/i, '$1a']],\n\n e: [\n [/(kn|l|w)ife$/i, '$1ives'],\n [/(hive)$/i, '$1s'],\n [/([m|l])ouse$/i, '$1ice'],\n [/([m|l])ice$/i, '$1ice'],\n ],\n\n f: [\n [/^(dwar|handkerchie|hoo|scar|whar)f$/i, '$1ves'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)f$/i, '$1ves'],\n ],\n\n i: [[/(octop|vir)i$/i, '$1i']],\n\n m: [[/([ti])um$/i, '$1a']],\n\n n: [[/^(oxen)$/i, '$1']],\n\n o: [[/(al|ad|at|er|et|ed|ad)o$/i, '$1oes']],\n\n s: [\n [/(ax|test)is$/i, '$1es'],\n [/(alias|status)$/i, '$1es'],\n [/sis$/i, 'ses'],\n [/(bu)s$/i, '$1ses'],\n [/(sis)$/i, 'ses'],\n [/^(?!talis|.*hu)(.*)man$/i, '$1men'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)us$/i, '$1i'],\n ],\n\n x: [[/(matr|vert|ind|cort)(ix|ex)$/i, '$1ices'], [/^(ox)$/i, '$1en']],\n\n y: [[/([^aeiouy]|qu)y$/i, '$1ies']],\n\n z: [[/(quiz)$/i, '$1zes']],\n}\n\nmodule.exports = suffixes\n","const rules = require('./_rules')\nconst addE = /(x|ch|sh|s|z)$/\n\nconst trySuffix = function(str) {\n let c = str[str.length - 1]\n if (rules.hasOwnProperty(c) === true) {\n for (let i = 0; i < rules[c].length; i += 1) {\n let reg = rules[c][i][0]\n if (reg.test(str) === true) {\n return str.replace(reg, rules[c][i][1])\n }\n }\n }\n return null\n}\n\n/** Turn a singular noun into a plural\n * assume the given string is singular\n */\nconst pluralize = function(str = '', world) {\n let irregulars = world.irregulars.nouns\n\n // check irregulars list\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n\n //we have some rules to try-out\n let plural = trySuffix(str)\n if (plural !== null) {\n return plural\n }\n //like 'church'\n if (addE.test(str)) {\n return str + 'es'\n }\n // ¯\\_(ツ)_/¯\n return str + 's'\n}\nmodule.exports = pluralize\n","//patterns for turning 'dwarves' to 'dwarf'\nmodule.exports = [\n [/([^v])ies$/i, '$1y'],\n [/ises$/i, 'isis'],\n [/(kn|[^o]l|w)ives$/i, '$1ife'],\n [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'],\n [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'],\n [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'],\n [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'],\n [/(buffal|tomat|tornad)(oes)$/i, '$1o'],\n // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'],\n [/(..[aeiou]s)es$/i, '$1'],\n [/(vert|ind|cort)(ices)$/i, '$1ex'],\n [/(matr|append)(ices)$/i, '$1ix'],\n [/(x|ch|ss|sh|z|o)es$/i, '$1'],\n [/men$/i, 'man'],\n [/(n)ews$/i, '$1ews'],\n [/([ti])a$/i, '$1um'],\n [/([^aeiouy]|qu)ies$/i, '$1y'],\n [/(s)eries$/i, '$1eries'],\n [/(m)ovies$/i, '$1ovie'],\n [/([m|l])ice$/i, '$1ouse'],\n [/(cris|ax|test)es$/i, '$1is'],\n [/(alias|status)es$/i, '$1'],\n [/(ss)$/i, '$1'],\n [/(ics)$/i, '$1'],\n [/s$/i, ''],\n]\n","const rules = require('./_rules')\n\nconst invertObj = function(obj) {\n return Object.keys(obj).reduce((h, k) => {\n h[obj[k]] = k\n return h\n }, {})\n}\n\nconst toSingular = function(str, world) {\n let irregulars = world.irregulars.nouns\n let invert = invertObj(irregulars)\n\n // check irregulars list\n if (invert.hasOwnProperty(str)) {\n return invert[str]\n }\n\n // go through our regexes\n for (let i = 0; i < rules.length; i++) {\n if (rules[i][0].test(str) === true) {\n str = str.replace(rules[i][0], rules[i][1])\n return str\n }\n }\n return str\n}\nmodule.exports = toSingular\n","//rules for turning a verb into infinitive form\nlet rules = {\n Participle: [\n {\n reg: /own$/i,\n to: 'ow',\n },\n {\n reg: /(.)un([g|k])$/i,\n to: '$1in$2',\n },\n ],\n\n Actor: [\n {\n reg: /(er)er$/i,\n to: '$1',\n },\n ],\n\n PresentTense: [\n {\n reg: /(..)(ies)$/i,\n to: '$1y',\n },\n {\n reg: /(tch|sh)es$/i,\n to: '$1',\n },\n {\n reg: /(ss|zz)es$/i,\n to: '$1',\n },\n {\n reg: /([tzlshicgrvdnkmu])es$/i,\n to: '$1e',\n },\n {\n reg: /(n[dtk]|c[kt]|[eo]n|i[nl]|er|a[ytrl])s$/i,\n to: '$1',\n },\n {\n reg: /(ow)s$/i,\n to: '$1',\n },\n {\n reg: /(op)s$/i,\n to: '$1',\n },\n {\n reg: /([eirs])ts$/i,\n to: '$1t',\n },\n {\n reg: /(ll)s$/i,\n to: '$1',\n },\n {\n reg: /(el)s$/i,\n to: '$1',\n },\n {\n reg: /(ip)es$/i,\n to: '$1e',\n },\n {\n reg: /ss$/i,\n to: 'ss',\n },\n {\n reg: /s$/i,\n to: '',\n },\n ],\n\n Gerund: [\n {\n //popping -> pop\n reg: /(..)(p|d|t|g){2}ing$/i,\n to: '$1$2',\n },\n {\n //fuzzing -> fuzz\n reg: /(ll|ss|zz)ing$/i,\n to: '$1',\n },\n {\n reg: /([^aeiou])ying$/i,\n to: '$1y',\n },\n {\n reg: /([^ae]i.)ing$/i,\n to: '$1e',\n },\n {\n //eating, reading\n reg: /(ea[dklnrtv])ing$/i,\n to: '$1',\n },\n {\n //washing -> wash\n reg: /(ch|sh)ing$/i,\n to: '$1',\n },\n //soft-e forms:\n {\n //z : hazing (not buzzing)\n reg: /(z)ing$/i,\n to: '$1e',\n },\n {\n //a : baking, undulating\n reg: /(a[gdkvtc])ing$/i,\n to: '$1e',\n },\n {\n //u : conjuring, tubing\n reg: /(u[rtcbn])ing$/i,\n to: '$1e',\n },\n {\n //o : forboding, poking, hoping, boring (not hooping)\n reg: /([^o]o[bdknprv])ing$/i,\n to: '$1e',\n },\n {\n //ling : tingling, wrinkling, circling, scrambling, bustling\n reg: /([tbckg]l)ing$/i, //dp\n to: '$1e',\n },\n {\n //cing : bouncing, denouncing\n reg: /(c)ing$/i, //dp\n to: '$1e',\n },\n\n // {\n // //soft-e :\n // reg: /([ua]s|[dr]g|z|o[rlsp]|cre)ing$/i,\n // to: '$1e',\n // },\n {\n //fallback\n reg: /(..)ing$/i,\n to: '$1',\n },\n ],\n\n PastTense: [\n {\n reg: /(ued)$/i,\n to: 'ue',\n },\n {\n reg: /a([^aeiouy])ed$/i,\n to: 'a$1e',\n },\n {\n reg: /([aeiou]zz)ed$/i,\n to: '$1',\n },\n {\n reg: /(e|i)lled$/i,\n to: '$1ll',\n },\n {\n reg: /(.)(sh|ch)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(tl|gl)ed$/i,\n to: '$1e',\n },\n {\n reg: /(um?pt?)ed$/i,\n to: '$1',\n },\n {\n reg: /(ss)ed$/i,\n to: '$1',\n },\n {\n reg: /pped$/i,\n to: 'p',\n },\n {\n reg: /tted$/i,\n to: 't',\n },\n {\n reg: /(..)gged$/i,\n to: '$1g',\n },\n {\n reg: /(..)lked$/i,\n to: '$1lk',\n },\n {\n reg: /([^aeiouy][aeiou])ked$/i,\n to: '$1ke',\n },\n {\n reg: /(.[aeiou])led$/i,\n to: '$1l',\n },\n {\n reg: /(..)(h|ion|n[dt]|ai.|[cs]t|pp|all|ss|tt|int|ail|ld|en|oo.|er|k|pp|w|ou.|rt|ght|rm)ed$/i,\n to: '$1$2',\n },\n {\n reg: /(.ut)ed$/i,\n to: '$1e',\n },\n {\n reg: /(.pt)ed$/i,\n to: '$1',\n },\n {\n reg: /(us)ed$/i,\n to: '$1e',\n },\n {\n reg: /(..[^aeiouy])ed$/i,\n to: '$1e',\n },\n {\n reg: /(..)ied$/i,\n to: '$1y',\n },\n {\n reg: /(.o)ed$/i,\n to: '$1o',\n },\n {\n reg: /(..i)ed$/i,\n to: '$1',\n },\n {\n reg: /(.a[^aeiou])ed$/i,\n to: '$1',\n },\n {\n //owed, aced\n reg: /([aeiou][^aeiou])ed$/i,\n to: '$1e',\n },\n {\n reg: /([rl])ew$/i,\n to: '$1ow',\n },\n {\n reg: /([pl])t$/i,\n to: '$1t',\n },\n ],\n}\nmodule.exports = rules\n","let guessVerb = {\n Gerund: ['ing'],\n Actor: ['erer'],\n Infinitive: [\n 'ate',\n 'ize',\n 'tion',\n 'rify',\n 'then',\n 'ress',\n 'ify',\n 'age',\n 'nce',\n 'ect',\n 'ise',\n 'ine',\n 'ish',\n 'ace',\n 'ash',\n 'ure',\n 'tch',\n 'end',\n 'ack',\n 'and',\n 'ute',\n 'ade',\n 'ock',\n 'ite',\n 'ase',\n 'ose',\n 'use',\n 'ive',\n 'int',\n 'nge',\n 'lay',\n 'est',\n 'ain',\n 'ant',\n 'ent',\n 'eed',\n 'er',\n 'le',\n 'own',\n 'unk',\n 'ung',\n 'en',\n ],\n PastTense: ['ed', 'lt', 'nt', 'pt', 'ew', 'ld'],\n PresentTense: [\n 'rks',\n 'cks',\n 'nks',\n 'ngs',\n 'mps',\n 'tes',\n 'zes',\n 'ers',\n 'les',\n 'acks',\n 'ends',\n 'ands',\n 'ocks',\n 'lays',\n 'eads',\n 'lls',\n 'els',\n 'ils',\n 'ows',\n 'nds',\n 'ays',\n 'ams',\n 'ars',\n 'ops',\n 'ffs',\n 'als',\n 'urs',\n 'lds',\n 'ews',\n 'ips',\n 'es',\n 'ts',\n 'ns',\n ],\n}\n//flip it into a lookup object\nguessVerb = Object.keys(guessVerb).reduce((h, k) => {\n guessVerb[k].forEach(a => (h[a] = k))\n return h\n}, {})\nmodule.exports = guessVerb\n","const rules = require('./_transform')\nconst guess = require('./_guess')\n\n/** it helps to know what we're conjugating from */\nconst guessTense = function(str) {\n let three = str.substr(str.length - 3)\n if (guess.hasOwnProperty(three) === true) {\n return guess[three]\n }\n let two = str.substr(str.length - 2)\n if (guess.hasOwnProperty(two) === true) {\n return guess[two]\n }\n let one = str.substr(str.length - 1)\n if (one === 's') {\n return 'PresentTense'\n }\n return null\n}\n\nconst toInfinitive = function(str, world, tense) {\n if (!str) {\n return ''\n }\n //1. look at known irregulars\n if (world.words.hasOwnProperty(str) === true) {\n let irregs = world.irregulars.verbs\n let keys = Object.keys(irregs)\n for (let i = 0; i < keys.length; i++) {\n let forms = Object.keys(irregs[keys[i]])\n for (let o = 0; o < forms.length; o++) {\n if (str === irregs[keys[i]][forms[o]]) {\n return keys[i]\n }\n }\n }\n }\n\n // give'r!\n tense = tense || guessTense(str)\n if (tense && rules[tense]) {\n for (let i = 0; i < rules[tense].length; i++) {\n const rule = rules[tense][i]\n if (rule.reg.test(str) === true) {\n return str.replace(rule.reg, rule.to)\n }\n }\n }\n return str\n}\nmodule.exports = toInfinitive\n","const lexData = require('./_data')\nconst defaultTags = require('./tags')\nconst unpack = require('efrt-unpack')\nconst addLex = require('./addWords')\nconst addIrregulars = require('./addIrregulars')\nconst inferTagSet = require('./tags/inference')\n\nlet misc = require('./data/misc')\n\n//these let users change inflection / verb conjugation\nconst irregulars = {\n nouns: require('./data/plurals'),\n verbs: require('./data/conjugations'),\n}\n\n//these behaviours are configurable & shared across some plugins\nconst transforms = {\n conjugate: require('../transforms/conjugate'),\n adjectives: require('../transforms/adjectives'),\n toPlural: require('../transforms/toPlural'),\n toSingular: require('../transforms/toSingular'),\n toInfinitive: require('../transforms/toInfinitive'),\n}\n\nlet isVerbose = false\n\n/** all configurable linguistic data */\nclass World {\n constructor() {\n // quiet these properties from a console.log\n Object.defineProperty(this, 'words', {\n enumerable: false,\n value: misc,\n writable: true,\n })\n Object.defineProperty(this, 'hasCompound', {\n enumerable: false,\n value: {},\n writable: true,\n })\n Object.defineProperty(this, 'irregulars', {\n enumerable: false,\n value: irregulars,\n writable: true,\n })\n Object.defineProperty(this, 'tags', {\n enumerable: false,\n value: Object.assign({}, defaultTags),\n writable: true,\n })\n Object.defineProperty(this, 'transforms', {\n enumerable: false,\n value: transforms,\n writable: true,\n })\n\n Object.defineProperty(this, 'taggers', {\n enumerable: false,\n value: [],\n writable: true,\n })\n // add our compressed data to lexicon\n this.unpackWords(lexData)\n // add our irregulars to lexicon\n this.addIrregulars()\n\n // cache our abbreviations for our sentence-parser\n Object.defineProperty(this, 'cache', {\n enumerable: false,\n value: {\n abbreviations: this.getByTag('Abbreviation'),\n },\n })\n }\n\n /** more logs for debugging */\n verbose(bool) {\n isVerbose = bool\n return this\n }\n isVerbose() {\n return isVerbose\n }\n\n /** get all terms in our lexicon with this tag */\n getByTag(tag) {\n let lex = this.words\n let res = {}\n let words = Object.keys(lex)\n for (let i = 0; i < words.length; i++) {\n if (typeof lex[words[i]] === 'string') {\n if (lex[words[i]] === tag) {\n res[words[i]] = true\n }\n } else if (lex[words[i]].some(t => t === tag)) {\n res[words[i]] = true\n }\n }\n return res\n }\n\n /** augment our lingustic data with new data */\n unpackWords(lex) {\n let tags = Object.keys(lex)\n for (let i = 0; i < tags.length; i++) {\n let words = Object.keys(unpack(lex[tags[i]]))\n for (let w = 0; w < words.length; w++) {\n addLex.addWord(words[w], tags[i], this.words)\n // do some fancier stuff\n addLex.addMore(words[w], tags[i], this)\n }\n }\n }\n /** put new words into our lexicon, properly */\n addWords(obj) {\n let keys = Object.keys(obj)\n for (let i = 0; i < keys.length; i++) {\n let word = keys[i].toLowerCase()\n addLex.addWord(word, obj[keys[i]], this.words)\n // do some fancier stuff\n addLex.addMore(word, obj[keys[i]], this)\n }\n }\n\n addIrregulars() {\n addIrregulars(this)\n return this\n }\n\n /** extend the compromise tagset */\n addTags(tags) {\n tags = Object.assign({}, tags)\n this.tags = Object.assign(this.tags, tags)\n // calculate graph implications for the new tags\n this.tags = inferTagSet(this.tags)\n return this\n }\n /** call methods after tagger runs */\n postProcess(fn) {\n this.taggers.push(fn)\n return this\n }\n\n /** helper method for logging + debugging */\n stats() {\n return {\n words: Object.keys(this.words).length,\n plurals: Object.keys(this.irregulars.nouns).length,\n conjugations: Object.keys(this.irregulars.verbs).length,\n compounds: Object.keys(this.hasCompound).length,\n postProcessors: this.taggers.length,\n }\n }\n}\n\n// ¯\\_(:/)_/¯\nconst clone = function(obj) {\n return JSON.parse(JSON.stringify(obj))\n}\n\n/** produce a deep-copy of all lingustic data */\nWorld.prototype.clone = function() {\n let w2 = new World()\n // these are simple to copy:\n w2.words = Object.assign({}, this.words)\n w2.hasCompound = Object.assign({}, this.hasCompound)\n //these ones are nested:\n w2.irregulars = clone(this.irregulars)\n w2.tags = clone(this.tags)\n // these are functions\n w2.transforms = this.transforms\n w2.taggers = this.taggers\n return w2\n}\nmodule.exports = World\n","/** return the root, first document */\nexports.all = function() {\n return this.parents()[0] || this\n}\n\n/** return the previous result */\nexports.parent = function() {\n if (this.from) {\n return this.from\n }\n return this\n}\n\n/** return a list of all previous results */\nexports.parents = function(n) {\n let arr = []\n const addParent = function(doc) {\n if (doc.from) {\n arr.push(doc.from)\n addParent(doc.from)\n }\n }\n addParent(this)\n arr = arr.reverse()\n if (typeof n === 'number') {\n return arr[n]\n }\n return arr\n}\n\n/** deep-copy the document, so that no references remain */\nexports.clone = function(doShallow) {\n let list = this.list.map(ts => ts.clone(doShallow))\n let tmp = this.buildFrom(list)\n return tmp\n}\n\n/** how many seperate terms does the document have? */\nexports.wordCount = function() {\n return this.list.reduce((count, p) => {\n count += p.wordCount()\n return count\n }, 0)\n}\nexports.wordcount = exports.wordCount\n\n/** turn on logging for decision-debugging */\n// exports.verbose = function(bool) {\n// if (bool === undefined) {\n// bool = true\n// }\n// this.world.verbose = bool\n// }\n","/** use only the first result(s) */\nexports.first = function(n) {\n if (n === undefined) {\n return this.get(0)\n }\n return this.slice(0, n)\n}\n\n/** use only the last result(s) */\nexports.last = function(n) {\n if (n === undefined) {\n return this.get(this.list.length - 1)\n }\n let end = this.list.length\n return this.slice(end - n, end)\n}\n\n/** grab a given subset of the results*/\nexports.slice = function(start, end) {\n let list = this.list.slice(start, end)\n return this.buildFrom(list)\n}\n\n/* grab nth result */\nexports.eq = function(n) {\n let p = this.list[n]\n if (p === undefined) {\n return this.buildFrom([])\n }\n return this.buildFrom([p])\n}\nexports.get = exports.eq\n\n/** grab term[0] for every match */\nexports.firstTerms = function() {\n return this.match('^.')\n}\nexports.firstTerm = exports.firstTerms\n\n/** grab the last term for every match */\nexports.lastTerms = function() {\n return this.match('.$')\n}\nexports.lastTerm = exports.lastTerms\n\n/** return a flat array of term objects */\nexports.termList = function(num) {\n let arr = []\n //'reduce' but faster\n for (let i = 0; i < this.list.length; i++) {\n let terms = this.list[i].terms()\n for (let o = 0; o < terms.length; o++) {\n arr.push(terms[o])\n //support .termList(4)\n if (num !== undefined && arr[num] !== undefined) {\n return arr[num]\n }\n }\n }\n return arr\n}\n\n/* grab named capture group terms as object */\nconst getGroups = function(doc) {\n let res = {}\n const allGroups = {}\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n const groups = Object.keys(phrase.groups).map(k => phrase.groups[k])\n for (let j = 0; j < groups.length; j++) {\n const { group, start, length } = groups[j]\n\n if (!allGroups[group]) {\n allGroups[group] = []\n }\n allGroups[group].push(phrase.buildFrom(start, length))\n }\n }\n const keys = Object.keys(allGroups)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n res[key] = doc.buildFrom(allGroups[key])\n }\n return res\n}\n\nconst getOneName = function(doc, name) {\n const arr = []\n for (let i = 0; i < doc.list.length; i++) {\n const phrase = doc.list[i]\n let keys = Object.keys(phrase.groups)\n keys = keys.filter(id => phrase.groups[id].group === name)\n keys.forEach(id => {\n arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length))\n })\n }\n return doc.buildFrom(arr)\n}\n\n/** grab named capture group results */\nexports.groups = function(target) {\n if (target === undefined) {\n return getGroups(this)\n }\n if (typeof target === 'number') {\n target = String(target)\n }\n return getOneName(this, target) || this.buildFrom([])\n}\nexports.group = exports.groups\n\n/** get the full-sentence each phrase belongs to */\nexports.sentences = function(n) {\n let arr = []\n this.list.forEach(p => {\n arr.push(p.fullSentence())\n })\n if (typeof n === 'number') {\n return this.buildFrom([arr[n]])\n }\n return this.buildFrom(arr)\n}\nexports.sentence = exports.sentences\n","// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: needTags, words: needWords }\n}\n\nconst failFast = function(doc, regs) {\n if (doc._cache && doc._cache.set === true) {\n let { words, tags } = cacheRequired(regs)\n //check required words\n for (let i = 0; i < words.length; i++) {\n if (doc._cache.words[words[i]] === undefined) {\n return false\n }\n }\n //check required tags\n for (let i = 0; i < tags.length; i++) {\n if (doc._cache.tags[tags[i]] === undefined) {\n return false\n }\n }\n }\n return true\n}\nmodule.exports = failFast\n","const parseSyntax = require('../match/syntax')\nconst checkCache = require('../match/checkCache')\n\n/** return a new Doc, with this one as a parent */\nexports.match = function(reg, name) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n if (regs.length === 0) {\n return this.buildFrom([])\n }\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.match(regs))\n }, [])\n\n if (name !== undefined && name !== null && name !== '') {\n return this.buildFrom(matches).groups(name)\n }\n return this.buildFrom(matches)\n}\n\n/** return all results except for this */\nexports.not = function(reg) {\n //parse-up the input expression\n let regs = parseSyntax(reg)\n //if it's empty, return them all!\n if (regs.length === 0 || checkCache(this, regs) === false) {\n return this\n }\n //try expression on each phrase\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.not(regs))\n }, [])\n return this.buildFrom(matches)\n}\n\n/** return only the first match */\nexports.matchOne = function(reg) {\n let regs = parseSyntax(reg)\n //check our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n for (let i = 0; i < this.list.length; i++) {\n let match = this.list[i].match(regs, true)\n return this.buildFrom(match)\n }\n return this.buildFrom([])\n}\n\n/** return each current phrase, only if it contains this match */\nexports.if = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return this.buildFrom([])\n }\n let found = this.list.filter(p => p.has(regs) === true)\n return this.buildFrom(found)\n}\n\n/** Filter-out any current phrases that have this match*/\nexports.ifNo = function(reg) {\n let regs = parseSyntax(reg)\n let found = this.list.filter(p => p.has(regs) === false)\n return this.buildFrom(found)\n}\n\n/**Return a boolean if this match exists */\nexports.has = function(reg) {\n let regs = parseSyntax(reg)\n //consult our cache, if it exists\n if (checkCache(this, regs) === false) {\n return false\n }\n return this.list.some(p => p.has(regs) === true)\n}\n\n/** match any terms after our matches, within the sentence */\nexports.lookAhead = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookAhead(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookAfter = exports.lookAhead\n\n/** match any terms before our matches, within the sentence */\nexports.lookBehind = function(reg) {\n // find everything afterwards, by default\n if (!reg) {\n reg = '.*'\n }\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n matches = matches.concat(p.lookBehind(regs))\n })\n matches = matches.filter(p => p)\n return this.buildFrom(matches)\n}\nexports.lookBefore = exports.lookBehind\n\n/** return all terms before a match, in each phrase */\nexports.before = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let ids = p.terms().map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //nothing is before a first-term match\n if (index === 0 || index === -1) {\n return null\n }\n return p.buildFrom(p.start, index)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n\n/** return all terms after a match, in each phrase */\nexports.after = function(reg) {\n let regs = parseSyntax(reg)\n //only the phrases we care about\n let phrases = this.if(regs).list\n let befores = phrases.map(p => {\n let terms = p.terms()\n let ids = terms.map(t => t.id)\n //run the search again\n let m = p.match(regs)[0]\n let index = ids.indexOf(m.start)\n //skip if nothing is after it\n if (index === -1 || !terms[index + m.length]) {\n return null\n }\n //create the new phrase, after our match.\n let id = terms[index + m.length].id\n let len = p.length - index - m.length\n return p.buildFrom(id, len)\n })\n befores = befores.filter(p => p !== null)\n return this.buildFrom(befores)\n}\n","/** apply a tag, or tags to all terms */\nconst tagTerms = function(tag, doc, safe, reason) {\n let tagList = []\n if (typeof tag === 'string') {\n tagList = tag.split(' ')\n }\n\n //do indepenent tags for each term:\n doc.list.forEach(p => {\n let terms = p.terms()\n // tagSafe - apply only to fitting terms\n if (safe === true) {\n terms = terms.filter(t => t.canBe(tag, doc.world))\n }\n terms.forEach((t, i) => {\n //fancy version:\n if (tagList.length > 1) {\n if (tagList[i] && tagList[i] !== '.') {\n t.tag(tagList[i], reason, doc.world)\n }\n } else {\n //non-fancy version (same tag for all terms)\n t.tag(tag, reason, doc.world)\n }\n })\n })\n return\n}\nmodule.exports = tagTerms\n","const setTag = require('./_setTag')\n\n/** Give all terms the given tag */\nexports.tag = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, false, why)\n return this\n}\n\n/** Only apply tag to terms if it is consistent with current tags */\nexports.tagSafe = function(tags, why) {\n if (!tags) {\n return this\n }\n setTag(tags, this, true, why)\n return this\n}\n\n/** Remove this term from the given terms */\nexports.unTag = function(tags, why) {\n this.list.forEach(p => {\n p.terms().forEach(t => t.unTag(tags, why, this.world))\n })\n return this\n}\n\n/** return only the terms that can be this tag*/\nexports.canBe = function(tag) {\n if (!tag) {\n return this\n }\n let world = this.world\n let matches = this.list.reduce((arr, p) => {\n return arr.concat(p.canBe(tag, world))\n }, [])\n return this.buildFrom(matches)\n}\n","/* run each phrase through a function, and create a new document */\nexports.map = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.map((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n let res = fn(doc, i)\n // if its a doc, return one result\n if (res && res.list && res.list[0]) {\n return res.list[0]\n }\n return res\n })\n //remove nulls\n list = list.filter(x => x)\n // return an empty response\n if (list.length === 0) {\n return this.buildFrom(list)\n }\n // if it is not a list of Phrase objects, then don't try to make a Doc object\n if (typeof list[0] !== 'object' || list[0].isA !== 'Phrase') {\n return list\n }\n return this.buildFrom(list)\n}\n\n/** run a function on each phrase */\nexports.forEach = function(fn, detachParent) {\n if (!fn) {\n return this\n }\n this.list.forEach((p, i) => {\n let sub = this.buildFrom([p])\n // if we're doing fancy insertions, we may want to skip updating the parent each time.\n if (detachParent === true) {\n sub.from = null //\n }\n fn(sub, i)\n })\n return this\n}\n\n/** return only the phrases that return true */\nexports.filter = function(fn) {\n if (!fn) {\n return this\n }\n let list = this.list.filter((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n return this.buildFrom(list)\n}\n\n/** return a document with only the first phrase that matches */\nexports.find = function(fn) {\n if (!fn) {\n return this\n }\n let phrase = this.list.find((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n if (phrase) {\n return this.buildFrom([phrase])\n }\n return undefined\n}\n\n/** return true or false if there is one matching phrase */\nexports.some = function(fn) {\n if (!fn) {\n return this\n }\n return this.list.some((p, i) => {\n let doc = this.buildFrom([p])\n doc.from = null //it's not a child/parent\n return fn(doc, i)\n })\n}\n\n/** sample a subset of the results */\nexports.random = function(n) {\n if (!this.found) {\n return this\n }\n let r = Math.floor(Math.random() * this.list.length)\n if (n === undefined) {\n let list = [this.list[r]]\n return this.buildFrom(list)\n }\n //prevent it from going over the end\n if (r + n > this.length) {\n r = this.length - n\n r = r < 0 ? 0 : r\n }\n return this.slice(r, r + n)\n}\n\n/** combine each phrase into a new data-structure */\n// exports.reduce = function(fn, h) {\n// let list = this.list.reduce((_h, ts) => {\n// let doc = this.buildFrom([ts])\n// doc.from = null //it's not a child/parent\n// return fn(_h, doc)\n// }, h)\n// return this.buildFrom(list)\n// }\n","// const tokenize = require('../../01-tokenizer/02-words')\nconst tokenize = function(str) {\n return str.split(/[ -]/g)\n}\n// take a list of strings\n// look them up in the document\nconst buildTree = function(termList, values = []) {\n let root = {}\n // parse our input\n termList.forEach((str, i) => {\n let val = true\n if (values[i] !== undefined) {\n val = values[i]\n }\n // some rough normalization\n str = (str || '').toLowerCase()\n str = str.replace(/[,;.!?]+$/, '')\n let arr = tokenize(str).map(s => s.trim())\n root[arr[0]] = root[arr[0]] || {}\n if (arr.length === 1) {\n root[arr[0]].value = val\n } else {\n root[arr[0]].more = root[arr[0]].more || []\n root[arr[0]].more.push({\n rest: arr.slice(1),\n value: val,\n })\n }\n })\n // sort by longest-first?\n // console.log(JSON.stringify(root, null, 2))\n return root\n}\n\nconst fastLookup = function(termList, values, doc) {\n let root = buildTree(termList, values)\n let found = []\n // each phrase\n for (let i = 0; i < doc.list.length; i++) {\n const p = doc.list[i]\n let terms = p.terms()\n\n let words = terms.map(t => t.reduced)\n // each word\n for (let w = 0; w < words.length; w++) {\n if (root[words[w]] !== undefined) {\n // is it a multi-word match?\n if (root[words[w]].more !== undefined) {\n root[words[w]].more.forEach(more => {\n // is it too-long?\n if (words[w + more.rest.length] === undefined) {\n return\n }\n // compare each subsequent term\n let everyTerm = more.rest.every((word, r) => {\n return word === words[w + r + 1]\n })\n if (everyTerm === true) {\n found.push({ id: p.terms()[w].id, value: more.value, length: more.rest.length + 1 })\n }\n })\n }\n // is it a single-word match?\n if (root[words[w]].value !== undefined) {\n found.push({ id: p.terms()[w].id, value: root[words[w]].value, length: 1 })\n }\n }\n }\n }\n return found\n}\nmodule.exports = fastLookup\n","const lookup = require('./_lookup')\n\n// compare one term and one match\n// const doesMatch = function(term, str) {\n// if (str === '') {\n// return false\n// }\n// return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str\n// }\n\nconst isObject = function(obj) {\n return obj && Object.prototype.toString.call(obj) === '[object Object]'\n}\n\n/** lookup an array of words or phrases */\nexports.lookup = function(arr) {\n let values = []\n //is it a {key:val} object?\n let isObj = isObject(arr)\n if (isObj === true) {\n arr = Object.keys(arr).map(k => {\n values.push(arr[k])\n return k\n })\n }\n // support .lookup('foo')\n if (typeof arr === 'string') {\n arr = [arr]\n }\n\n //make sure we go fast.\n if (this._cache.set !== true) {\n this.cache()\n }\n\n let found = lookup(arr, values, this)\n let p = this.list[0]\n // make object response\n if (isObj === true) {\n let byVal = {}\n found.forEach(o => {\n byVal[o.value] = byVal[o.value] || []\n byVal[o.value].push(p.buildFrom(o.id, o.length))\n })\n Object.keys(byVal).forEach(k => {\n byVal[k] = this.buildFrom(byVal[k])\n })\n return byVal\n }\n // otherwise, make array response:\n found = found.map(o => p.buildFrom(o.id, o.length))\n return this.buildFrom(found)\n}\nexports.lookUp = exports.lookup\n","/** freeze the current state of the document, for speed-purposes*/\nexports.cache = function(options) {\n options = options || {}\n let words = {}\n let tags = {}\n this._cache.words = words\n this._cache.tags = tags\n this._cache.set = true\n this.list.forEach((p, i) => {\n p.cache = p.cache || {}\n //p.terms get cached automatically\n let terms = p.terms()\n // cache all the terms\n terms.forEach(t => {\n if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) {\n return //skip prototype words\n }\n words[t.reduced] = words[t.reduced] || []\n words[t.reduced].push(i)\n\n Object.keys(t.tags).forEach(tag => {\n tags[tag] = tags[tag] || []\n tags[tag].push(i)\n })\n\n // cache root-form on Term, too\n if (options.root) {\n t.setRoot(this.world)\n words[t.root] = true\n }\n })\n })\n return this\n}\n\n/** un-freezes the current state of the document, so it may be transformed */\nexports.uncache = function() {\n this._cache = {}\n this.list.forEach(p => {\n p.cache = {}\n })\n // do parents too?\n this.parents().forEach(doc => {\n doc._cache = {}\n doc.list.forEach(p => {\n p.cache = {}\n })\n })\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\nconst titleCase = str => {\n return str.charAt(0).toUpperCase() + str.substr(1)\n}\n\n/** substitute-in new content */\nexports.replaceWith = function(replace, options = {}) {\n if (!replace) {\n return this.delete()\n }\n //support old-style params\n if (options === true) {\n options = { keepTags: true }\n }\n if (options === false) {\n options = { keepTags: false }\n }\n options = options || {}\n\n // clear the cache\n this.uncache()\n // return this\n this.list.forEach(p => {\n let input = replace\n // accept a function for replace\n if (typeof replace === 'function') {\n input = replace(p)\n }\n let newPhrases\n // accept a Doc object to replace\n if (input && typeof input === 'object' && input.isA === 'Doc') {\n newPhrases = input.list\n this.pool().merge(input.pool())\n } else if (typeof input === 'string') {\n //input is a string\n if (options.keepCase !== false && p.terms(0).isTitleCase()) {\n input = titleCase(input)\n }\n newPhrases = tokenize(input, this.world, this.pool())\n //tag the new phrases\n let tmpDoc = this.buildFrom(newPhrases)\n tmpDoc.tagger()\n } else {\n return //don't even bother\n }\n\n // try to keep its old tags, if appropriate\n if (options.keepTags === true) {\n let oldTags = p.json({ terms: { tags: true } }).terms\n newPhrases[0].terms().forEach((t, i) => {\n if (oldTags[i]) {\n t.tagSafe(oldTags[i].tags, 'keptTag', this.world)\n }\n })\n }\n p.replace(newPhrases[0], this) //Oneday: support multi-sentence replacements\n })\n return this\n}\n\n/** search and replace match with new content */\nexports.replace = function(match, replace, options) {\n // if there's no 2nd param, use replaceWith\n if (replace === undefined) {\n return this.replaceWith(match, options)\n }\n this.match(match).replaceWith(replace, options)\n return this\n}\n","const tokenize = require('../../../01-tokenizer')\n\n/** add these new terms to the end*/\nexports.append = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to end of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // push it onto the end\n p.append(phrase, this)\n })\n return this\n}\nexports.insertAfter = exports.append\nexports.insertAt = exports.append\n\n/** add these new terms to the front*/\nexports.prepend = function(str) {\n if (!str) {\n return this\n }\n // clear the cache\n this.uncache()\n //add it to start of every phrase\n this.list.forEach(p => {\n //build it\n let phrase = tokenize(str, this.world, this.pool())[0] //assume it's one sentence, for now\n //tag it\n let tmpDoc = this.buildFrom([phrase])\n tmpDoc.tagger()\n // add it to the start\n p.prepend(phrase, this)\n })\n return this\n}\nexports.insertBefore = exports.prepend\n\n/** add these new things to the end*/\nexports.concat = function() {\n // clear the cache\n this.uncache()\n let list = this.list.slice(0)\n //repeat for any number of params\n for (let i = 0; i < arguments.length; i++) {\n let arg = arguments[i]\n //support a fresh string\n if (typeof arg === 'string') {\n let arr = tokenize(arg, this.world)\n //TODO: phrase.tagger()?\n list = list.concat(arr)\n } else if (arg.isA === 'Doc') {\n list = list.concat(arg.list)\n } else if (arg.isA === 'Phrase') {\n list.push(arg)\n }\n }\n return this.buildFrom(list)\n}\n\n/** fully remove these terms from the document */\nexports.delete = function(match) {\n // clear the cache\n this.uncache()\n let toRemove = this\n if (match) {\n toRemove = this.match(match)\n }\n toRemove.list.forEach(phrase => phrase.delete(this))\n return this\n}\n// aliases\nexports.remove = exports.delete\n","const shouldTrim = {\n clean: true,\n reduced: true,\n root: true,\n}\n\n/** return the document as text */\nexports.text = function(options) {\n options = options || {}\n //are we showing every phrase?\n let showFull = false\n if (this.parents().length === 0) {\n showFull = true\n }\n // cache roots, if necessary\n if (options === 'root' || (typeof options === 'object' && options.root)) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let txt = this.list.reduce((str, p, i) => {\n const trimPre = !showFull && i === 0\n const trimPost = !showFull && i === this.list.length - 1\n return str + p.text(options, trimPre, trimPost)\n }, '')\n\n // clumsy final trim of leading/trailing whitespace\n if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) {\n txt = txt.trim()\n }\n return txt\n}\n","// get all character startings in doc\nconst termOffsets = function(doc) {\n let elapsed = 0\n let index = 0\n let offsets = {}\n doc.termList().forEach(term => {\n offsets[term.id] = {\n index: index,\n start: elapsed + term.pre.length,\n length: term.text.length,\n }\n elapsed += term.pre.length + term.text.length + term.post.length\n index += 1\n })\n return offsets\n}\n\nconst calcOffset = function(doc, result, options) {\n // calculate offsets for each term\n let offsets = termOffsets(doc.all())\n // add index values\n if (options.terms.index || options.index) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.index = offsets[t.id].index\n })\n o.index = o.terms[0].index\n })\n }\n // add offset values\n if (options.terms.offset || options.offset) {\n result.forEach(o => {\n o.terms.forEach(t => {\n t.offset = offsets[t.id] || {}\n })\n // let len = o.terms.reduce((n, t, i) => {\n // n += t.offset.length || 0\n // //add whitespace, too\n // console.log(t.post)\n // return n\n // }, 0)\n o.offset = o.terms[0].offset\n o.offset.length = o.text.length\n })\n }\n}\nmodule.exports = calcOffset\n","const offsets = require('./_offset')\nconst jsonDefaults = { text: true, terms: true, trim: true }\n\n//some options have dependents\nconst setOptions = function(options) {\n options = Object.assign({}, jsonDefaults, options)\n\n if (options.unique) {\n options.reduced = true\n }\n //offset calculation requires these options to be on\n if (options.offset) {\n options.text = true\n if (!options.terms || options.terms === true) {\n options.terms = {}\n }\n options.terms.offset = true\n }\n if (options.index || options.terms.index) {\n options.terms = options.terms === true ? {} : options.terms\n options.terms.id = true\n }\n return options\n}\n\n/** pull out desired metadata from the document */\nexports.json = function(options = {}) {\n //support json(3) format\n if (typeof options === 'number' && this.list[options]) {\n return this.list[options].json(jsonDefaults)\n }\n\n options = setOptions(options)\n\n // cache root strings beforehand, if necessary\n if (options.root === true) {\n this.list.forEach(p => {\n p.terms().forEach(t => {\n if (t.root === null) {\n t.setRoot(this.world)\n }\n })\n })\n }\n\n let result = this.list.map(p => {\n return p.json(options, this.world)\n })\n // add offset and index data for each term\n if (options.terms.offset || options.offset || options.terms.index || options.index) {\n offsets(this, result, options)\n }\n // add frequency #s\n if (options.frequency || options.freq || options.count) {\n let obj = {}\n this.list.forEach(p => {\n let str = p.text('reduced')\n obj[str] = obj[str] || 0\n obj[str] += 1\n })\n this.list.forEach((p, i) => {\n result[i].count = obj[p.text('reduced')]\n })\n }\n // remove duplicates\n if (options.unique) {\n let already = {}\n result = result.filter(o => {\n if (already[o.reduced] === true) {\n return false\n }\n already[o.reduced] = true\n return true\n })\n }\n return result\n}\n\n//aliases\nexports.data = exports.json\n","// https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color\nconst reset = '\\x1b[0m'\n\nconst padEnd = function(str, width) {\n str = str.toString()\n while (str.length < width) {\n str += ' '\n }\n return str\n}\n\nfunction isClientSide() {\n return typeof window !== 'undefined' && window.document\n}\n\n// some nice colors for client-side debug\nconst css = {\n green: '#7f9c6c',\n red: '#914045',\n blue: '#6699cc',\n magenta: '#6D5685',\n cyan: '#2D85A8',\n yellow: '#e6d7b3',\n black: '#303b50',\n}\n\nconst logClientSide = function(doc) {\n let tagset = doc.world.tags\n doc.list.forEach(p => {\n console.log('\\n%c\"' + p.text() + '\"', 'color: #e6d7b3;')\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 8)\n let found = tags.find(tag => tagset[tag] && tagset[tag].color)\n let color = 'steelblue'\n if (tagset[found]) {\n color = tagset[found].color\n color = css[color]\n }\n console.log(` ${word} - %c${tags.join(', ')}`, `color: ${color || 'steelblue'};`)\n })\n })\n}\n\n//cheaper than requiring chalk\nconst cli = {\n green: function(str) {\n return '\\x1b[32m' + str + reset\n },\n red: function(str) {\n return '\\x1b[31m' + str + reset\n },\n blue: function(str) {\n return '\\x1b[34m' + str + reset\n },\n magenta: function(str) {\n return '\\x1b[35m' + str + reset\n },\n cyan: function(str) {\n return '\\x1b[36m' + str + reset\n },\n yellow: function(str) {\n return '\\x1b[33m' + str + reset\n },\n black: function(str) {\n return '\\x1b[30m' + str + reset\n },\n}\n\nconst tagString = function(tags, world) {\n tags = tags.map(tag => {\n if (!world.tags.hasOwnProperty(tag)) {\n return tag\n }\n const c = world.tags[tag].color || 'blue'\n return cli[c](tag)\n })\n return tags.join(', ')\n}\n\n//output some helpful stuff to the console\nconst debug = function(doc) {\n if (isClientSide()) {\n logClientSide(doc)\n return doc\n }\n console.log(cli.blue('====='))\n doc.list.forEach(p => {\n console.log(cli.blue(' -----'))\n let terms = p.terms()\n terms.forEach(t => {\n let tags = Object.keys(t.tags)\n let text = t.text || '-'\n if (t.implicit) {\n text = '[' + t.implicit + ']'\n }\n if (typeof module !== undefined) {\n text = cli.yellow(text)\n }\n let word = \"'\" + text + \"'\"\n word = padEnd(word, 18)\n let str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world)\n console.log(str)\n })\n })\n console.log('')\n return doc\n}\nmodule.exports = debug\n","const topk = function(doc) {\n let list = doc.json({ text: false, terms: false, reduced: true })\n // combine them\n let obj = {}\n list.forEach(o => {\n if (!obj[o.reduced]) {\n o.count = 0\n obj[o.reduced] = o\n }\n obj[o.reduced].count += 1\n })\n let arr = Object.keys(obj).map(k => obj[k])\n // sort them\n arr.sort((a, b) => {\n if (a.count > b.count) {\n return -1\n } else if (a.count < b.count) {\n return 1\n }\n return 0\n })\n return arr\n}\nmodule.exports = topk\n","const debug = require('./_debug')\nconst topk = require('./_topk')\n\n/** pretty-print the current document and its tags */\nexports.debug = function() {\n debug(this)\n return this\n}\n\n/** some named output formats */\nexports.out = function(method) {\n if (method === 'text') {\n return this.text()\n }\n if (method === 'normal') {\n return this.text('normal')\n }\n if (method === 'json') {\n return this.json()\n }\n if (method === 'offset' || method === 'offsets') {\n return this.json({ offset: true })\n }\n if (method === 'array') {\n return this.json({ terms: false }).map(obj => obj.text)\n }\n if (method === 'freq' || method === 'frequency') {\n return topk(this)\n }\n if (method === 'terms') {\n let list = []\n this.json({ text: false, terms: { text: true } }).forEach(obj => {\n let terms = obj.terms.map(t => t.text)\n terms = terms.filter(t => t)\n list = list.concat(terms)\n })\n return list\n }\n if (method === 'tags') {\n return this.list.map(p => {\n return p.terms().reduce((h, t) => {\n h[t.clean || t.implicit] = Object.keys(t.tags)\n return h\n }, {})\n })\n }\n if (method === 'debug') {\n debug(this)\n return this\n }\n return this.text()\n}\n","const methods = {\n /** alphabetical order */\n alpha: (a, b) => {\n let left = a.text('clean')\n let right = b.text('clean')\n if (left < right) {\n return -1\n }\n if (left > right) {\n return 1\n }\n return 0\n },\n\n /** count the # of characters of each match */\n length: (a, b) => {\n let left = a.text().trim().length\n let right = b.text().trim().length\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n\n /** count the # of terms in each match */\n wordCount: (a, b) => {\n let left = a.wordCount()\n let right = b.wordCount()\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n },\n}\n\n/** sort by # of duplicates in the document*/\nconst byFreq = function(doc) {\n let counts = {}\n const options = {\n case: true,\n punctuation: false,\n whitespace: true,\n unicode: true,\n }\n doc.list.forEach(p => {\n let str = p.text(options)\n counts[str] = counts[str] || 0\n counts[str] += 1\n })\n // sort by freq\n doc.list.sort((a, b) => {\n let left = counts[a.text(options)]\n let right = counts[b.text(options)]\n if (left < right) {\n return 1\n }\n if (left > right) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n// order results 'chronologically', or document-order\nconst sortSequential = function(doc) {\n let order = {}\n doc.json({ terms: { offset: true } }).forEach(o => {\n order[o.terms[0].id] = o.terms[0].offset.start\n })\n doc.list = doc.list.sort((a, b) => {\n if (order[a.start] > order[b.start]) {\n return 1\n } else if (order[a.start] < order[b.start]) {\n return -1\n }\n return 0\n })\n return doc\n}\n\n//aliases\nmethods.alphabetical = methods.alpha\nmethods.wordcount = methods.wordCount\n\n// aliases for sequential ordering\nconst seqNames = {\n index: true,\n sequence: true,\n seq: true,\n sequential: true,\n chron: true,\n chronological: true,\n}\n\n/** re-arrange the order of the matches (in place) */\nexports.sort = function(input) {\n input = input || 'alpha'\n //do this one up-front\n if (input === 'freq' || input === 'frequency' || input === 'topk') {\n return byFreq(this)\n }\n if (seqNames.hasOwnProperty(input)) {\n return sortSequential(this)\n }\n\n input = methods[input] || input\n // apply sort method on each phrase\n if (typeof input === 'function') {\n this.list = this.list.sort(input)\n return this\n }\n return this\n}\n\n/** reverse the order of the matches, but not the words */\nexports.reverse = function() {\n let list = [].concat(this.list)\n list = list.reverse()\n return this.buildFrom(list)\n}\n\n/** remove any duplicate matches */\nexports.unique = function() {\n let list = [].concat(this.list)\n let obj = {}\n list = list.filter(p => {\n let str = p.text('reduced').trim()\n if (obj.hasOwnProperty(str) === true) {\n return false\n }\n obj[str] = true\n return true\n })\n return this.buildFrom(list)\n}\n","const killUnicode = require('../../../Term/normalize/unicode')\nconst isPunct = /[\\[\\]{}⟨⟩:,،、‒–—―…‹›«»‐\\-;\\/⁄·*\\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g\nconst quotes = /['‘’“”\"′″‴]+/g\n\nconst methods = {\n // cleanup newlines and extra spaces\n whitespace: function(doc) {\n let termArr = doc.list.map(ts => ts.terms())\n termArr.forEach((terms, o) => {\n terms.forEach((t, i) => {\n // keep dashes between words\n if (t.hasDash() === true) {\n t.post = ' - '\n return\n }\n // remove existing spaces\n t.pre = t.pre.replace(/\\s/g, '')\n t.post = t.post.replace(/\\s/g, '')\n //last word? ensure there's a next sentence.\n if (terms.length - 1 === i && !termArr[o + 1]) {\n return\n }\n // no extra spaces for contractions\n if (t.implicit && Boolean(t.text) === true) {\n return\n }\n // no extra spaces for hyphenated words\n if (t.hasHyphen() === true) {\n return\n }\n\n t.post += ' '\n })\n })\n },\n\n punctuation: function(termList) {\n termList.forEach(t => {\n // space between hyphenated words\n if (t.hasHyphen() === true) {\n t.post = ' '\n }\n t.pre = t.pre.replace(isPunct, '')\n t.post = t.post.replace(isPunct, '')\n // elipses\n t.post = t.post.replace(/\\.\\.\\./, '')\n // only allow one exclamation\n if (/!/.test(t.post) === true) {\n t.post = t.post.replace(/!/g, '')\n t.post = '!' + t.post\n }\n // only allow one question mark\n if (/\\?/.test(t.post) === true) {\n t.post = t.post.replace(/[\\?!]*/, '')\n t.post = '?' + t.post\n }\n })\n },\n\n unicode: function(termList) {\n termList.forEach(t => {\n if (t.isImplicit() === true) {\n return\n }\n t.text = killUnicode(t.text)\n })\n },\n\n quotations: function(termList) {\n termList.forEach(t => {\n t.post = t.post.replace(quotes, '')\n t.pre = t.pre.replace(quotes, '')\n })\n },\n\n adverbs: function(doc) {\n doc\n .match('#Adverb')\n .not('(not|nary|seldom|never|barely|almost|basically|so)')\n .remove()\n },\n\n // remove the '.' from 'Mrs.' (safely)\n abbreviations: function(doc) {\n doc.list.forEach(ts => {\n let terms = ts.terms()\n terms.forEach((t, i) => {\n if (t.tags.Abbreviation === true && terms[i + 1]) {\n t.post = t.post.replace(/^\\./, '')\n }\n })\n })\n },\n}\nmodule.exports = methods\n","const methods = require('./_methods')\n\nconst defaults = {\n // light\n whitespace: true,\n unicode: true,\n punctuation: true,\n emoji: true,\n acronyms: true,\n abbreviations: true,\n\n // medium\n case: false,\n contractions: false,\n parentheses: false,\n quotations: false,\n adverbs: false,\n\n // heavy (loose legibility)\n possessives: false,\n verbs: false,\n nouns: false,\n honorifics: false,\n\n // pronouns: true,\n}\nconst mapping = {\n light: {},\n medium: { case: true, contractions: true, parentheses: true, quotations: true, adverbs: true },\n}\nmapping.heavy = Object.assign({}, mapping.medium, { possessives: true, verbs: true, nouns: true, honorifics: true })\n\n/** common ways to clean-up the document, and reduce noise */\nexports.normalize = function(options) {\n options = options || {}\n // support named forms\n if (typeof options === 'string') {\n options = mapping[options] || {}\n }\n // set defaults\n options = Object.assign({}, defaults, options)\n // clear the cache\n this.uncache()\n\n let termList = this.termList()\n\n // lowercase things\n if (options.case) {\n this.toLowerCase()\n }\n\n //whitespace\n if (options.whitespace) {\n methods.whitespace(this)\n }\n\n // unicode: é -> e\n if (options.unicode) {\n methods.unicode(termList)\n }\n\n //punctuation - keep sentence punctation, quotes, parenths\n if (options.punctuation) {\n methods.punctuation(termList)\n }\n\n // remove ':)'\n if (options.emoji) {\n this.remove('(#Emoji|#Emoticon)')\n }\n\n // 'f.b.i.' -> 'FBI'\n if (options.acronyms) {\n this.acronyms().strip()\n // .toUpperCase()\n }\n // remove period from abbreviations\n if (options.abbreviations) {\n methods.abbreviations(this)\n }\n\n // --Medium methods--\n\n // `isn't` -> 'is not'\n if (options.contraction || options.contractions) {\n this.contractions().expand()\n }\n\n // '(word)' -> 'word'\n if (options.parentheses) {\n this.parentheses().unwrap()\n }\n // remove \"\" punctuation\n if (options.quotations || options.quotes) {\n methods.quotations(termList)\n }\n\n // remove any un-necessary adverbs\n if (options.adverbs) {\n methods.adverbs(this)\n }\n\n // --Heavy methods--\n\n // `cory hart's -> cory hart'\n if (options.possessive || options.possessives) {\n this.possessives().strip()\n }\n // 'he walked' -> 'he walk'\n if (options.verbs) {\n this.verbs().toInfinitive()\n }\n // 'three dogs' -> 'three dog'\n if (options.nouns || options.plurals) {\n this.nouns().toSingular()\n }\n // remove 'Mr.' from 'Mr John Smith'\n if (options.honorifics) {\n this.remove('#Honorific')\n }\n\n return this\n}\n","const parseSyntax = require('../../match/syntax')\n\n/** return a Document with three parts for every match\n * seperate everything before the word, as a new phrase\n */\nexports.splitOn = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitOn(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before) {\n matches.push(parts.before)\n }\n if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** return a Document with two parts for every match\n * seperate everything after the word, as a new phrase\n */\nexports.splitAfter = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitAfter(this)\n }\n // start looking for our matches\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add em in\n if (parts.before && parts.match) {\n // merge these two together\n parts.before.length += parts.match.length\n matches.push(parts.before)\n } else if (parts.match) {\n matches.push(parts.match)\n }\n // start matching now on the end\n carry = parts.after\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\nexports.split = exports.splitAfter //i guess?\n\n/** return a Document with two parts for every match */\nexports.splitBefore = function(reg) {\n // if there's no match, split parent, instead\n if (!reg) {\n let parent = this.parent()\n return parent.splitBefore(this)\n }\n //start looking for a match..\n let regs = parseSyntax(reg)\n let matches = []\n this.list.forEach(p => {\n let foundEm = p.match(regs)\n //no match here, add full sentence\n if (foundEm.length === 0) {\n matches.push(p)\n return\n }\n // we found something here.\n let carry = p\n foundEm.forEach(found => {\n let parts = carry.splitOn(found)\n // add before part in\n if (parts.before) {\n matches.push(parts.before)\n }\n // merge match+after\n if (parts.match && parts.after) {\n parts.match.length += parts.after.length\n }\n // start matching now on the end\n carry = parts.match\n })\n // add that last part\n if (carry) {\n matches.push(carry)\n }\n })\n return this.buildFrom(matches)\n}\n\n/** split a document into labeled sections */\nexports.segment = function(regs, options) {\n regs = regs || {}\n options = options || { text: true }\n let doc = this\n let keys = Object.keys(regs)\n // split em\n keys.forEach(k => {\n doc = doc.splitOn(k)\n })\n //add labels for each section\n doc.list.forEach(p => {\n for (let i = 0; i < keys.length; i += 1) {\n if (p.has(keys[i])) {\n p.segment = regs[keys[i]]\n return\n }\n }\n })\n return doc.list.map(p => {\n let res = p.json(options)\n res.segment = p.segment || null\n return res\n })\n}\n","const eachTerm = function(doc, fn) {\n let world = doc.world\n doc.list.forEach(p => {\n p.terms().forEach(t => t[fn](world))\n })\n return doc\n}\n\n/** turn every letter of every term to lower-cse */\nexports.toLowerCase = function() {\n return eachTerm(this, 'toLowerCase')\n}\n\n/** turn every letter of every term to upper case */\nexports.toUpperCase = function() {\n return eachTerm(this, 'toUpperCase')\n}\n\n/** upper-case the first letter of each term */\nexports.toTitleCase = function() {\n return eachTerm(this, 'toTitleCase')\n}\n/** remove whitespace and title-case each term */\nexports.toCamelCase = function() {\n this.list.forEach(p => {\n //remove whitespace\n let terms = p.terms()\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.toTitleCase()\n }\n if (i !== terms.length - 1) {\n t.post = ''\n }\n })\n })\n // this.tag('#CamelCase', 'toCamelCase')\n return this\n}\n","/** add this punctuation or whitespace before each match: */\nexports.pre = function(str, concat) {\n if (str === undefined) {\n return this.list[0].terms(0).pre\n }\n this.list.forEach(p => {\n let term = p.terms(0)\n if (concat === true) {\n term.pre += str\n } else {\n term.pre = str\n }\n })\n return this\n}\n\n/** add this punctuation or whitespace after each match: */\nexports.post = function(str, concat) {\n // return array of post strings\n if (str === undefined) {\n return this.list.map(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n return term.post\n })\n }\n // set post string on all ends\n this.list.forEach(p => {\n let terms = p.terms()\n let term = terms[terms.length - 1]\n if (concat === true) {\n term.post += str\n } else {\n term.post = str\n }\n })\n return this\n}\n\n/** remove start and end whitespace */\nexports.trim = function() {\n this.list = this.list.map(p => p.trim())\n return this\n}\n\n/** connect words with hyphen, and remove whitespace */\nexports.hyphenate = function() {\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach((t, i) => {\n if (i !== 0) {\n t.pre = ''\n }\n if (terms[i + 1]) {\n t.post = '-'\n }\n })\n })\n return this\n}\n\n/** remove hyphens between words, and set whitespace */\nexports.dehyphenate = function() {\n const hasHyphen = /(-|–|—)/\n this.list.forEach(p => {\n let terms = p.terms()\n //remove whitespace\n terms.forEach(t => {\n if (hasHyphen.test(t.post)) {\n t.post = ' '\n }\n })\n })\n return this\n}\nexports.deHyphenate = exports.dehyphenate\n\n/** add quotations around these matches */\nexports.toQuotations = function(start, end) {\n start = start || `\"`\n end = end || `\"`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\nexports.toQuotation = exports.toQuotations\n\n/** add brackets around these matches */\nexports.toParentheses = function(start, end) {\n start = start || `(`\n end = end || `)`\n this.list.forEach(p => {\n let terms = p.terms()\n terms[0].pre = start + terms[0].pre\n let last = terms[terms.length - 1]\n last.post = end + last.post\n })\n return this\n}\n","/** make all phrases into one phrase */\nexports.join = function(str) {\n // clear the cache\n this.uncache()\n // make one large phrase - 'main'\n let main = this.list[0]\n let before = main.length\n let removed = {}\n for (let i = 1; i < this.list.length; i++) {\n const p = this.list[i]\n removed[p.start] = true\n let term = main.lastTerm()\n // add whitespace between them\n if (str) {\n term.post += str\n }\n // main -> p\n term.next = p.start\n // main <- p\n p.terms(0).prev = term.id\n main.length += p.length\n main.cache = {}\n }\n\n // parents are bigger than than their children.\n // when we increase a child, we increase their parent too.\n let increase = main.length - before\n this.parents().forEach(doc => {\n // increase length on each effected phrase\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i++) {\n if (terms[i].id === main.start) {\n p.length += increase\n break\n }\n }\n p.cache = {}\n })\n // remove redundant phrases now\n doc.list = doc.list.filter(p => removed[p.start] !== true)\n })\n // return one major phrase\n return this.buildFrom([main])\n}\n","const postPunct = /[,\\)\"';:\\-–—\\.…]/\n// const irregulars = {\n// 'will not': `won't`,\n// 'i am': `i'm`,\n// }\n\nconst setContraction = function(m, suffix) {\n if (!m.found) {\n return\n }\n let terms = m.termList()\n //avoid any problematic punctuation\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n if (postPunct.test(t.post)) {\n return\n }\n }\n\n // set them as implict\n terms.forEach(t => {\n t.implicit = t.clean\n })\n // perform the contraction\n terms[0].text += suffix\n // clean-up the others\n terms.slice(1).forEach(t => {\n t.text = ''\n })\n for (let i = 0; i < terms.length - 1; i++) {\n const t = terms[i]\n t.post = t.post.replace(/ /, '')\n }\n}\n\n/** turn 'i am' into i'm */\nexports.contract = function() {\n let doc = this.not('@hasContraction')\n // we are -> we're\n let m = doc.match('(we|they|you) are')\n setContraction(m, `'re`)\n // they will -> they'll\n m = doc.match('(he|she|they|it|we|you) will')\n setContraction(m, `'ll`)\n // she is -> she's\n m = doc.match('(he|she|they|it|we) is')\n setContraction(m, `'s`)\n // spencer is -> spencer's\n m = doc.match('#Person is')\n setContraction(m, `'s`)\n // spencer would -> spencer'd\n m = doc.match('#Person would')\n setContraction(m, `'d`)\n // would not -> wouldn't\n m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not')\n setContraction(m, `n't`)\n // i have -> i've\n m = doc.match('(i|we|they) have')\n setContraction(m, `'ve`)\n // would have -> would've\n m = doc.match('(would|should|could) have')\n setContraction(m, `'ve`)\n // i am -> i'm\n m = doc.match('i am')\n setContraction(m, `'m`)\n // going to -> gonna\n m = doc.match('going to')\n return this\n}\n","module.exports = Object.assign(\n {},\n require('./01-utils'),\n require('./02-accessors'),\n require('./03-match'),\n require('./04-tag'),\n require('./05-loops'),\n require('./06-lookup'),\n require('./07-cache'),\n\n require('./insert/01-replace'),\n require('./insert/02-insert'),\n\n require('./output/01-text'),\n require('./output/02-json'),\n require('./output/03-out'),\n\n require('./transform/01-sort'),\n require('./transform/02-normalize'),\n require('./transform/03-split'),\n require('./transform/04-case'),\n require('./transform/05-whitespace'),\n require('./transform/06-join'),\n require('./transform/07-contract')\n)\n","let methods = {}\n\n// allow helper methods like .adjectives() and .adverbs()\nconst arr = [\n ['terms', '.'],\n ['hyphenated', '@hasHyphen .'],\n ['adjectives', '#Adjective'],\n ['hashTags', '#HashTag'],\n ['emails', '#Email'],\n ['emoji', '#Emoji'],\n ['emoticons', '#Emoticon'],\n ['atMentions', '#AtMention'],\n ['urls', '#Url'],\n ['adverbs', '#Adverb'],\n ['pronouns', '#Pronoun'],\n ['conjunctions', '#Conjunction'],\n ['prepositions', '#Preposition'],\n]\narr.forEach(a => {\n methods[a[0]] = function(n) {\n let m = this.match(a[1])\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n }\n})\n// aliases\nmethods.emojis = methods.emoji\nmethods.atmentions = methods.atMentions\nmethods.words = methods.terms\n\n/** return anything tagged as a phone number */\nmethods.phoneNumbers = function(n) {\n let m = this.splitAfter('@hasComma')\n m = m.match('#PhoneNumber+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** money + currency pair */\nmethods.money = function(n) {\n let m = this.match('#Money #Currency?')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all cities, countries, addresses, and regions */\nmethods.places = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n m.sort('index')\n m = m.match('#Place+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n/** return all schools, businesses and institutions */\nmethods.organizations = function(n) {\n let m = this.clauses()\n m = m.match('#Organization+')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n}\n\n//combine them with .topics() method\nmethods.entities = function(n) {\n let r = this.clauses()\n // Find people, places, and organizations\n let yup = r.people()\n yup = yup.concat(r.places())\n yup = yup.concat(r.organizations())\n let ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']\n yup = yup.not(ignore)\n //return them to normal ordering\n yup.sort('sequence')\n // yup.unique() //? not sure\n if (typeof n === 'number') {\n yup = yup.get(n)\n }\n return yup\n}\n//aliases\nmethods.things = methods.entities\nmethods.topics = methods.entities\n\nmodule.exports = methods\n","const underOver = /^(under|over)-?/\n\n/** match a word-sequence, like 'super bowl' in the lexicon */\nconst tryMultiple = function(terms, t, world) {\n let lex = world.words\n //try a two-word version\n let txt = terms[t].reduced + ' ' + terms[t + 1].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-two', world)\n terms[t + 1].tag(lex[txt], 'lexicon-two', world)\n return 1\n }\n //try a three-word version?\n if (t + 2 < terms.length) {\n txt += ' ' + terms[t + 2].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-three', world)\n terms[t + 1].tag(lex[txt], 'lexicon-three', world)\n terms[t + 2].tag(lex[txt], 'lexicon-three', world)\n return 2\n }\n }\n //try a four-word version?\n if (t + 3 < terms.length) {\n txt += ' ' + terms[t + 3].reduced\n if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) {\n terms[t].tag(lex[txt], 'lexicon-four', world)\n terms[t + 1].tag(lex[txt], 'lexicon-four', world)\n terms[t + 2].tag(lex[txt], 'lexicon-four', world)\n terms[t + 3].tag(lex[txt], 'lexicon-four', world)\n return 3\n }\n }\n return 0\n}\n\n/** look at each word in our list of known-words */\nconst checkLexicon = function(terms, world) {\n let lex = world.words\n let hasCompound = world.hasCompound // use reduced?\n //go through each term, and check the lexicon\n for (let t = 0; t < terms.length; t += 1) {\n let str = terms[t].clean\n //is it the start of a compound word, like 'super bowl'?\n if (hasCompound[str] === true && t + 1 < terms.length) {\n let foundWords = tryMultiple(terms, t, world)\n if (foundWords > 0) {\n t += foundWords //skip any already-found words\n continue\n }\n }\n //try one-word lexicon\n if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) {\n terms[t].tag(lex[str], 'lexicon', world)\n continue\n }\n // look at reduced version of term, too\n if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) {\n terms[t].tag(lex[terms[t].reduced], 'lexicon', world)\n continue\n }\n // prefix strip: try to match 'take' for 'undertake'\n if (underOver.test(str) === true) {\n let noPrefix = str.replace(underOver, '')\n if (lex.hasOwnProperty(noPrefix) === true) {\n terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world)\n }\n }\n }\n return terms\n}\nmodule.exports = checkLexicon\n","const apostrophes = /[\\'‘’‛‵′`´]$/\n\n//\nconst checkPunctuation = function(terms, i, world) {\n let term = terms[i]\n\n //check hyphenation\n // if (term.post.indexOf('-') !== -1 && terms[i + 1] && terms[i + 1].pre === '') {\n // term.tag('Hyphenated', 'has-hyphen', world)\n // }\n // support 'head-over'\n // if (term.hasHyphen() === true) {\n // console.log(term.tags)\n // }\n // console.log(term.hasHyphen(), term.text)\n\n //an end-tick (trailing apostrophe) - flanders', or Carlos'\n if (apostrophes.test(term.text)) {\n if (!apostrophes.test(term.pre) && !apostrophes.test(term.post) && term.clean.length > 2) {\n let endChar = term.clean[term.clean.length - 2]\n //flanders'\n if (endChar === 's') {\n term.tag(['Possessive', 'Noun'], 'end-tick', world)\n return\n }\n //chillin'\n if (endChar === 'n') {\n term.tag(['Gerund'], 'chillin', world)\n }\n }\n }\n // 'NASA' is, but not 'i REALLY love it.'\n // if (term.tags.Noun === true && isAcronym(term, world)) {\n // term.tag('Acronym', 'acronym-step', world)\n // term.tag('Noun', 'acronym-infer', world)\n // } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n // term.tag('Acronym', 'one-letter-acronym', world)\n // term.tag('Noun', 'one-letter-infer', world)\n // }\n}\nmodule.exports = checkPunctuation\n","//these are regexes applied to t.text, instead of t.clean\n// order matters.\nmodule.exports = [\n //web tags\n [/^\\w+@\\w+\\.[a-z]{2,3}$/, 'Email'], //not fancy\n [/^#[a-z0-9_\\u00C0-\\u00FF]{2,}$/, 'HashTag'],\n [/^@\\w{2,}$/, 'AtMention'],\n [/^(https?:\\/\\/|www\\.)\\w+\\.[a-z]{2,3}/, 'Url'], //with http/www\n [/^[\\w./]+\\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/, 'Url'], //http://mostpopularwebsites.net/top-level-domain\n\n //dates/times\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/, 'Time'], //4:32:32\n [/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/, 'Time'], //4pm\n [/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/, 'Time'], //4:00pm\n [/^[PMCE]ST$/, 'Time'], //PST, time zone abbrevs\n [/^utc ?[+-]?[0-9]+?$/, 'Time'], //UTC 8+\n [/^[a-z0-9]*? o\\'?clock$/, 'Time'], //3 oclock\n [/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/, 'Date'], // 03-02-89\n [/^[0-9]{1,4}\\/[0-9]{1,2}\\/[0-9]{1,4}$/, 'Date'], // 03/02/89\n\n //names\n [/^ma?c\\'.*/, 'LastName'], //mc'adams\n [/^o\\'[drlkn].*/, 'LastName'], //o'douggan\n [/^ma?cd[aeiou]/, 'LastName'], //macdonell - Last patterns https://en.wikipedia.org/wiki/List_of_family_name_affixes\n\n //slang things\n [/^(lol)+[sz]$/, 'Expression'], //lol\n [/^woo+a*?h?$/, 'Expression'], //whoaa, wooo\n [/^(un|de|re)\\\\-[a-z\\u00C0-\\u00FF]{2}/, 'Verb'],\n // [/^(over|under)[a-z]{2,}/, 'Adjective'],\n [/^[0-9]{1,4}\\.[0-9]{1,2}\\.[0-9]{1,4}$/, 'Date'], // 03-02-89\n\n //phone numbers\n [/^[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //589-3809\n [/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/, 'PhoneNumber'], //632-589-3809\n\n //money\n // currency regex\n // /[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\n\n //like $5.30\n [\n /^[-+]?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(k|m|b|bn)?\\+?$/,\n ['Money', 'Value'],\n ],\n //like 5.30$\n [\n /^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?[\\$\\xA2-\\xA5\\u058F\\u060B\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20BD\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6]\\+?$/,\n ['Money', 'Value'],\n ],\n //like 400usd\n [/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i, ['Money', 'Value']],\n\n //numbers\n // 50 | -50 | 3.23 | 5,999.0 | 10+\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?\\+?$/, ['Cardinal', 'NumericValue']],\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?(st|nd|rd|th)$/, ['Ordinal', 'NumericValue']],\n // .73th\n [/^\\.[0-9]+\\+?$/, ['Cardinal', 'NumericValue']],\n\n //percent\n [/^[-+]?[0-9]+(,[0-9]{3})*(\\.[0-9]+)?%\\+?$/, ['Percent', 'Cardinal', 'NumericValue']], //7% ..\n [/^\\.[0-9]+%$/, ['Percent', 'Cardinal', 'NumericValue']], //.7% ..\n //fraction\n [/^[0-9]{1,4}\\/[0-9]{1,4}$/, 'Fraction'], //3/2ths\n //range\n [/^[0-9.]{1,2}[-–][0-9]{1,2}$/, ['Value', 'NumberRange']], //7-8\n [/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\\.]{1,4}(st|nd|rd|th)?$/, 'NumberRange'], //5-7\n //with unit\n [/^[0-9.]+([a-z]{1,4})$/, 'Value'], //like 5tbsp\n //ordinal\n // [/^[0-9][0-9,.]*(st|nd|rd|r?th)$/, ['NumericValue', 'Ordinal']], //like 5th\n // [/^[0-9]+(st|nd|rd|th)$/, 'Ordinal'], //like 5th\n]\n","const regex = require('./data/startsWith')\n\nconst romanNumeral = /^[IVXLCDM]{2,}$/\nconst romanNumValid = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ // https://stackoverflow.com/a/267405/168877\n\n//try each of the ^regexes in our list\nconst checkRegex = function(term, world) {\n let str = term.text\n // do them all!\n for (let r = 0; r < regex.length; r += 1) {\n if (regex[r][0].test(str) === true) {\n term.tagSafe(regex[r][1], 'prefix #' + r, world)\n break\n }\n }\n // do some more!\n //roman numberals - XVII\n if (term.text.length >= 2 && romanNumeral.test(str) && romanNumValid.test(str)) {\n term.tag('RomanNumeral', 'xvii', world)\n }\n}\nmodule.exports = checkRegex\n","//regex suffix patterns and their most common parts of speech,\n//built using wordnet, by spencer kelly.\n//this mapping shrinks-down the uglified build\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Adverb = 'Adverb'\nconst Exp = 'Expression'\nconst Actor = 'Actor'\nconst Verb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\n//the order here matters.\n\n//regexes indexed by mandated last-character\nmodule.exports = {\n a: [\n [/.[aeiou]na$/, Noun],\n [/.[oau][wvl]ska$/, Last], //polish (female)\n [/.[^aeiou]ica$/, Sing],\n [/^([hyj]a)+$/, Exp], //hahah\n ],\n c: [[/.[^aeiou]ic$/, Adj]],\n d: [\n //==-ed==\n //double-consonant\n [/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/, Past], //popped, planned\n //double-vowel\n [/.[aeo]{2}[bdgmnprvz]ed$/, Past], //beeped, mooned, veered\n //-hed\n [/.[aeiou][sg]hed$/, Past], //stashed, sighed\n //-rd\n [/.[aeiou]red$/, Past], //stored\n [/.[aeiou]r?ried$/, Past], //buried\n //-led\n [/.[bcdgtr]led$/, Past], //startled, rumbled\n [/.[aoui]f?led$/, Past], //impaled, stifled\n //-sed\n [/.[iao]sed$/, Past], //franchised\n [/[aeiou]n?[cs]ed$/, Past], //laced, lanced\n //-med\n [/[aeiou][rl]?[mnf]ed$/, Past], //warmed, attained, engulfed\n //-ked\n [/[aeiou][ns]?c?ked$/, Past], //hooked, masked\n //-ged\n [/[aeiou][nl]?ged$/, Past], //engaged\n //-ted\n [/.[tdbwxz]ed$/, Past], //bribed, boxed\n [/[^aeiou][aeiou][tvx]ed$/, Past], //boxed\n //-ied\n [/.[cdlmnprstv]ied$/, Past], //rallied\n\n [/[^aeiou]ard$/, Sing], //card\n [/[aeiou][^aeiou]id$/, Adj],\n [/.[vrl]id$/, Adj],\n ],\n e: [\n [/.[lnr]ize$/, Inf],\n [/.[^aeiou]ise$/, Inf],\n [/.[aeiou]te$/, Inf],\n [/.[^aeiou][ai]ble$/, Adj],\n [/.[^aeiou]eable$/, Adj],\n [/.[ts]ive$/, Adj],\n ],\n h: [\n [/.[^aeiouf]ish$/, Adj],\n [/.v[iy]ch$/, Last], //east-europe\n [/^ug?h+$/, Exp], //uhh\n [/^uh[ -]?oh$/, Exp], //uhoh\n ],\n i: [\n [/.[oau][wvl]ski$/, Last], //polish (male)\n ],\n k: [\n [/^(k)+$/, Exp], //kkkk\n ],\n l: [\n [/.[gl]ial$/, Adj],\n [/.[^aeiou]ful$/, Adj],\n [/.[nrtumcd]al$/, Adj],\n [/.[^aeiou][ei]al$/, Adj],\n ],\n m: [\n [/.[^aeiou]ium$/, Sing],\n [/[^aeiou]ism$/, Sing],\n [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm\n [/^\\d+ ?[ap]m$/, 'Date'],\n ],\n n: [\n [/.[lsrnpb]ian$/, Adj],\n [/[^aeiou]ician$/, Actor],\n [/[aeiou][ktrp]in$/, 'Gerund'], // 'cookin', 'hootin'\n ],\n o: [\n [/^no+$/, Exp], //noooo\n [/^(yo)+$/, Exp], //yoyo\n [/^woo+[pt]?$/, Exp], //woo\n ],\n r: [\n [/.[bdfklmst]ler$/, 'Noun'],\n [/.[ilk]er$/, 'Comparative'],\n [/[aeiou][pns]er$/, Sing],\n [/[^i]fer$/, Inf],\n [/.[^aeiou][ao]pher$/, Actor],\n ],\n t: [\n [/.[di]est$/, 'Superlative'],\n [/.[icldtgrv]ent$/, Adj],\n [/[aeiou].*ist$/, Adj],\n [/^[a-z]et$/, Verb],\n ],\n s: [\n [/.[rln]ates$/, Pres],\n [/.[^z]ens$/, Verb],\n [/.[lstrn]us$/, Sing],\n [/.[aeiou]sks$/, Pres], //masks\n [/.[aeiou]kes$/, Pres], //bakes\n [/[aeiou][^aeiou]is$/, Sing],\n [/[a-z]\\'s$/, Noun],\n [/^yes+$/, Exp], //yessss\n ],\n v: [\n [/.[^aeiou][ai][kln]ov$/, Last], //east-europe\n ],\n y: [\n [/.[cts]hy$/, Adj],\n [/.[st]ty$/, Adj],\n [/.[gk]y$/, Adj],\n [/.[tnl]ary$/, Adj],\n [/.[oe]ry$/, Sing],\n [/[rdntkbhs]ly$/, Adverb],\n [/...lly$/, Adverb],\n [/[bszmp]{2}y$/, Adj],\n [/.(gg|bb|zz)ly$/, Adj],\n [/.[aeiou]my$/, Adj],\n [/[ea]{2}zy$/, Adj],\n [/.[^aeiou]ity$/, Sing],\n ],\n}\n","//just a foolish lookup of known suffixes\nconst Adj = 'Adjective'\nconst Inf = 'Infinitive'\nconst Pres = 'PresentTense'\nconst Sing = 'Singular'\nconst Past = 'PastTense'\nconst Avb = 'Adverb'\nconst Plrl = 'Plural'\nconst Actor = 'Actor'\nconst Vb = 'Verb'\nconst Noun = 'Noun'\nconst Last = 'LastName'\nconst Modal = 'Modal'\n\n// find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup\nmodule.exports = [\n null, //0\n null, //1\n {\n //2-letter\n ea: Sing,\n ia: Noun,\n ic: Adj,\n ly: Avb,\n \"'n\": Vb,\n \"'t\": Vb,\n },\n {\n //3-letter\n oed: Past,\n ued: Past,\n xed: Past,\n\n ' so': Avb,\n \"'ll\": Modal,\n \"'re\": 'Copula',\n azy: Adj,\n end: Vb,\n ped: Past,\n ffy: Adj,\n ify: Inf,\n ing: 'Gerund', //likely to be converted to Adj after lexicon pass\n ize: Inf,\n lar: Adj,\n mum: Adj,\n nes: Pres,\n nny: Adj,\n oid: Adj,\n ous: Adj,\n que: Adj,\n rmy: Adj,\n rol: Sing,\n sis: Sing,\n zes: Pres,\n },\n {\n //4-letter\n amed: Past,\n aped: Past,\n ched: Past,\n lked: Past,\n nded: Past,\n cted: Past,\n dged: Past,\n\n akis: Last, //greek\n cede: Inf,\n chuk: Last, //east-europe\n czyk: Last, //polish (male)\n ects: Pres,\n ends: Vb,\n enko: Last, //east-europe\n ette: Sing,\n fies: Pres,\n fore: Avb,\n gate: Inf,\n gone: Adj,\n ices: Plrl,\n ints: Plrl,\n ions: Plrl,\n less: Avb,\n llen: Adj,\n made: Adj,\n nsen: Last, //norway\n oses: Pres,\n ould: Modal,\n some: Adj,\n sson: Last, //swedish male\n tage: Inf,\n teen: 'Value',\n tion: Sing,\n tive: Adj,\n tors: Noun,\n vice: Sing,\n },\n {\n //5-letter\n tized: Past,\n urned: Past,\n eased: Past,\n\n ances: Plrl,\n bound: Adj,\n ettes: Plrl,\n fully: Avb,\n ishes: Pres,\n ities: Plrl,\n marek: Last, //polish (male)\n nssen: Last, //norway\n ology: Noun,\n ports: Plrl,\n rough: Adj,\n tches: Pres,\n tieth: 'Ordinal',\n tures: Plrl,\n wards: Avb,\n where: Avb,\n },\n {\n //6-letter\n auskas: Last, //lithuania\n keeper: Actor,\n logist: Actor,\n teenth: 'Value',\n },\n {\n //7-letter\n opoulos: Last, //greek\n sdottir: Last, //swedish female\n },\n]\n","const endsWith = require('./data/endsWith')\nconst suffixMap = require('./data/suffixMap')\n\nconst endRegexs = function(term, world) {\n let str = term.clean\n let char = str[str.length - 1]\n if (endsWith.hasOwnProperty(char) === true) {\n let regs = endsWith[char]\n for (let r = 0; r < regs.length; r += 1) {\n if (regs[r][0].test(str) === true) {\n term.tagSafe(regs[r][1], `endReg ${char} #${r}`, world)\n break\n }\n }\n }\n}\n\n//sweep-through all suffixes\nconst knownSuffixes = function(term, world) {\n const len = term.clean.length\n let max = 7\n if (len <= max) {\n max = len - 1\n }\n for (let i = max; i > 1; i -= 1) {\n let str = term.clean.substr(len - i, len)\n if (suffixMap[str.length].hasOwnProperty(str) === true) {\n let tag = suffixMap[str.length][str]\n term.tagSafe(tag, 'suffix -' + str, world)\n break\n }\n }\n}\n\n//all-the-way-down!\nconst checkRegex = function(term, world) {\n knownSuffixes(term, world)\n endRegexs(term, world)\n}\nmodule.exports = checkRegex\n","//just some of the most common emoticons\n//faster than\n//http://stackoverflow.com/questions/28077049/regex-matching-emoticons\nmodule.exports = {\n ':(': true,\n ':)': true,\n ':P': true,\n ':p': true,\n ':O': true,\n ':3': true,\n ':|': true,\n ':/': true,\n ':\\\\': true,\n ':$': true,\n ':*': true,\n ':@': true,\n ':-(': true,\n ':-)': true,\n ':-P': true,\n ':-p': true,\n ':-O': true,\n ':-3': true,\n ':-|': true,\n ':-/': true,\n ':-\\\\': true,\n ':-$': true,\n ':-*': true,\n ':-@': true,\n ':^(': true,\n ':^)': true,\n ':^P': true,\n ':^p': true,\n ':^O': true,\n ':^3': true,\n ':^|': true,\n ':^/': true,\n ':^\\\\': true,\n ':^$': true,\n ':^*': true,\n ':^@': true,\n '):': true,\n '(:': true,\n '$:': true,\n '*:': true,\n ')-:': true,\n '(-:': true,\n '$-:': true,\n '*-:': true,\n ')^:': true,\n '(^:': true,\n '$^:': true,\n '*^:': true,\n '<3': true,\n ' {\n if (raw.charAt(0) === ':') {\n //end comma can be last or second-last ':haircut_tone3:‍♀️'\n if (raw.match(/:.?$/) === null) {\n return false\n }\n //ensure no spaces\n if (raw.match(' ')) {\n return false\n }\n //reasonably sized\n if (raw.length > 35) {\n return false\n }\n return true\n }\n return false\n}\n\n//check against emoticon whitelist\nconst isEmoticon = str => {\n str = str.replace(/^[:;]/, ':') //normalize the 'eyes'\n return emoticon.hasOwnProperty(str)\n}\n\nconst tagEmoji = (term, world) => {\n let raw = term.pre + term.text + term.post\n raw = raw.trim()\n //dont double-up on ending periods\n raw = raw.replace(/[.!?,]$/, '')\n //test for :keyword: emojis\n if (isCommaEmoji(raw) === true) {\n term.tag('Emoji', 'comma-emoji', world)\n term.text = raw\n term.pre = term.pre.replace(':', '')\n term.post = term.post.replace(':', '')\n }\n //test for unicode emojis\n if (term.text.match(emojiReg)) {\n term.tag('Emoji', 'unicode-emoji', world)\n term.text = raw\n }\n //test for emoticon ':)' emojis\n if (isEmoticon(raw) === true) {\n term.tag('Emoticon', 'emoticon-emoji', world)\n term.text = raw\n }\n}\n\nmodule.exports = tagEmoji\n","const steps = {\n lexicon: require('./01-lexicon'),\n punctuation: require('./02-punctuation'),\n regex: require('./03-prefixes'),\n suffix: require('./04-suffixes'),\n emoji: require('./05-emoji'),\n}\n\n//'lookups' look at a term by itself\nconst lookups = function(doc, terms) {\n let world = doc.world\n //our list of known-words\n steps.lexicon(terms, world)\n\n //try these other methods\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //or maybe some helpful punctuation\n steps.punctuation(terms, i, world)\n //mostly prefix checks\n steps.regex(term, world)\n //maybe we can guess\n steps.suffix(term, world)\n //emoji and emoticons\n steps.emoji(term, world)\n }\n return doc\n}\nmodule.exports = lookups\n","//markov-like stats about co-occurance, for hints about unknown terms\n//basically, a little-bit better than the noun-fallback\n//just top n-grams from nlp tags, generated from nlp-corpus\n\n//after this word, here's what happens usually\nlet afterThisWord = {\n i: 'Verb', //44% //i walk..\n first: 'Noun', //50% //first principles..\n it: 'Verb', //33%\n there: 'Verb', //35%\n not: 'Verb', //33%\n because: 'Noun', //31%\n if: 'Noun', //32%\n but: 'Noun', //26%\n who: 'Verb', //40%\n this: 'Noun', //37%\n his: 'Noun', //48%\n when: 'Noun', //33%\n you: 'Verb', //35%\n very: 'Adjective', // 39%\n old: 'Noun', //51%\n never: 'Verb', //42%\n before: 'Noun', //28%\n}\n\n//in advance of this word, this is what happens usually\nlet beforeThisWord = {\n there: 'Verb', //23% // be there\n me: 'Verb', //31% //see me\n man: 'Adjective', // 80% //quiet man\n only: 'Verb', //27% //sees only\n him: 'Verb', //32% //show him\n were: 'Noun', //48% //we were\n took: 'Noun', //38% //he took\n himself: 'Verb', //31% //see himself\n went: 'Noun', //43% //he went\n who: 'Noun', //47% //person who\n jr: 'Person',\n}\n\n//following this POS, this is likely\nlet afterThisPOS = {\n Adjective: 'Noun', //36% //blue dress\n Possessive: 'Noun', //41% //his song\n Determiner: 'Noun', //47%\n Adverb: 'Verb', //20%\n Pronoun: 'Verb', //40%\n Value: 'Noun', //47%\n Ordinal: 'Noun', //53%\n Modal: 'Verb', //35%\n Superlative: 'Noun', //43%\n Demonym: 'Noun', //38%\n Honorific: 'Person', //\n}\n\n//in advance of this POS, this is likely\nlet beforeThisPOS = {\n Copula: 'Noun', //44% //spencer is\n PastTense: 'Noun', //33% //spencer walked\n Conjunction: 'Noun', //36%\n Modal: 'Noun', //38%\n Pluperfect: 'Noun', //40%\n PerfectTense: 'Verb', //32%\n}\nmodule.exports = {\n beforeThisWord: beforeThisWord,\n afterThisWord: afterThisWord,\n\n beforeThisPos: beforeThisPOS,\n afterThisPos: afterThisPOS,\n}\n","const markov = require('./data/markov')\nconst afterKeys = Object.keys(markov.afterThisPos)\nconst beforeKeys = Object.keys(markov.beforeThisPos)\n\nconst checkNeighbours = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n //do we still need a tag?\n if (term.isKnown() === true) {\n continue\n }\n //ok, this term needs a tag.\n //look at previous word for clues..\n let lastTerm = terms[i - 1]\n if (lastTerm) {\n // 'foobar term'\n if (markov.afterThisWord.hasOwnProperty(lastTerm.clean) === true) {\n let tag = markov.afterThisWord[lastTerm.clean]\n term.tag(tag, 'after-' + lastTerm.clean, world)\n continue\n }\n // 'Tag term'\n // (look at previous POS tags for clues..)\n let foundTag = afterKeys.find(tag => lastTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.afterThisPos[foundTag]\n term.tag(tag, 'after-' + foundTag, world)\n continue\n }\n }\n\n //look at next word for clues..\n let nextTerm = terms[i + 1]\n if (nextTerm) {\n // 'term foobar'\n if (markov.beforeThisWord.hasOwnProperty(nextTerm.clean) === true) {\n let tag = markov.beforeThisWord[nextTerm.clean]\n term.tag(tag, 'before-' + nextTerm.clean, world)\n continue\n }\n // 'term Tag'\n // (look at next POS tags for clues..)\n let foundTag = beforeKeys.find(tag => nextTerm.tags[tag])\n if (foundTag !== undefined) {\n let tag = markov.beforeThisPos[foundTag]\n term.tag(tag, 'before-' + foundTag, world)\n continue\n }\n }\n }\n}\nmodule.exports = checkNeighbours\n","const titleCase = /^[A-Z][a-z'\\u00C0-\\u00FF]/\nconst hasNumber = /[0-9]/\n\n/** look for any grammar signals based on capital/lowercase */\nconst checkCase = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 1; i < terms.length; i++) {\n const term = terms[i]\n if (titleCase.test(term.text) === true && hasNumber.test(term.text) === false) {\n term.tag('ProperNoun', 'titlecase-noun', world)\n }\n }\n })\n}\nmodule.exports = checkCase\n","const hasPrefix = /^(re|un)-?[a-z\\u00C0-\\u00FF]/\nconst prefix = /^(re|un)-?/\n\n/** check 'rewatch' in lexicon as 'watch' */\nconst checkPrefix = function(terms, world) {\n let lex = world.words\n terms.forEach(term => {\n // skip if we have a good tag already\n if (term.isKnown() === true) {\n return\n }\n //does it start with 'un|re'\n if (hasPrefix.test(term.clean) === true) {\n // look for the root word in the lexicon:\n let stem = term.clean.replace(prefix, '')\n if (stem && stem.length > 3 && lex[stem] !== undefined && lex.hasOwnProperty(stem) === true) {\n term.tag(lex[stem], 'stem-' + stem, world)\n }\n }\n })\n}\nmodule.exports = checkPrefix\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(^v)ies$/i,\n /ises$/i,\n /ives$/i,\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /(buffal|tomat|tornad)oes$/i,\n /(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,\n /(vert|ind|cort)ices$/i,\n /(matr|append)ices$/i,\n /(x|ch|ss|sh|s|z|o)es$/i,\n /is$/i,\n /men$/i,\n /news$/i,\n /.tia$/i,\n /(^f)ves$/i,\n /(lr)ves$/i,\n /(^aeiouy|qu)ies$/i,\n /(m|l)ice$/i,\n /(cris|ax|test)es$/i,\n /(alias|status)es$/i,\n /ics$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /s[aeiou]+ns$/i, // sans, siens\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","//these tags don't have plurals\nconst noPlurals = ['Uncountable', 'Pronoun', 'Place', 'Value', 'Person', 'Month', 'WeekDay', 'Holiday']\nconst rules = require('./data/isPlural')\nconst notPlural = [/ss$/, /sis$/, /[^aeiou][uo]s$/, /'s$/]\nconst notSingular = [/i$/, /ae$/]\n\n/** turn nouns into singular/plural */\nconst checkPlural = function(t, world) {\n if (t.tags.Noun && !t.tags.Acronym) {\n let str = t.clean\n //skip existing tags, fast\n if (t.tags.Singular || t.tags.Plural) {\n return\n }\n //too short\n if (str.length <= 3) {\n t.tag('Singular', 'short-singular', world)\n return\n }\n //is it impossible to be plural?\n if (noPlurals.find(tag => t.tags[tag])) {\n return\n }\n // isPlural suffix rules\n if (rules.isPlural.find(reg => reg.test(str))) {\n t.tag('Plural', 'plural-rules', world)\n return\n }\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n t.tag('Singular', 'singular-rules', world)\n return\n }\n\n // finally, fallback 'looks plural' rules..\n if (/s$/.test(str) === true) {\n //avoid anything too sketchy to be plural\n if (notPlural.find(reg => reg.test(str))) {\n return\n }\n t.tag('Plural', 'plural-fallback', world)\n return\n }\n //avoid anything too sketchy to be singular\n if (notSingular.find(reg => reg.test(str))) {\n return\n }\n t.tag('Singular', 'singular-fallback', world)\n }\n}\nmodule.exports = checkPlural\n","//nouns that also signal the title of an unknown organization\n//todo remove/normalize plural forms\nconst orgWords = [\n 'academy',\n 'administration',\n 'agence',\n 'agences',\n 'agencies',\n 'agency',\n 'airlines',\n 'airways',\n 'army',\n 'assoc',\n 'associates',\n 'association',\n 'assurance',\n 'authority',\n 'autorite',\n 'aviation',\n 'bank',\n 'banque',\n 'board',\n 'boys',\n 'brands',\n 'brewery',\n 'brotherhood',\n 'brothers',\n 'building society',\n 'bureau',\n 'cafe',\n 'caisse',\n 'capital',\n 'care',\n 'cathedral',\n 'center',\n 'central bank',\n 'centre',\n 'chemicals',\n 'choir',\n 'chronicle',\n 'church',\n 'circus',\n 'clinic',\n 'clinique',\n 'club',\n 'co',\n 'coalition',\n 'coffee',\n 'collective',\n 'college',\n 'commission',\n 'committee',\n 'communications',\n 'community',\n 'company',\n 'comprehensive',\n 'computers',\n 'confederation',\n 'conference',\n 'conseil',\n 'consulting',\n 'containers',\n 'corporation',\n 'corps',\n 'corp',\n 'council',\n 'crew',\n 'daily news',\n 'data',\n 'departement',\n 'department',\n 'department store',\n 'departments',\n 'design',\n 'development',\n 'directorate',\n 'division',\n 'drilling',\n 'education',\n 'eglise',\n 'electric',\n 'electricity',\n 'energy',\n 'ensemble',\n 'enterprise',\n 'enterprises',\n 'entertainment',\n 'estate',\n 'etat',\n 'evening news',\n 'faculty',\n 'federation',\n 'financial',\n 'fm',\n 'foundation',\n 'fund',\n 'gas',\n 'gazette',\n 'girls',\n 'government',\n 'group',\n 'guild',\n 'health authority',\n 'herald',\n 'holdings',\n 'hospital',\n 'hotel',\n 'hotels',\n 'inc',\n 'industries',\n 'institut',\n 'institute',\n 'institute of technology',\n 'institutes',\n 'insurance',\n 'international',\n 'interstate',\n 'investment',\n 'investments',\n 'investors',\n 'journal',\n 'laboratory',\n 'labs',\n // 'law',\n 'liberation army',\n 'limited',\n 'local authority',\n 'local health authority',\n 'machines',\n 'magazine',\n 'management',\n 'marine',\n 'marketing',\n 'markets',\n 'media',\n 'memorial',\n 'mercantile exchange',\n 'ministere',\n 'ministry',\n 'military',\n 'mobile',\n 'motor',\n 'motors',\n 'musee',\n 'museum',\n // 'network',\n 'news',\n 'news service',\n 'observatory',\n 'office',\n 'oil',\n 'optical',\n 'orchestra',\n 'organization',\n 'partners',\n 'partnership',\n // 'party',\n \"people's party\",\n 'petrol',\n 'petroleum',\n 'pharmacare',\n 'pharmaceutical',\n 'pharmaceuticals',\n 'pizza',\n 'plc',\n 'police',\n 'polytechnic',\n 'post',\n 'power',\n 'press',\n 'productions',\n 'quartet',\n 'radio',\n 'regional authority',\n 'regional health authority',\n 'reserve',\n 'resources',\n 'restaurant',\n 'restaurants',\n 'savings',\n 'school',\n 'securities',\n 'service',\n 'services',\n 'social club',\n 'societe',\n 'society',\n 'sons',\n 'standard',\n 'state police',\n 'state university',\n 'stock exchange',\n 'subcommittee',\n 'syndicat',\n 'systems',\n 'telecommunications',\n 'telegraph',\n 'television',\n 'times',\n 'tribunal',\n 'tv',\n 'union',\n 'university',\n 'utilities',\n 'workers',\n]\n\nmodule.exports = orgWords.reduce(function(h, str) {\n h[str] = 'Noun'\n return h\n}, {})\n","let orgWords = require('./data/organizations')\n\n//could this word be an organization\nconst maybeOrg = function(t) {\n //must be a noun\n if (!t.tags.Noun) {\n return false\n }\n //can't be these things\n if (t.tags.Pronoun || t.tags.Comma || t.tags.Possessive) {\n return false\n }\n //must be one of these\n if (t.tags.Organization || t.tags.Acronym || t.tags.Place || t.titleCase()) {\n return true\n }\n return false\n}\n\nconst tagOrgs = function(terms, world) {\n for (let i = 0; i < terms.length; i += 1) {\n let t = terms[i]\n if (orgWords[t.clean] !== undefined && orgWords.hasOwnProperty(t.clean) === true) {\n // look-backward - eg. 'Toronto University'\n let lastTerm = terms[i - 1]\n if (lastTerm !== undefined && maybeOrg(lastTerm) === true) {\n lastTerm.tagSafe('Organization', 'org-word-1', world)\n t.tagSafe('Organization', 'org-word-2', world)\n continue\n }\n //look-forward - eg. University of Toronto\n let nextTerm = terms[i + 1]\n if (nextTerm !== undefined && nextTerm.clean === 'of') {\n if (terms[i + 2] && maybeOrg(terms[i + 2])) {\n t.tagSafe('Organization', 'org-of-word-1', world)\n nextTerm.tagSafe('Organization', 'org-of-word-2', world)\n terms[i + 2].tagSafe('Organization', 'org-of-word-3', world)\n continue\n }\n }\n }\n }\n}\nmodule.exports = tagOrgs\n","const oneLetterAcronym = /^[A-Z]('s|,)?$/\nconst periodSeperated = /([A-Z]\\.){2}[A-Z]?/i\n\nconst oneLetterWord = {\n I: true,\n A: true,\n}\n\nconst isAcronym = function(term, world) {\n let str = term.reduced\n // a known acronym like fbi\n if (term.tags.Acronym) {\n return true\n }\n // if (term.tags.Adverb || term.tags.Verb || term.tags.Value || term.tags.Plural) {\n // return false\n // }\n // known-words, like 'PIZZA' is not an acronym.\n if (world.words[str]) {\n return false\n }\n return term.isAcronym()\n}\n\n// F.B.I., NBC, - but not 'NO COLLUSION'\nconst checkAcronym = function(terms, world) {\n terms.forEach(term => {\n //these are not acronyms\n if (term.tags.RomanNumeral === true) {\n return\n }\n //period-ones F.D.B.\n if (periodSeperated.test(term.text) === true) {\n term.tag('Acronym', 'period-acronym', world)\n }\n //non-period ones are harder\n if (term.isUpperCase() && isAcronym(term, world)) {\n term.tag('Acronym', 'acronym-step', world)\n term.tag('Noun', 'acronym-infer', world)\n } else if (!oneLetterWord.hasOwnProperty(term.text) && oneLetterAcronym.test(term.text)) {\n term.tag('Acronym', 'one-letter-acronym', world)\n term.tag('Noun', 'one-letter-infer', world)\n }\n //if it's a organization,\n if (term.tags.Organization && term.text.length <= 3) {\n term.tag('Acronym', 'acronym-org', world)\n }\n if (term.tags.Organization && term.isUpperCase() && term.text.length <= 6) {\n term.tag('Acronym', 'acronym-org-case', world)\n }\n })\n}\nmodule.exports = checkAcronym\n","const step = {\n neighbours: require('./01-neighbours'),\n case: require('./02-case'),\n stem: require('./03-stem'),\n plural: require('./04-plurals'),\n organizations: require('./05-organizations'),\n acronyms: require('./06-acronyms'),\n}\n//\nconst fallbacks = function(doc, terms) {\n let world = doc.world\n\n // if it's empty, consult it's neighbours, first\n step.neighbours(terms, world)\n\n // is there a case-sensitive clue?\n step.case(doc)\n\n // check 'rewatch' as 'watch'\n step.stem(terms, world)\n\n // ... fallback to a noun!\n terms.forEach(t => {\n if (t.isKnown() === false) {\n t.tag('Noun', 'noun-fallback', doc.world)\n }\n })\n\n // turn 'Foo University' into an Org\n step.organizations(terms, world)\n\n //turn 'FBD' into an acronym\n step.acronyms(terms, world)\n\n //are the nouns singular or plural?\n terms.forEach(t => {\n step.plural(t, doc.world)\n })\n\n return doc\n}\nmodule.exports = fallbacks\n","const hasNegative = /n't$/\n\nconst irregulars = {\n \"won't\": ['will', 'not'],\n wont: ['will', 'not'],\n \"can't\": ['can', 'not'],\n cant: ['can', 'not'],\n cannot: ['can', 'not'],\n \"shan't\": ['should', 'not'],\n dont: ['do', 'not'],\n dun: ['do', 'not'],\n // \"ain't\" is ambiguous for is/was\n}\n\n// either 'is not' or 'are not'\nconst doAint = function(term, phrase) {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let before = terms.slice(0, index)\n //look for the preceding noun\n let noun = before.find(t => {\n return t.tags.Noun\n })\n if (noun && noun.tags.Plural) {\n return ['are', 'not']\n }\n return ['is', 'not']\n}\n\nconst checkNegative = function(term, phrase) {\n //check named-ones\n if (irregulars.hasOwnProperty(term.clean) === true) {\n return irregulars[term.clean]\n }\n //this word needs it's own logic:\n if (term.clean === `ain't` || term.clean === 'aint') {\n return doAint(term, phrase)\n }\n //try it normally\n if (hasNegative.test(term.clean) === true) {\n let main = term.clean.replace(hasNegative, '')\n return [main, 'not']\n }\n return null\n}\nmodule.exports = checkNegative\n","const contraction = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z]{1,2})$/i\n\n//these ones don't seem to be ambiguous\nconst easy = {\n ll: 'will',\n ve: 'have',\n re: 'are',\n m: 'am',\n \"n't\": 'not',\n}\n//\nconst checkApostrophe = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null) {\n return null\n }\n if (easy.hasOwnProperty(parts[2])) {\n return [parts[1], easy[parts[2]]]\n }\n return null\n}\nmodule.exports = checkApostrophe\n","const irregulars = {\n wanna: ['want', 'to'],\n gonna: ['going', 'to'],\n im: ['i', 'am'],\n alot: ['a', 'lot'],\n ive: ['i', 'have'],\n imma: ['I', 'will'],\n\n \"where'd\": ['where', 'did'],\n whered: ['where', 'did'],\n \"when'd\": ['when', 'did'],\n whend: ['when', 'did'],\n // \"how'd\": ['how', 'did'], //'how would?'\n // \"what'd\": ['what', 'did'], //'what would?'\n howd: ['how', 'did'],\n whatd: ['what', 'did'],\n // \"let's\": ['let', 'us'], //too weird\n\n //multiple word contractions\n dunno: ['do', 'not', 'know'],\n brb: ['be', 'right', 'back'],\n gtg: ['got', 'to', 'go'],\n irl: ['in', 'real', 'life'],\n tbh: ['to', 'be', 'honest'],\n imo: ['in', 'my', 'opinion'],\n til: ['today', 'i', 'learned'],\n rn: ['right', 'now'],\n twas: ['it', 'was'],\n '@': ['at'],\n}\n\n//\nconst checkIrregulars = function(term) {\n //check white-list\n if (irregulars.hasOwnProperty(term.clean)) {\n return irregulars[term.clean]\n }\n return null\n}\nmodule.exports = checkIrregulars\n","const hasApostropheS = /([a-z\\u00C0-\\u00FF]+)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]s$/i\n\nconst blacklist = {\n that: true,\n there: true,\n}\nconst isPossessive = (term, pool) => {\n // if we already know it\n if (term.tags.Possessive) {\n return true\n }\n //a pronoun can't be possessive - \"he's house\"\n if (term.tags.Pronoun || term.tags.QuestionWord) {\n return false\n }\n if (blacklist.hasOwnProperty(term.clean)) {\n return false\n }\n //if end of sentence, it is possessive - \"was spencer's\"\n let nextTerm = pool.get(term.next)\n if (!nextTerm) {\n return true\n }\n //a gerund suggests 'is walking'\n if (nextTerm.tags.Verb) {\n //fix 'jamie's bite'\n if (nextTerm.tags.Infinitive) {\n return true\n }\n //fix 'spencer's runs'\n if (nextTerm.tags.PresentTense) {\n return true\n }\n return false\n }\n\n //spencer's house\n if (nextTerm.tags.Noun) {\n return true\n }\n //rocket's red glare\n let twoTerm = pool.get(nextTerm.next)\n if (twoTerm && twoTerm.tags.Noun && !twoTerm.tags.Pronoun) {\n return true\n }\n //othwerwise, an adjective suggests 'is good'\n if (nextTerm.tags.Adjective || nextTerm.tags.Adverb || nextTerm.tags.Verb) {\n return false\n }\n return false\n}\n\nconst isHas = (term, phrase) => {\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 3)\n //look for a past-tense verb\n return after.find(t => {\n return t.tags.PastTense\n })\n}\n\nconst checkPossessive = function(term, phrase, world) {\n //the rest of 's\n let found = term.text.match(hasApostropheS)\n if (found !== null) {\n //spencer's thing vs spencer-is\n if (isPossessive(term, phrase.pool) === true) {\n term.tag('#Possessive', 'isPossessive', world)\n return null\n }\n //'spencer is'\n if (found !== null) {\n if (isHas(term, phrase)) {\n return [found[1], 'has']\n }\n return [found[1], 'is']\n }\n }\n return null\n}\nmodule.exports = checkPossessive\n","const hasPerfect = /[a-z\\u00C0-\\u00FF]'d$/\n\nconst useDid = {\n how: true,\n what: true,\n}\n\n/** split `i'd` into 'i had', or 'i would' */\nconst checkPerfect = function(term, phrase) {\n if (hasPerfect.test(term.clean)) {\n let root = term.clean.replace(/'d$/, '')\n //look at the next few words\n let terms = phrase.terms()\n let index = terms.indexOf(term)\n let after = terms.slice(index + 1, index + 4)\n //is it before a past-tense verb? - 'i'd walked'\n for (let i = 0; i < after.length; i++) {\n let t = after[i]\n if (t.tags.Verb) {\n if (t.tags.PastTense) {\n return [root, 'had']\n }\n //what'd you see\n if (useDid[root] === true) {\n return [root, 'did']\n }\n return [root, 'would']\n }\n }\n //otherwise, 'i'd walk'\n return [root, 'would']\n }\n return null\n}\nmodule.exports = checkPerfect\n","const isRange = /^([0-9]+)[-–—]([0-9]+)$/i\n\n//split '2-4' into '2 to 4'\nconst checkRange = function(term) {\n if (term.tags.PhoneNumber === true) {\n return null\n }\n let parts = term.text.match(isRange)\n if (parts !== null) {\n return [parts[1], 'to', parts[2]]\n }\n return null\n}\nmodule.exports = checkRange\n","const contraction = /^(l|c|d|j|m|n|qu|s|t)[\\u0027\\u0060\\u00B4\\u2018\\u2019\\u201A\\u201B\\u2032\\u2035\\u2039\\u203A]([a-z\\u00C0-\\u00FF]+)$/i\n// basic support for ungendered french contractions\n// not perfect, but better than nothing, to support matching on french text.\n\nconst french = {\n l: 'le', // l'amour\n c: 'ce', // c'est\n d: 'de', // d'amerique\n j: 'je', // j'aime\n m: 'me', // m'appelle\n n: 'ne', // n'est\n qu: 'que', // qu'il\n s: 'se', // s'appelle\n t: 'tu', // t'aime\n}\n\nconst checkFrench = function(term) {\n let parts = term.text.match(contraction)\n if (parts === null || french.hasOwnProperty(parts[1]) === false) {\n return null\n }\n let arr = [french[parts[1]], parts[2]]\n if (arr[0] && arr[1]) {\n return arr\n }\n return null\n}\nmodule.exports = checkFrench\n","const checkLexicon = require('../01-init/01-lexicon')\nconst tokenize = require('../../01-tokenizer')\nconst checkNegative = require('./01-negative')\nconst checkApostrophe = require('./02-simple')\nconst checkIrregulars = require('./03-irregulars')\nconst checkPossessive = require('./04-possessive')\nconst checkPerfect = require('./05-perfectTense')\nconst checkRange = require('./06-ranges')\nconst checkFrench = require('./07-french')\nconst isNumber = /^[0-9]+$/\n\nconst createPhrase = function(found, doc) {\n //create phrase from ['would', 'not']\n let phrase = tokenize(found.join(' '), doc.world, doc.pool())[0]\n //tag it\n let terms = phrase.terms()\n checkLexicon(terms, doc.world)\n //make these terms implicit\n terms.forEach(t => {\n t.implicit = t.text\n t.text = ''\n t.clean = ''\n // remove whitespace for implicit terms\n t.pre = ''\n t.post = ''\n // tag number-ranges\n if (isNumber.test(t.implicit)) {\n t.tags.Number = true\n t.tags.Cardinal = true\n }\n })\n return phrase\n}\n\nconst contractions = function(doc) {\n let world = doc.world\n doc.list.forEach(p => {\n let terms = p.terms()\n for (let i = 0; i < terms.length; i += 1) {\n let term = terms[i]\n let found = checkNegative(term, p)\n found = found || checkApostrophe(term)\n found = found || checkIrregulars(term, p)\n found = found || checkPossessive(term, p, world)\n found = found || checkPerfect(term, p)\n found = found || checkRange(term, p)\n found = found || checkFrench(term, p)\n //add them in\n if (found !== null) {\n let newPhrase = createPhrase(found, doc)\n // keep tag NumberRange, if we had it\n if (p.has('#NumberRange') === true) {\n doc.buildFrom([newPhrase]).tag('NumberRange')\n }\n //set text as contraction\n let firstTerm = newPhrase.terms(0)\n firstTerm.text = term.text\n //grab sub-phrase to remove\n let match = p.buildFrom(term.id, 1, doc.pool())\n match.replace(newPhrase, doc, true)\n }\n }\n })\n return doc\n}\nmodule.exports = contractions\n","const hasWord = function(doc, word) {\n let arr = doc._cache.words[word] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\nconst hasTag = function(doc, tag) {\n let arr = doc._cache.tags[tag] || []\n arr = arr.map(i => doc.list[i])\n return doc.buildFrom(arr)\n}\n\n//mostly pos-corections here\nconst miscCorrection = function(doc) {\n //exactly like\n let m = hasWord(doc, 'like')\n m.match('#Adverb like')\n .notIf('(really|generally|typically|usually|sometimes|often) [like]')\n .tag('Adverb', 'adverb-like')\n\n //the orange.\n m = hasTag(doc, 'Adjective')\n m.match('#Determiner #Adjective$')\n .notIf('(#Comparative|#Superlative)')\n .terms(1)\n .tag('Noun', 'the-adj-1')\n\n // Firstname x (dangerous)\n m = hasTag(doc, 'FirstName')\n m.match('#FirstName (#Noun|@titleCase)')\n .ifNo('^#Possessive')\n .ifNo('#Pronoun')\n .lastTerm()\n .tag('#LastName', 'firstname-noun')\n\n //three trains / one train\n m = hasTag(doc, 'Value')\n m = m.match('#Value #PresentTense')\n if (m.found) {\n if (m.has('(one|1)') === true) {\n m.terms(1).tag('Singular', 'one-presentTense')\n } else {\n m.terms(1).tag('Plural', 'value-presentTense')\n }\n }\n\n // well i've been...\n doc.match('^(well|so|okay)').tag('Expression', 'well-')\n\n //been walking\n m = hasTag(doc, 'Gerund')\n m.match(`(be|been) (#Adverb|not)+? #Gerund`)\n .not('#Verb$')\n .tag('Auxiliary', 'be-walking')\n\n // directive verb - 'use reverse'\n doc\n .match('(try|use|attempt|build|make) #Verb')\n .ifNo('(@hasComma|#Negative|#Copula|will|be)')\n .lastTerm()\n .tag('#Noun', 'do-verb')\n\n //possessives\n //'her match' vs 'let her match'\n m = hasTag(doc, 'Possessive')\n m = m.match('#Possessive [#Infinitive]', 0)\n if (!m.lookBehind('(let|made|make|force|ask)').found) {\n m.tag('Noun', 'her-match')\n }\n\n return doc\n}\n\nmodule.exports = miscCorrection\n","const unique = function(arr) {\n let obj = {}\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = true\n }\n return Object.keys(obj)\n}\nmodule.exports = unique\n","// order matters\nconst list = [\n // ==== Mutliple tags ====\n { match: 'too much', tag: 'Adverb Adjective', reason: 'bit-4' },\n // u r cool\n { match: 'u r', tag: 'Pronoun Copula', reason: 'u r' },\n //sometimes adverbs - 'pretty good','well above'\n {\n match: '#Copula (pretty|dead|full|well) (#Adjective|#Noun)',\n tag: '#Copula #Adverb #Adjective',\n reason: 'sometimes-adverb',\n },\n\n //walking is cool\n { match: '[#Gerund] #Adverb? not? #Copula', group: 0, tag: 'Activity', reason: 'gerund-copula' },\n //walking should be fun\n { match: '[#Gerund] #Modal', group: 0, tag: 'Activity', reason: 'gerund-modal' },\n\n //swear-words as non-expression POS\n { match: 'holy (shit|fuck|hell)', tag: 'Expression', reason: 'swears-expression' },\n //Aircraft designer\n { match: '#Noun #Actor', tag: 'Actor', reason: 'thing-doer' },\n { match: '#Conjunction [u]', group: 0, tag: 'Pronoun', reason: 'u-pronoun-2' },\n //'u' as pronoun\n { match: '[u] #Verb', group: 0, tag: 'Pronoun', reason: 'u-pronoun-1' },\n\n // ==== Determiners ====\n { match: '#Noun [(who|whom)]', group: 0, tag: 'Determiner', reason: 'captain-who' },\n //that car goes\n { match: 'that #Noun [#Verb]', group: 0, tag: 'Determiner', reason: 'that-determiner' },\n { match: 'a bit much', tag: 'Determiner Adverb Adjective', reason: 'bit-3' },\n\n // ==== Propositions ====\n //all students\n { match: '#Verb #Adverb? #Noun [(that|which)]', group: 0, tag: 'Preposition', reason: 'that-prep' },\n //work, which has been done.\n { match: '@hasComma [which] (#Pronoun|#Verb)', group: 0, tag: 'Preposition', reason: 'which-copula' },\n { match: 'just [like]', group: 0, tag: 'Preposition', reason: 'like-preposition' },\n //folks like her\n { match: '#Noun [like] #Noun', group: 0, tag: 'Preposition', reason: 'noun-like' },\n //fix for busted-up phrasalVerbs\n { match: '#Noun [#Particle]', group: 0, tag: 'Preposition', reason: 'repair-noPhrasal' },\n\n // ==== Conditions ====\n // had he survived,\n { match: '[had] #Noun+ #PastTense', group: 0, tag: 'Condition', reason: 'had-he' },\n // were he to survive\n { match: '[were] #Noun+ to #Infinitive', group: 0, tag: 'Condition', reason: 'were-he' },\n\n // ==== Questions ====\n //the word 'how'\n { match: '^how', tag: 'QuestionWord', reason: 'how-question' },\n { match: '[how] (#Determiner|#Copula|#Modal|#PastTense)', group: 0, tag: 'QuestionWord', reason: 'how-is' },\n // //the word 'which'\n { match: '^which', tag: 'QuestionWord', reason: 'which-question' },\n { match: '[which] . (#Noun)+ #Pronoun', group: 0, tag: 'QuestionWord', reason: 'which-question2' },\n { match: 'which', tag: 'QuestionWord', reason: 'which-question3' },\n\n // ==== Conjunctions ====\n { match: '[so] #Noun', group: 0, tag: 'Conjunction', reason: 'so-conj' },\n //how he is driving\n {\n match: '[(who|what|where|why|how|when)] #Noun #Copula #Adverb? (#Verb|#Adjective)',\n group: 0,\n tag: 'Conjunction',\n reason: 'how-he-is-x',\n },\n {\n match: '[(who|what|where|why|how|when)] #Noun #Adverb? #Infinitive not? #Gerund',\n group: 0,\n tag: 'Conjunction',\n reason: 'when i go fishing',\n },\n]\n\nmodule.exports = list\n","//Dates: 'june' or 'may'\nconst dates = '(april|june|may|jan|august|eve)'\n\nlet list = [\n // ==== Holiday ====\n { match: '#Holiday (day|eve)', tag: 'Holiday', reason: 'holiday-day' }, // the captain who\n\n // ==== WeekDay ====\n // sun the 5th\n { match: '[sun] the #Ordinal', tag: 'WeekDay', reason: 'sun-the-5th' },\n //sun feb 2\n { match: '[sun] #Date', group: 0, tag: 'WeekDay', reason: 'sun-feb' },\n //1pm next sun\n { match: '#Date (on|this|next|last|during)? [sun]', group: 0, tag: 'WeekDay', reason: '1pm-sun' },\n //this sat\n { match: `(in|by|before|during|on|until|after|of|within|all) [sat]`, group: 0, tag: 'WeekDay', reason: 'sat' },\n //sat november\n { match: '[sat] #Date', group: 0, tag: 'WeekDay', reason: 'sat-feb' },\n\n // ==== Month ====\n //all march\n { match: `#Preposition [(march|may)]`, group: 0, tag: 'Month', reason: 'in-month' },\n //this march\n { match: `this [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `next [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n { match: `last [(march|may)]`, group: 0, tag: 'Month', reason: 'this-month' },\n // march 5th\n { match: `[(march|may)] the? #Value`, group: 0, tag: 'Month', reason: 'march-5th' },\n // 5th of march\n { match: `#Value of? [(march|may)]`, group: 0, tag: 'Month', reason: '5th-of-march' },\n // march and feb\n { match: `[(march|may)] .? #Date`, group: 0, tag: 'Month', reason: 'march-and-feb' },\n // feb to march\n { match: `#Date .? [(march|may)]`, group: 0, tag: 'Month', reason: 'feb-and-march' },\n //quickly march\n { match: `#Adverb [(march|may)]`, group: 0, tag: 'Infinitive', reason: 'quickly-march' },\n //march quickly\n { match: `(march|may) [#Adverb]`, group: 0, tag: 'Infinitive', reason: 'march-quickly' },\n\n //5th of March\n { match: '#Value of #Month', tag: 'Date', reason: 'value-of-month' },\n //5 March\n { match: '#Cardinal #Month', tag: 'Date', reason: 'cardinal-month' },\n //march 5 to 7\n { match: '#Month #Value to #Value', tag: 'Date', reason: 'value-to-value' },\n //march the 12th\n { match: '#Month the #Value', tag: 'Date', reason: 'month-the-value' },\n //june 7\n { match: '(#WeekDay|#Month) #Value', tag: 'Date', reason: 'date-value' },\n //7 june\n { match: '#Value (#WeekDay|#Month)', tag: 'Date', reason: 'value-date' },\n //may twenty five\n { match: '(#TextValue && #Date) #TextValue', tag: 'Date', reason: 'textvalue-date' },\n\n // in june\n { match: `in [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `during [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `on [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `by [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `before [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n { match: `#Date [${dates}]`, group: 0, tag: 'Date', reason: 'in-june' },\n // june 1992\n { match: `${dates} #Value`, tag: 'Date', reason: 'june-5th' },\n { match: `${dates} #Date`, tag: 'Date', reason: 'june-5th' },\n // June Smith\n { match: `${dates} #ProperNoun`, tag: 'Person', reason: 'june-smith', safe: true },\n // june m. Cooper\n { match: `${dates} #Acronym? (#ProperNoun && !#Month)`, tag: 'Person', reason: 'june-smith-jr' },\n]\n\nmodule.exports = list\n","module.exports = [\n // ==== Plural ====\n //there are reasons\n { match: 'there (are|were) #Adjective? [#PresentTense]', group: 0, tag: 'Plural', reason: 'there-are' },\n\n // ==== Singular ====\n //the sun\n { match: '#Determiner [sun]', group: 0, tag: 'Singular', reason: 'the-sun' },\n //did a 900, paid a 20\n { match: '#Verb (a|an) [#Value]', group: 0, tag: 'Singular', reason: 'did-a-value' },\n //'the can'\n { match: '#Determiner [(can|will|may)]', group: 0, tag: 'Singular', reason: 'the can' },\n // ==== Possessive ====\n //spencer kelly's\n { match: '#FirstName #Acronym? (#Possessive && #LastName)', tag: 'Possessive', reason: 'name-poss' },\n //Super Corp's fundraiser\n { match: '#Organization+ #Possessive', tag: 'Possessive', reason: 'org-possessive' },\n //Los Angeles's fundraiser\n { match: '#Place+ #Possessive', tag: 'Possessive', reason: 'place-possessive' },\n\n //big dreams, critical thinking\n { match: '#Adjective [#PresentTense]', group: 0, tag: 'Noun', reason: 'adj-presentTense' },\n //his fine\n { match: '(his|her|its) [#Adjective]', group: 0, tag: 'Noun', reason: 'his-fine' },\n //some pressing issues\n { match: 'some [#Verb] #Plural', group: 0, tag: 'Noun', reason: 'determiner6' },\n //'more' is not always an adverb\n { match: 'more #Noun', tag: 'Noun', reason: 'more-noun' },\n { match: '(#Noun && @hasComma) #Noun (and|or) [#PresentTense]', group: 0, tag: 'Noun', reason: 'noun-list' }, //3 feet\n { match: '(right|rights) of .', tag: 'Noun', reason: 'right-of' }, // a bit\n { match: 'a [bit]', group: 0, tag: 'Noun', reason: 'bit-2' },\n\n //running-a-show\n { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' },\n //the nice swim\n { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' },\n // the truly nice swim\n { match: '(the|this|those|these) #Adverb #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'determiner4' },\n //the orange is\n { match: '#Determiner [#Adjective] (#Copula|#PastTense|#Auxiliary)', group: 0, tag: 'Noun', reason: 'the-adj-2' },\n // a stream runs\n { match: '(the|this|a|an) [#Infinitive] #Adverb? #Verb', group: 0, tag: 'Noun', reason: 'determiner5' },\n //the test string\n { match: '#Determiner [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'determiner7' },\n //by a bear.\n { match: '#Determiner #Adjective [#Infinitive]$', group: 0, tag: 'Noun', reason: 'a-inf' },\n //the wait to vote\n { match: '(the|this) [#Verb] #Preposition .', group: 0, tag: 'Noun', reason: 'determiner1' },\n //a sense of\n { match: '#Determiner [#Verb] of', group: 0, tag: 'Noun', reason: 'the-verb-of' },\n //the threat of force\n { match: '#Determiner #Noun of [#Verb]', group: 0, tag: 'Noun', reason: 'noun-of-noun' },\n //the western line\n {\n match: '#Determiner [(western|eastern|northern|southern|central)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'western-line',\n },\n\n //her polling\n { match: '#Possessive [#Gerund]', group: 0, tag: 'Noun', reason: 'her-polling' },\n //her fines\n { match: '(his|her|its) [#PresentTense]', group: 0, tag: 'Noun', reason: 'its-polling' },\n\n //linear algebra\n {\n match: '(#Determiner|#Value) [(linear|binary|mobile|lexical|technical|computer|scientific|formal)] #Noun',\n group: 0,\n tag: 'Noun',\n reason: 'technical-noun',\n },\n // walk the walk\n { match: '(the|those|these) #Adjective? [#Infinitive]', group: 0, tag: 'Noun', reason: 'det-inf' },\n { match: '(the|those|these) #Adjective? [#PresentTense]', group: 0, tag: 'Noun', reason: 'det-pres' },\n { match: '(the|those|these) #Adjective? [#PastTense]', group: 0, tag: 'Noun', reason: 'det-past' },\n\n //air-flow\n { match: '(#Noun && @hasHyphen) #Verb', tag: 'Noun', reason: 'hyphen-verb' },\n //is no walk\n { match: 'is no [#Verb]', group: 0, tag: 'Noun', reason: 'is-no-verb' },\n //different views than\n { match: '[#Verb] than', group: 0, tag: 'Noun', reason: 'correction' },\n // goes to sleep\n { match: '(go|goes|went) to [#Infinitive]', group: 0, tag: 'Noun', reason: 'goes-to-verb' },\n //a great run\n { match: '(a|an) #Adjective [(#Infinitive|#PresentTense)]', tag: 'Noun', reason: 'a|an2' },\n //a tv show\n { match: '(a|an) #Noun [#Infinitive]', group: 0, tag: 'Noun', reason: 'a-noun-inf' },\n //do so\n { match: 'do [so]', group: 0, tag: 'Noun', reason: 'so-noun' },\n //is mark hughes\n { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' },\n //\n { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' },\n //a close\n { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' },\n // what the hell\n { match: '#Determiner [(shit|damn|hell)]', group: 0, tag: 'Noun', reason: 'swears-noun' },\n]\n","const adjectives = '(misty|rusty|dusty|rich|randy)'\nlet list = [\n // all fell apart\n { match: '[all] #Determiner? #Noun', group: 0, tag: 'Adjective', reason: 'all-noun' },\n // very rusty\n { match: `#Adverb [${adjectives}]`, group: 0, tag: 'Adjective', reason: 'really-rich' },\n // rusty smith\n { match: `${adjectives} #Person`, tag: 'Person', reason: 'randy-smith' },\n // rusty a. smith\n { match: `${adjectives} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rusty-smith' },\n //sometimes not-adverbs\n { match: '#Copula [(just|alone)]$', group: 0, tag: 'Adjective', reason: 'not-adverb' },\n //jack is guarded\n { match: '#Singular is #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'is-filled' },\n // smoked poutine is\n { match: '[#PastTense] #Singular is', group: 0, tag: 'Adjective', reason: 'smoked-poutine' },\n // baked onions are\n { match: '[#PastTense] #Plural are', group: 0, tag: 'Adjective', reason: 'baked-onions' },\n //a staggering cost\n { match: '(a|an) [#Gerund]', group: 0, tag: 'Adjective', reason: 'a|an' },\n // is f*ed up\n { match: '#Copula [fucked up?]', tag: 'Adjective', reason: 'swears-adjective' },\n //jack seems guarded\n { match: '#Singular (seems|appears) #Adverb? [#PastTense$]', group: 0, tag: 'Adjective', reason: 'seems-filled' },\n]\n\nmodule.exports = list\n","module.exports = [\n //still good\n { match: '[still] #Adjective', group: 0, tag: 'Adverb', reason: 'still-advb' },\n //still make\n { match: '[still] #Verb', group: 0, tag: 'Adverb', reason: 'still-verb' },\n // so hot\n { match: '[so] #Adjective', group: 0, tag: 'Adverb', reason: 'so-adv' },\n // all singing\n { match: '[all] #Verb', group: 0, tag: 'Adverb', reason: 'all-verb' },\n // sing like an angel\n { match: '#Verb [like]', group: 0, tag: 'Adverb', reason: 'verb-like' },\n //barely even walk\n { match: '(barely|hardly) even', tag: 'Adverb', reason: 'barely-even' },\n //cheering hard - dropped -ly's\n { match: '#PresentTense [(hard|quick|long|bright|slow)]', group: 0, tag: 'Adverb', reason: 'lazy-ly' },\n // much appreciated\n { match: '[much] #Adjective', group: 0, tag: 'Adverb', reason: 'bit-1' },\n]\n","module.exports = [\n // ==== PhoneNumber ====\n //1 800 ...\n { match: '1 #Value #PhoneNumber', tag: 'PhoneNumber', reason: '1-800-Value' },\n //(454) 232-9873\n { match: '#NumericValue #PhoneNumber', tag: 'PhoneNumber', reason: '(800) PhoneNumber' },\n\n // ==== Currency ====\n { match: '#Demonym #Currency', tag: 'Currency', reason: 'demonym-currency' },\n // ==== Ordinal ====\n { match: '[second] #Noun', group: 0, tag: 'Ordinal', reason: 'second-noun' },\n // ==== Money ====\n { match: '#Value+ #Currency', tag: 'Money', reason: '15 usd' },\n // ==== Unit ====\n //5 yan\n { match: '#Value+ [#Currency]', group: 0, tag: 'Unit', reason: '5-yan' },\n { match: '#Value [(foot|feet)]', group: 0, tag: 'Unit', reason: 'foot-unit' },\n\n //minus 7\n { match: '(minus|negative) #Value', tag: 'Value', reason: 'minus-value' },\n //5 kg.\n { match: '#Value #Abbreviation', tag: 'Value', reason: 'value-abbr' },\n //seven point five\n { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' },\n // ten grand\n { match: '#Value grand', tag: 'Value', reason: 'value-grand' },\n //quarter million\n { match: '#Determiner [(half|quarter)] #Ordinal', group: 0, tag: 'Value', reason: 'half-ordinal' },\n { match: 'a #Value', tag: 'Value', reason: 'a-value' },\n\n // thousand and two\n {\n match: `(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value`,\n tag: 'Value',\n reason: 'magnitude-and-value',\n },\n //'a/an' can mean 1 - \"a hour\"\n {\n match: '[(a|an)] (#Duration|hundred|thousand|million|billion|trillion)',\n group: 0,\n tag: 'Value',\n reason: 'a-is-one',\n },\n]\n","const verbs = '(pat|wade|ollie|will|rob|buck|bob|mark|jack)'\n\nlet list = [\n // ==== Tense ====\n //he left\n { match: '#Noun #Adverb? [left]', group: 0, tag: 'PastTense', reason: 'left-verb' },\n //this rocks\n { match: '(this|that) [#Plural]', group: 0, tag: 'PresentTense', reason: 'this-verbs' },\n\n // ==== Auxiliary ====\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n //was walking\n { match: `[#Copula (#Adverb|not)+?] (#Gerund|#PastTense)`, group: 0, tag: 'Auxiliary', reason: 'copula-walking' },\n //support a splattering of auxillaries before a verb\n { match: `[(has|had) (#Adverb|not)+?] #PastTense`, group: 0, tag: 'Auxiliary', reason: 'had-walked' },\n //would walk\n { match: `[(#Modal|did) (#Adverb|not)+?] #Verb`, group: 0, tag: 'Auxiliary', reason: 'modal-verb' },\n // will walk\n { match: '[(do|does|will|have|had)] (not|#Adverb)? #Verb', group: 0, tag: 'Auxiliary', reason: 'have-had' },\n // about to go\n { match: '[about to] #Adverb? #Verb', group: 0, tag: ['Auxiliary', 'Verb'], reason: 'about-to' },\n //would be walking\n { match: `#Modal (#Adverb|not)+? be (#Adverb|not)+? #Verb`, group: 0, tag: 'Auxiliary', reason: 'would-be' },\n //would have had\n {\n match: `[#Modal (#Adverb|not)+? have (#Adverb|not)+? had (#Adverb|not)+?] #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'would-have',\n },\n //had been walking\n {\n match: `(#Modal|had|has) (#Adverb|not)+? been (#Adverb|not)+? #Verb`,\n group: 0,\n tag: 'Auxiliary',\n reason: 'had-been',\n },\n\n // ==== Phrasal ====\n //'foo-up'\n { match: '(#Verb && @hasHyphen) up', group: 0, tag: 'PhrasalVerb', reason: 'foo-up' },\n { match: '(#Verb && @hasHyphen) off', group: 0, tag: 'PhrasalVerb', reason: 'foo-off' },\n { match: '(#Verb && @hasHyphen) over', group: 0, tag: 'PhrasalVerb', reason: 'foo-over' },\n { match: '(#Verb && @hasHyphen) out', group: 0, tag: 'PhrasalVerb', reason: 'foo-out' },\n //fall over\n { match: '#PhrasalVerb [#PhrasalVerb]', group: 0, tag: 'Particle', reason: 'phrasal-particle' },\n\n // ==== Copula ====\n //will be running (not copula)\n { match: '[will #Adverb? not? #Adverb? be] #Gerund', group: 0, tag: 'Copula', reason: 'will-be-copula' },\n //for more complex forms, just tag 'be'\n { match: 'will #Adverb? not? #Adverb? [be] #Adjective', group: 0, tag: 'Copula', reason: 'be-copula' },\n\n // ==== Infinitive ====\n //march to\n { match: '[march] (up|down|back|to|toward)', group: 0, tag: 'Infinitive', reason: 'march-to' },\n //must march\n { match: '#Modal [march]', group: 0, tag: 'Infinitive', reason: 'must-march' },\n //let him glue\n {\n match: '(let|make|made) (him|her|it|#Person|#Place|#Organization)+ [#Singular] (a|an|the|it)',\n group: 0,\n tag: 'Infinitive',\n reason: 'let-him-glue',\n },\n\n //he quickly foo\n { match: '#Noun #Adverb [#Noun]', group: 0, tag: 'Verb', reason: 'quickly-foo' },\n //will secure our\n { match: 'will [#Adjective]', group: 0, tag: 'Verb', reason: 'will-adj' },\n //he disguised the thing\n { match: '#Pronoun [#Adjective] #Determiner #Adjective? #Noun', group: 0, tag: 'Verb', reason: 'he-adj-the' },\n\n //is eager to go\n { match: '#Copula [#Adjective to] #Verb', group: 0, tag: 'Verb', reason: 'adj-to' },\n\n // would wade\n { match: `#Modal [${verbs}]`, group: 0, tag: 'Verb', reason: 'would-mark' },\n { match: `#Adverb [${verbs}]`, group: 0, tag: 'Verb', reason: 'really-mark' },\n // wade smith\n { match: `${verbs} #Person`, tag: 'Person', reason: 'rob-smith' },\n // wade m. Cooper\n { match: `${verbs} #Acronym? #ProperNoun`, tag: 'Person', reason: 'rob-a-smith' },\n\n // damn them\n { match: '[shit] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear1-verb' },\n { match: '[damn] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear2-verb' },\n { match: '[fuck] (#Determiner|#Possessive|them)', group: 0, tag: 'Verb', reason: 'swear3-verb' },\n]\n\nmodule.exports = list\n","const places = '(paris|alexandria|houston|kobe|salvador|sydney)'\nlet list = [\n // ==== Region ====\n //West Norforlk\n {\n match: '(west|north|south|east|western|northern|southern|eastern)+ #Place',\n\n tag: 'Region',\n reason: 'west-norfolk',\n },\n //some us-state acronyms (exlude: al, in, la, mo, hi, me, md, ok..)\n {\n match: '#City [(al|ak|az|ar|ca|ct|dc|fl|ga|id|il|nv|nh|nj|ny|oh|or|pa|sc|tn|tx|ut|vt|pr)]',\n group: 0,\n tag: 'Region',\n reason: 'us-state',\n },\n //Foo District\n {\n match: '#ProperNoun+ (district|region|province|county|prefecture|municipality|territory|burough|reservation)',\n tag: 'Region',\n reason: 'foo-district',\n },\n //District of Foo\n {\n match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun',\n tag: 'Region',\n reason: 'district-of-Foo',\n },\n\n // ==== Address ====\n {\n match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)',\n tag: 'Address',\n reason: 'address-st',\n },\n\n // in houston\n { match: `in [${places}]`, group: 0, tag: 'Place', reason: 'in-paris' },\n { match: `near [${places}]`, group: 0, tag: 'Place', reason: 'near-paris' },\n { match: `at [${places}]`, group: 0, tag: 'Place', reason: 'at-paris' },\n { match: `from [${places}]`, group: 0, tag: 'Place', reason: 'from-paris' },\n { match: `to [${places}]`, group: 0, tag: 'Place', reason: 'to-paris' },\n { match: `#Place [${places}]`, group: 0, tag: 'Place', reason: 'tokyo-paris' },\n // houston texas\n { match: `[${places}] #Place`, group: 0, tag: 'Place', reason: 'paris-france' },\n]\nmodule.exports = list\n","module.exports = [\n //John & Joe's\n { match: '#Noun (&|n) #Noun', tag: 'Organization', reason: 'Noun-&-Noun' },\n // teachers union of Ontario\n { match: '#Organization of the? #ProperNoun', tag: 'Organization', reason: 'org-of-place', safe: true },\n //walmart USA\n { match: '#Organization #Country', tag: 'Organization', reason: 'org-country' },\n //organization\n { match: '#ProperNoun #Organization', tag: 'Organization', reason: 'titlecase-org' },\n //FitBit Inc\n { match: '#ProperNoun (ltd|co|inc|dept|assn|bros)', tag: 'Organization', reason: 'org-abbrv' },\n // the OCED\n { match: 'the [#Acronym]', group: 0, tag: 'Organization', reason: 'the-acronym', safe: true },\n // global trade union\n {\n match: '(world|global|international|national|#Demonym) #Organization',\n\n tag: 'Organization',\n reason: 'global-org',\n },\n // schools\n { match: '#Noun+ (public|private) school', tag: 'School', reason: 'noun-public-school' },\n]\n","const nouns =\n '(rose|robin|dawn|ray|holly|bill|joy|viola|penny|sky|violet|daisy|melody|kelvin|hope|mercedes|olive|jewel|faith|van|charity|miles|lily|summer|dolly|rod|dick|cliff|lane|reed|kitty|art|jean|trinity)'\n\nconst months = '(january|april|may|june|jan|sep)' //summer|autumn\n\nlet list = [\n // ==== Honorific ====\n { match: '[(1st|2nd|first|second)] #Honorific', group: 0, tag: 'Honorific', reason: 'ordinal-honorific' },\n {\n match: '[(private|general|major|corporal|lord|lady|secretary|premier)] #Honorific? #Person',\n group: 0,\n tag: 'Honorific',\n reason: 'ambg-honorifics',\n },\n\n // ==== FirstNames ====\n //is foo Smith\n { match: '#Copula [(#Noun|#PresentTense)] #LastName', group: 0, tag: 'FirstName', reason: 'copula-noun-lastname' },\n //pope francis\n { match: '(lady|queen|sister) #ProperNoun', tag: 'FemaleName', reason: 'lady-titlecase', safe: true },\n { match: '(king|pope|father) #ProperNoun', tag: 'MaleName', reason: 'pope-titlecase', safe: true },\n //ambiguous-but-common firstnames\n {\n match: '[(will|may|april|june|said|rob|wade|ray|rusty|drew|miles|jack|chuck|randy|jan|pat|cliff|bill)] #LastName',\n group: 0,\n tag: 'FirstName',\n reason: 'maybe-lastname',\n },\n\n // ==== Nickname ====\n // Dwayne 'the rock' Johnson\n { match: '#FirstName [#Determiner #Noun] #LastName', group: 0, tag: 'NickName', reason: 'first-noun-last' },\n\n //my buddy\n { match: '#Possessive [#FirstName]', group: 0, tag: 'Person', reason: 'possessive-name' },\n { match: '#Acronym #ProperNoun', tag: 'Person', reason: 'acronym-titlecase', safe: true }, //ludwig van beethovan\n { match: '#Person (jr|sr|md)', tag: 'Person', reason: 'person-honorific' }, //peter II\n { match: '#Person #Person the? #RomanNumeral', tag: 'Person', reason: 'roman-numeral' }, //'Professor Fink', 'General McCarthy'\n { match: '#FirstName [/^[^aiurck]$/]', group: 0, tag: ['Acronym', 'Person'], reason: 'john-e' }, //Doctor john smith jr\n //general pearson\n { match: '#Honorific #Person', tag: 'Person', reason: 'honorific-person' },\n //remove single 'mr'\n { match: '#Honorific #Acronym', tag: 'Person', reason: 'Honorific-TitleCase' },\n //j.k Rowling\n { match: '#Noun van der? #Noun', tag: 'Person', reason: 'von der noun', safe: true },\n //king of spain\n { match: '(king|queen|prince|saint|lady) of? #Noun', tag: 'Person', reason: 'king-of-noun', safe: true },\n //Foo U Ford\n { match: '[#ProperNoun] #Person', group: 0, tag: 'Person', reason: 'proper-person', safe: true },\n // al sharpton\n { match: 'al (#Person|#ProperNoun)', tag: 'Person', reason: 'al-borlen', safe: true },\n //ferdinand de almar\n { match: '#FirstName de #Noun', tag: 'Person', reason: 'bill-de-noun' },\n //Osama bin Laden\n { match: '#FirstName (bin|al) #Noun', tag: 'Person', reason: 'bill-al-noun' },\n //John L. Foo\n { match: '#FirstName #Acronym #ProperNoun', tag: 'Person', reason: 'bill-acronym-title' },\n //Andrew Lloyd Webber\n { match: '#FirstName #FirstName #ProperNoun', tag: 'Person', reason: 'bill-firstname-title' },\n //Mr Foo\n { match: '#Honorific #FirstName? #ProperNoun', tag: 'Person', reason: 'dr-john-Title' },\n //peter the great\n { match: '#FirstName the #Adjective', tag: 'Person', reason: 'name-the-great' },\n //very common-but-ambiguous lastnames\n {\n match: '#FirstName (green|white|brown|hall|young|king|hill|cook|gray|price)',\n\n tag: 'Person',\n reason: 'bill-green',\n },\n // faith smith\n { match: `${nouns} #Person`, tag: 'Person', reason: 'ray-smith', safe: true },\n // faith m. Smith\n { match: `${nouns} #Acronym? #ProperNoun`, tag: 'Person', reason: 'ray-a-smith', safe: true },\n //give to april\n {\n match: `#Infinitive #Determiner? #Adjective? #Noun? (to|for) [${months}]`,\n group: 0,\n tag: 'Person',\n reason: 'ambig-person',\n },\n // remind june\n { match: `#Infinitive [${months}]`, group: 0, tag: 'Person', reason: 'infinitive-person' },\n // may waits for\n { match: `[${months}] #PresentTense for`, group: 0, tag: 'Person', reason: 'ambig-active-for' },\n // may waits for\n { match: `[${months}] #PresentTense to`, group: 0, tag: 'Person', reason: 'ambig-active-to' },\n // april will\n { match: `[${months}] #Modal`, group: 0, tag: 'Person', reason: 'ambig-modal' },\n // would april\n { match: `#Modal [${months}]`, group: 0, tag: 'Person', reason: 'modal-ambig' },\n // it is may\n { match: `#Copula [${months}]`, group: 0, tag: 'Person', reason: 'is-may' },\n // may is\n { match: `[${months}] #Copula`, group: 0, tag: 'Person', reason: 'may-is' },\n // with april\n { match: `that [${months}]`, group: 0, tag: 'Person', reason: 'that-month' },\n // with april\n { match: `with [${months}]`, group: 0, tag: 'Person', reason: 'with-month' },\n // for april\n { match: `for [${months}]`, group: 0, tag: 'Person', reason: 'for-month' },\n // this april\n { match: `this [${months}]`, group: 0, tag: 'Month', reason: 'this-may' }, //maybe not 'this'\n // next april\n { match: `next [${months}]`, group: 0, tag: 'Month', reason: 'next-may' },\n // last april\n { match: `last [${months}]`, group: 0, tag: 'Month', reason: 'last-may' },\n // wednesday april\n { match: `#Date [${months}]`, group: 0, tag: 'Month', reason: 'date-may' },\n // may 5th\n { match: `[${months}] the? #Value`, group: 0, tag: 'Month', reason: 'may-5th' },\n // 5th of may\n { match: `#Value of [${months}]`, group: 0, tag: 'Month', reason: '5th-of-may' },\n // dick van dyke\n { match: '#ProperNoun (van|al|bin) #ProperNoun', tag: 'Person', reason: 'title-van-title', safe: true },\n //jose de Sucre\n { match: '#ProperNoun (de|du) la? #ProperNoun', tag: 'Person', reason: 'title-de-title', safe: true },\n //Jani K. Smith\n { match: '#Singular #Acronym #LastName', tag: '#Person', reason: 'title-acro-noun', safe: true },\n //John Foo\n { match: '#FirstName (#Noun && #ProperNoun) #ProperNoun?', tag: 'Person', reason: 'firstname-titlecase' },\n //Joe K. Sombrero\n { match: '#FirstName #Acronym #Noun', tag: 'Person', reason: 'n-acro-noun', safe: true },\n]\nmodule.exports = list\n","const parseSyntax = require('../../../Doc/match/syntax')\nconst unique = require('../_unique')\nlet matches = []\nmatches = matches.concat(require('./01-misc'))\nmatches = matches.concat(require('./02-dates'))\nmatches = matches.concat(require('./03-noun'))\nmatches = matches.concat(require('./04-adjective'))\nmatches = matches.concat(require('./05-adverb'))\nmatches = matches.concat(require('./06-value'))\nmatches = matches.concat(require('./07-verbs'))\nmatches = matches.concat(require('./08-place'))\nmatches = matches.concat(require('./09-org'))\nmatches = matches.concat(require('./10-people'))\n\n// cache the easier conditions up-front\nconst cacheRequired = function(reg) {\n let needTags = []\n let needWords = []\n reg.forEach(obj => {\n if (obj.optional === true || obj.negative === true) {\n return\n }\n if (obj.tag !== undefined) {\n needTags.push(obj.tag)\n }\n if (obj.word !== undefined) {\n needWords.push(obj.word)\n }\n })\n return { tags: unique(needTags), words: unique(needWords) }\n}\n\nconst allLists = function(m) {\n let more = []\n let lists = m.reg.filter(r => r.oneOf !== undefined)\n if (lists.length === 1) {\n let i = m.reg.findIndex(r => r.oneOf !== undefined)\n Object.keys(m.reg[i].oneOf).forEach(w => {\n let newM = Object.assign({}, m)\n newM.reg = newM.reg.slice(0)\n newM.reg[i] = Object.assign({}, newM.reg[i])\n newM.reg[i].word = w\n delete newM.reg[i].operator\n delete newM.reg[i].oneOf\n newM.reason += '-' + w\n more.push(newM)\n })\n }\n return more\n}\n\n// parse them\nlet all = []\nmatches.forEach(m => {\n m.reg = parseSyntax(m.match)\n let enumerated = allLists(m)\n if (enumerated.length > 0) {\n all = all.concat(enumerated)\n } else {\n all.push(m)\n }\n})\n\nall.forEach(m => {\n m.required = cacheRequired(m.reg)\n return m\n})\n\nmodule.exports = all\n","const matches = require('./matches')\nconst unique = require('./_unique')\n\n// return intersection of array-of-arrays\nconst hasEvery = function(chances) {\n if (chances.length === 0) {\n return []\n }\n let obj = {}\n chances.forEach(arr => {\n arr = unique(arr)\n for (let i = 0; i < arr.length; i++) {\n obj[arr[i]] = obj[arr[i]] || 0\n obj[arr[i]] += 1\n }\n })\n let res = Object.keys(obj)\n res = res.filter(k => obj[k] === chances.length)\n res = res.map(num => Number(num))\n return res\n}\n\nconst runner = function(doc) {\n //find phrases to try for each match\n matches.forEach(m => {\n let allChances = []\n m.required.words.forEach(w => {\n allChances.push(doc._cache.words[w] || [])\n })\n m.required.tags.forEach(tag => {\n allChances.push(doc._cache.tags[tag] || [])\n })\n\n let worthIt = hasEvery(allChances)\n if (worthIt.length === 0) {\n return\n }\n\n let phrases = worthIt.map(index => doc.list[index])\n let tryDoc = doc.buildFrom(phrases)\n // phrases getting tagged\n let match = tryDoc.match(m.reg, m.group)\n if (match.found) {\n if (m.safe === true) {\n match.tagSafe(m.tag, m.reason)\n } else {\n match.tag(m.tag, m.reason)\n }\n }\n })\n}\nmodule.exports = runner\n\n// console.log(hasEvery([[1, 2, 2, 3], [2, 3], []]))\n","const fixMisc = require('./fixMisc')\nconst runner = require('./runner')\n\n// runner: 250ms\n// misc: 40ms\n\n//sequence of match-tag statements to correct mis-tags\nconst corrections = function(doc) {\n runner(doc)\n fixMisc(doc)\n return doc\n}\nmodule.exports = corrections\n","const init = require('./01-init')\nconst fallbacks = require('./02-fallbacks')\nconst contractions = require('./03-contractions')\nconst corrections = require('./04-correction')\n\n/** POS-tag all terms in this document */\nconst tagger = function(doc) {\n let terms = doc.termList()\n // check against any known-words\n doc = init(doc, terms)\n // everything has gotta be something. ¯\\_(:/)_/¯\n doc = fallbacks(doc, terms)\n // support \"didn't\" & \"spencer's\"\n doc = contractions(doc)\n //set our cache, to speed things up\n doc.cache()\n // wiggle-around the results, so they make more sense\n doc = corrections(doc)\n // remove our cache, as it's invalidated now\n doc.uncache()\n // run any user-given tagger functions\n doc.world.taggers.forEach(fn => {\n fn(doc)\n })\n return doc\n}\nmodule.exports = tagger\n","const addMethod = function(Doc) {\n /** */\n class Abbreviations extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n if (t.tags.Abbreviation === true && t.next) {\n t.post = t.post.replace(/^\\./, '')\n }\n let str = t.text.replace(/\\./, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n t.post = t.post.replace(/^\\./, '')\n t.post = '.' + t.post\n })\n return this\n }\n }\n Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods\n\n Doc.prototype.abbreviations = function(n) {\n let match = this.match('#Abbreviation')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Abbreviations(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const hasPeriod = /\\./\n\nconst addMethod = function(Doc) {\n /** */\n class Acronyms extends Doc {\n stripPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n t.set(str)\n })\n return this\n }\n addPeriods() {\n this.termList().forEach(t => {\n let str = t.text.replace(/\\./g, '')\n str = str.split('').join('.')\n // don't add a end-period if there's a sentence-end one\n if (hasPeriod.test(t.post) === false) {\n str += '.'\n }\n t.set(str)\n })\n return this\n }\n }\n Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods\n Acronyms.prototype.strip = Acronyms.prototype.stripPeriods\n\n Doc.prototype.acronyms = function(n) {\n let match = this.match('#Acronym')\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new Acronyms(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** split into approximate sub-sentence phrases */\n Doc.prototype.clauses = function(n) {\n // an awkward way to disambiguate a comma use\n let commas = this.if('@hasComma')\n .notIf('@hasComma @hasComma') //fun, cool...\n .notIf('@hasComma . .? (and|or) .') //cool, and fun\n .notIf('(#City && @hasComma) #Country') //'toronto, canada'\n .notIf('(#Date && @hasComma) #Year') //'july 6, 1992'\n .notIf('@hasComma (too|also)$') //at end of sentence\n .match('@hasComma')\n let found = this.splitAfter(commas)\n\n let quotes = found.quotations()\n found = found.splitOn(quotes)\n\n let parentheses = found.parentheses()\n found = found.splitOn(parentheses)\n\n // it is cool and it is ..\n let conjunctions = found.if('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction')\n found = found.splitBefore(conjunctions)\n\n // if it is this then that\n let condition = found.if('if .{2,9} then .').match('then')\n found = found.splitBefore(condition)\n\n // misc clause partitions\n found = found.splitBefore('as well as .')\n found = found.splitBefore('such as .')\n found = found.splitBefore('in addition to .')\n\n // semicolons, dashes\n found = found.splitAfter('@hasSemicolon')\n found = found.splitAfter('@hasDash')\n\n // passive voice verb - '.. which was robbed is empty'\n // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n // //which the boy robbed\n // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?')\n // if (passive.found) {\n // found = found.splitAfter(passive)\n // }\n\n // does there appear to have relative/subordinate clause still?\n let tooLong = found.filter(d => d.wordCount() > 5 && d.match('#Verb+').length >= 2)\n if (tooLong.found) {\n let m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+')\n found = found.splitOn(m.eq(0))\n }\n\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Doc(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Contractions extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n expand() {\n this.list.forEach(p => {\n let terms = p.terms()\n //change the case?\n let isTitlecase = terms[0].isTitleCase()\n\n terms.forEach((t, i) => {\n //use the implicit text\n t.set(t.implicit || t.text)\n t.implicit = undefined\n\n //add whitespace\n if (i < terms.length - 1 && t.post === '') {\n t.post += ' '\n }\n })\n //set titlecase\n if (isTitlecase) {\n terms[0].toTitleCase()\n }\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.contractions = function(n) {\n //find currently-contracted\n let found = this.match('@hasContraction+') //(may want to split these up)\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Contractions(found.list, this, this.world)\n }\n\n //aliases\n Doc.prototype.expanded = Doc.prototype.isExpanded\n Doc.prototype.contracted = Doc.prototype.isContracted\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n //pull it apart..\n const parse = function(doc) {\n let things = doc\n .splitAfter('@hasComma')\n .splitOn('(and|or) not?')\n .not('(and|or) not?')\n let beforeLast = doc.match('[.] (and|or)', 0)\n return {\n things: things,\n conjunction: doc.match('(and|or) not?'),\n beforeLast: beforeLast,\n hasOxford: beforeLast.has('@hasComma'),\n }\n }\n\n /** cool, fun, and nice */\n class Lists extends Doc {\n /** coordinating conjunction */\n conjunctions() {\n return this.match('(and|or)')\n }\n /** split-up by list object */\n parts() {\n return this.splitAfter('@hasComma').splitOn('(and|or) not?')\n }\n /** remove the conjunction */\n items() {\n return parse(this).things\n }\n /** add a new unit to the list */\n add(str) {\n this.forEach(p => {\n let beforeLast = parse(p).beforeLast\n beforeLast.append(str)\n //add a comma to it\n beforeLast.termList(0).addPunctuation(',')\n })\n return this\n }\n /** remove any matching unit from the list */\n remove(match) {\n return this.items()\n .if(match)\n .remove()\n }\n /** return only lists that use a serial comma */\n hasOxfordComma() {\n return this.filter(doc => parse(doc).hasOxford)\n }\n addOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === false) {\n needsComma.post(', ')\n }\n return this\n }\n removeOxfordComma() {\n let items = this.items()\n let needsComma = items.eq(items.length - 2)\n if (needsComma.found && needsComma.has('@hasComma') === true) {\n needsComma.post(' ')\n }\n return this\n }\n }\n // aliases\n Lists.prototype.things = Lists.prototype.items\n\n Doc.prototype.lists = function(n) {\n let m = this.if('@hasComma+ .? (and|or) not? .')\n\n // person-list\n let nounList = m\n .match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')\n .if('#Noun')\n let adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+')\n let verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+')\n let result = nounList.concat(adjList)\n result = result.concat(verbList)\n result = result.if('@hasComma')\n\n if (typeof n === 'number') {\n result = m.get(n)\n }\n return new Lists(result.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const noPlural =\n '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'\n\n//certain words can't be plural, like 'peace'\nconst hasPlural = function(doc) {\n if (doc.has('#Plural') === true) {\n return true\n }\n // these can't be plural\n if (doc.has(noPlural) === true) {\n return false\n }\n return true\n}\n\nmodule.exports = hasPlural\n","'use strict'\n\n//chooses an indefinite aricle 'a/an' for a word\nconst irregulars = {\n hour: 'an',\n heir: 'an',\n heirloom: 'an',\n honest: 'an',\n honour: 'an',\n honor: 'an',\n uber: 'an', //german u\n}\n//pronounced letters of acronyms that get a 'an'\nconst an_acronyms = {\n a: true,\n e: true,\n f: true,\n h: true,\n i: true,\n l: true,\n m: true,\n n: true,\n o: true,\n r: true,\n s: true,\n x: true,\n}\n//'a' regexes\nconst a_regexs = [\n /^onc?e/i, //'wu' sound of 'o'\n /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u'\n /^eul/i,\n]\n\nconst makeArticle = function(doc) {\n //no 'the john smith', but 'a london hotel'\n if (doc.has('#Person') || doc.has('#Place')) {\n return ''\n }\n //no a/an if it's plural\n if (doc.has('#Plural')) {\n return 'the'\n }\n let str = doc.text('normal').trim()\n //explicit irregular forms\n if (irregulars.hasOwnProperty(str)) {\n return irregulars[str]\n }\n //spelled-out acronyms\n let firstLetter = str.substr(0, 1)\n if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) {\n return 'an'\n }\n //'a' regexes\n for (let i = 0; i < a_regexs.length; i++) {\n if (a_regexs[i].test(str)) {\n return 'a'\n }\n }\n //basic vowel-startings\n if (/^[aeiou]/i.test(str)) {\n return 'an'\n }\n return 'a'\n}\n\nmodule.exports = makeArticle\n","//similar to plural/singularize rules, but not the same\nconst isPlural = [\n /(antenn|formul|nebul|vertebr|vit)ae$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)i$/i,\n /men$/i,\n /.tia$/i,\n /(m|l)ice$/i,\n]\n\n//similar to plural/singularize rules, but not the same\nconst isSingular = [\n /(ax|test)is$/i,\n /(octop|vir|radi|nucle|fung|cact|stimul)us$/i,\n /(octop|vir)i$/i,\n /(rl)f$/i,\n /(alias|status)$/i,\n /(bu)s$/i,\n /(al|ad|at|er|et|ed|ad)o$/i,\n /(ti)um$/i,\n /(ti)a$/i,\n /sis$/i,\n /(?:(^f)fe|(lr)f)$/i,\n /hive$/i,\n /(^aeiouy|qu)y$/i,\n /(x|ch|ss|sh|z)$/i,\n /(matr|vert|ind|cort)(ix|ex)$/i,\n /(m|l)ouse$/i,\n /(m|l)ice$/i,\n /(antenn|formul|nebul|vertebr|vit)a$/i,\n /.sis$/i,\n /^(?!talis|.*hu)(.*)man$/i,\n]\nmodule.exports = {\n isSingular: isSingular,\n isPlural: isPlural,\n}\n","const rules = require('./_rules')\nconst endS = /s$/\n// double-check this term, if it is not plural, or singular.\n// (this is a partial copy of ./tagger/fallbacks/plural)\n// fallback plural if it ends in an 's'.\nconst isPlural = function(str) {\n // isSingular suffix rules\n if (rules.isSingular.find(reg => reg.test(str))) {\n return false\n }\n // does it end in an s?\n if (endS.test(str) === true) {\n return true\n }\n // is it a plural like 'fungi'?\n if (rules.isPlural.find(reg => reg.test(str))) {\n return true\n }\n return null\n}\nmodule.exports = isPlural\n","const exceptions = {\n he: 'his',\n she: 'hers',\n they: 'theirs',\n we: 'ours',\n i: 'mine',\n you: 'yours',\n\n her: 'hers',\n their: 'theirs',\n our: 'ours',\n my: 'mine',\n your: 'yours',\n}\n\n// turn \"David\" to \"David's\"\nconst toPossessive = function(doc) {\n let str = doc.text('text').trim()\n // exceptions\n if (exceptions.hasOwnProperty(str)) {\n doc.replaceWith(exceptions[str], true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n // flanders'\n if (/s$/.test(str)) {\n str += \"'\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n }\n //normal form:\n str += \"'s\"\n doc.replaceWith(str, true)\n doc.tag('Possessive', 'toPossessive')\n return\n}\nmodule.exports = toPossessive\n","// .nouns() supports some noun-phrase-ish groupings\n// pull these apart, if necessary\nconst parse = function(doc) {\n let res = {\n main: doc,\n }\n //support 'mayor of chicago' as one noun-phrase\n if (doc.has('#Noun (of|by|for) .')) {\n let m = doc.splitAfter('[#Noun+]', 0)\n res.main = m.eq(0)\n res.post = m.eq(1)\n }\n return res\n}\nmodule.exports = parse\n","const hasPlural = require('./plural/hasPlural')\nconst getArticle = require('./getArticle')\nconst isPlural = require('./plural/isPlural')\nconst toPossessive = require('./toPossessive')\nconst parse = require('./parse')\n\nconst methods = {\n /** overload the original json with noun information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n json.article = getArticle(doc)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** get all adjectives describing this noun*/\n adjectives: function() {\n let list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+')\n list = list.concat(this.lookBehind('#Adjective+ #Adverb?$'))\n list = list.match('#Adjective')\n return list.sort('index')\n },\n\n isPlural: function() {\n return this.if('#Plural') //assume tagger has run?\n },\n hasPlural: function() {\n return this.filter(d => hasPlural(d))\n },\n toPlural: function(agree) {\n let toPlural = this.world.transforms.toPlural\n this.forEach(doc => {\n if (doc.has('#Plural') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Singular') && isPlural(str) === true) {\n return\n }\n str = toPlural(str, this.world)\n main.replace(str).tag('#Plural')\n // 'an apple' -> 'apples'\n if (agree) {\n let an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective')\n if (an.found === true) {\n an.remove()\n }\n }\n })\n return this\n },\n toSingular: function(agree) {\n let toSingular = this.world.transforms.toSingular\n this.forEach(doc => {\n if (doc.has('#Singular') || hasPlural(doc) === false) {\n return\n }\n // double-check it isn't an un-tagged plural\n let main = parse(doc).main\n let str = main.text('reduced')\n if (!main.has('#Plural') && isPlural(str) !== true) {\n return\n }\n str = toSingular(str, this.world)\n main.replace(str).tag('#Singular')\n // add an article\n if (agree) {\n // 'apples' -> 'an apple'\n let start = doc\n let adj = doc.lookBefore('#Adjective')\n if (adj.found) {\n start = adj\n }\n let article = getArticle(start)\n start.insertBefore(article)\n }\n })\n return this\n },\n toPossessive: function() {\n this.forEach(d => {\n toPossessive(d)\n })\n return this\n },\n}\nmodule.exports = methods\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Nouns extends Doc {}\n // add-in our methods\n Object.assign(Nouns.prototype, methods)\n\n Doc.prototype.nouns = function(n) {\n // don't split 'paris, france'\n let keep = this.match('(#City && @hasComma) (#Region|#Country)')\n // but split the other commas\n let m = this.not(keep).splitAfter('@hasComma')\n // combine them back together\n m = m.concat(keep)\n\n m = m.match('#Noun+ (of|by)? the? #Noun+?')\n //nouns that we don't want in these results, for weird reasons\n m = m.not('#Pronoun')\n m = m.not('(there|these)')\n m = m.not('(#Month|#WeekDay)') //allow Durations, Holidays\n // //allow possessives like \"spencer's\", but not generic ones like,\n m = m.not('(my|our|your|their|her|his)')\n m = m.not('(of|for|by|the)$')\n\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return new Nouns(m.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const open = /\\(/\nconst close = /\\)/\n\nconst addMethod = function(Doc) {\n /** anything between (these things) */\n class Parentheses extends Doc {\n /** remove the parentheses characters */\n unwrap() {\n this.list.forEach(p => {\n let first = p.terms(0)\n first.pre = first.pre.replace(open, '')\n let last = p.lastTerm()\n last.post = last.post.replace(close, '')\n })\n return this\n }\n }\n\n Doc.prototype.parentheses = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening brackets\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (open.test(t.pre)) {\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (close.test(terms[o].post)) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Parentheses(list, this, this.world)\n }\n return new Parentheses(list, this, this.world)\n }\n\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class Possessives extends Doc {\n constructor(list, from, world) {\n super(list, from, world)\n this.contracted = null\n }\n /** turn didn't into 'did not' */\n strip() {\n this.list.forEach(p => {\n let terms = p.terms()\n terms.forEach(t => {\n let str = t.text.replace(/'s$/, '')\n t.set(str || t.text)\n })\n })\n return this\n }\n }\n\n //find contractable, expanded-contractions\n // const findExpanded = r => {\n // let remain = r.not('#Contraction')\n // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)')\n // m.concat(remain.match('(they|we|you|i) have'))\n // m.concat(remain.match('i am'))\n // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not'))\n // return m\n // }\n\n Doc.prototype.possessives = function(n) {\n //find currently-contracted\n let found = this.match('#Noun+? #Possessive')\n //todo: split consecutive contractions\n if (typeof n === 'number') {\n found = found.get(n)\n }\n return new Possessives(found.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const pairs = {\n '\\u0022': '\\u0022', // 'StraightDoubleQuotes'\n '\\uFF02': '\\uFF02', // 'StraightDoubleQuotesWide'\n '\\u0027': '\\u0027', // 'StraightSingleQuotes'\n '\\u201C': '\\u201D', // 'CommaDoubleQuotes'\n '\\u2018': '\\u2019', // 'CommaSingleQuotes'\n '\\u201F': '\\u201D', // 'CurlyDoubleQuotesReversed'\n '\\u201B': '\\u2019', // 'CurlySingleQuotesReversed'\n '\\u201E': '\\u201D', // 'LowCurlyDoubleQuotes'\n '\\u2E42': '\\u201D', // 'LowCurlyDoubleQuotesReversed'\n '\\u201A': '\\u2019', // 'LowCurlySingleQuotes'\n '\\u00AB': '\\u00BB', // 'AngleDoubleQuotes'\n '\\u2039': '\\u203A', // 'AngleSingleQuotes'\n // Prime 'non quotation'\n '\\u2035': '\\u2032', // 'PrimeSingleQuotes'\n '\\u2036': '\\u2033', // 'PrimeDoubleQuotes'\n '\\u2037': '\\u2034', // 'PrimeTripleQuotes'\n // Prime 'quotation' variation\n '\\u301D': '\\u301E', // 'PrimeDoubleQuotes'\n '\\u0060': '\\u00B4', // 'PrimeSingleQuotes'\n '\\u301F': '\\u301E', // 'LowPrimeDoubleQuotesReversed'\n}\n\nconst hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')')\n\nconst addMethod = function(Doc) {\n /** \"these things\" */\n class Quotations extends Doc {\n /** remove the quote characters */\n unwrap() {\n return this\n }\n }\n\n Doc.prototype.quotations = function(n) {\n let list = []\n this.list.forEach(p => {\n let terms = p.terms()\n //look for opening quotes\n for (let i = 0; i < terms.length; i += 1) {\n const t = terms[i]\n if (hasOpen.test(t.pre)) {\n let char = (t.pre.match(hasOpen) || [])[0]\n let want = pairs[char]\n // if (!want) {\n // console.warn('missing quote char ' + char)\n // }\n //look for the closing bracket..\n for (let o = i; o < terms.length; o += 1) {\n if (terms[o].post.indexOf(want) !== -1) {\n let len = o - i + 1\n list.push(p.buildFrom(t.id, len))\n i = o\n break\n }\n }\n }\n }\n })\n //support nth result\n if (typeof n === 'number') {\n if (list[n]) {\n list = [list[n]]\n } else {\n list = []\n }\n return new Quotations(list, this, this.world)\n }\n return new Quotations(list, this, this.world)\n }\n // alias\n Doc.prototype.quotes = Doc.prototype.quotations\n\n return Doc\n}\nmodule.exports = addMethod\n","// walked => walk - turn a verb into it's root form\nconst toInfinitive = function(parsed, world) {\n let verb = parsed.verb\n\n //1. if it's already infinitive\n let str = verb.text('normal')\n if (verb.has('#Infinitive')) {\n return str\n }\n\n // 2. world transform does the heavy-lifting\n let tense = null\n if (verb.has('#PastTense')) {\n tense = 'PastTense'\n } else if (verb.has('#Gerund')) {\n tense = 'Gerund'\n } else if (verb.has('#PresentTense')) {\n tense = 'PresentTense'\n } else if (verb.has('#Participle')) {\n tense = 'Participle'\n } else if (verb.has('#Actor')) {\n tense = 'Actor'\n }\n return world.transforms.toInfinitive(str, world, tense)\n}\nmodule.exports = toInfinitive\n","// spencer walks -> singular\n// we walk -> plural\n\n// the most-recent noun-phrase, before this verb.\nconst findNoun = function(vb) {\n let noun = vb.lookBehind('#Noun+').last()\n return noun\n}\n\n//sometimes you can tell if a verb is plural/singular, just by the verb\n// i am / we were\n// othertimes you need its subject 'we walk' vs 'i walk'\nconst isPlural = function(parsed) {\n let vb = parsed.verb\n if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) {\n return true\n }\n if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) {\n return false\n }\n //consider its prior noun\n let noun = findNoun(vb)\n if (noun.has('(we|they|you)')) {\n return true\n }\n if (noun.has('#Plural')) {\n return true\n }\n if (noun.has('#Singular')) {\n return false\n }\n return null\n}\nmodule.exports = isPlural\n","const toInfinitive = require('./toInfinitive')\nconst isPlural = require('./isPlural')\n// #Modal : would walk -> 'would not walk'\n// #Copula : is -> 'is not'\n// #PastTense : walked -> did not walk\n// #PresentTense : walks -> does not walk\n// #Gerund : walking: -> not walking\n// #Infinitive : walk -> do not walk\n\nconst toNegative = function(parsed, world) {\n let vb = parsed.verb\n // if it's already negative...\n if (parsed.negative.found) {\n return\n }\n\n // would walk -> would not walk\n if (parsed.auxiliary.found) {\n parsed.auxiliary.eq(0).append('not')\n return\n }\n // is walking -> is not walking\n if (vb.has('(#Copula|will|has|had|do)')) {\n vb.append('not')\n return\n }\n // walked -> did not walk\n if (vb.has('#PastTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('did not')\n return\n }\n // walks -> does not walk\n if (vb.has('#PresentTense')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n if (isPlural(parsed, world)) {\n vb.prepend('do not')\n } else {\n vb.prepend('does not')\n }\n return\n }\n //walking -> not walking\n if (vb.has('#Gerund')) {\n let inf = toInfinitive(parsed, world)\n vb.replaceWith(inf, true)\n vb.prepend('not')\n return\n }\n\n //fallback 1: walk -> does not walk\n if (isPlural(parsed, world)) {\n vb.prepend('does not')\n return\n }\n //fallback 2: walk -> do not walk\n vb.prepend('do not')\n return\n}\nmodule.exports = toNegative\n","// turn 'would not really walk up' into parts\nconst parseVerb = function(vb) {\n let parsed = {\n adverb: vb.match('#Adverb+'), // 'really'\n negative: vb.match('#Negative'), // 'not'\n auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), // 'will' of 'will go'\n particle: vb.match('#Particle'), // 'up' of 'pull up'\n verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)'),\n }\n // fallback, if no verb found\n if (!parsed.verb.found) {\n // blank-everything\n Object.keys(parsed).forEach(k => {\n parsed[k] = parsed[k].not('.')\n })\n // it's all the verb\n parsed.verb = vb\n return parsed\n }\n //\n if (parsed.adverb && parsed.adverb.found) {\n let match = parsed.adverb.text('reduced') + '$'\n if (vb.has(match)) {\n parsed.adverbAfter = true\n }\n }\n return parsed\n}\nmodule.exports = parseVerb\n","const isPlural = require('../isPlural')\n\n/** too many special cases for is/was/will be*/\nconst toBe = parsed => {\n let isI = false\n let plural = isPlural(parsed)\n let isNegative = parsed.negative.found\n //account for 'i is' -> 'i am' irregular\n // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) {\n // isI = true;\n // }\n\n // 'i look', not 'i looks'\n if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n isI = true\n }\n\n let obj = {\n PastTense: 'was',\n PresentTense: 'is',\n FutureTense: 'will be',\n Infinitive: 'is',\n Gerund: 'being',\n Actor: '',\n PerfectTense: 'been',\n Pluperfect: 'been',\n }\n //\"i is\" -> \"i am\"\n if (isI === true) {\n obj.PresentTense = 'am'\n obj.Infinitive = 'am'\n }\n if (plural) {\n obj.PastTense = 'were'\n obj.PresentTense = 'are'\n obj.Infinitive = 'are'\n }\n if (isNegative) {\n obj.PastTense += ' not'\n obj.PresentTense += ' not'\n obj.FutureTense = 'will not be'\n obj.Infinitive += ' not'\n obj.PerfectTense = 'not ' + obj.PerfectTense\n obj.Pluperfect = 'not ' + obj.Pluperfect\n obj.Gerund = 'not ' + obj.Gerund\n }\n return obj\n}\nmodule.exports = toBe\n","const toInfinitive = require('../toInfinitive')\nconst toBe = require('./toBe')\n\nconst conjugate = function(parsed, world) {\n let verb = parsed.verb\n\n //special handling of 'is', 'will be', etc.\n if (verb.has('#Copula') || (verb.out('normal') === 'be' && parsed.auxiliary.has('will'))) {\n return toBe(parsed, world)\n }\n\n let hasHyphen = parsed.verb.termList(0).hasHyphen()\n\n let infinitive = toInfinitive(parsed, world)\n if (!infinitive) {\n return {}\n }\n let forms = world.transforms.conjugate(infinitive, world)\n forms.Infinitive = infinitive\n\n // add particle to phrasal verbs ('fall over')\n if (parsed.particle.found) {\n let particle = parsed.particle.text()\n let space = hasHyphen === true ? '-' : ' '\n Object.keys(forms).forEach(k => (forms[k] += space + particle))\n }\n //put the adverb at the end?\n if (parsed.adverb.found) {\n let adverb = parsed.adverb.text()\n let space = hasHyphen === true ? '-' : ' '\n if (parsed.adverbAfter === true) {\n Object.keys(forms).forEach(k => (forms[k] += space + adverb))\n } else {\n Object.keys(forms).forEach(k => (forms[k] = adverb + space + forms[k]))\n }\n }\n\n //apply negative\n const isNegative = parsed.negative.found\n if (isNegative) {\n forms.PastTense = 'did not ' + forms.Infinitive\n forms.PresentTense = 'does not ' + forms.Infinitive\n forms.Gerund = 'not ' + forms.Gerund\n }\n //future Tense is pretty straightforward\n if (!forms.FutureTense) {\n if (isNegative) {\n forms.FutureTense = 'will not ' + forms.Infinitive\n } else {\n forms.FutureTense = 'will ' + forms.Infinitive\n }\n }\n if (isNegative) {\n forms.Infinitive = 'not ' + forms.Infinitive\n }\n return forms\n}\nmodule.exports = conjugate\n","const toNegative = require('./toNegative')\nconst parseVerb = require('./parse')\nconst isPlural = require('./isPlural')\nconst conjugate = require('./conjugate')\n\nmodule.exports = {\n /** overload the original json with verb information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(p => {\n let json = p.json(options)[0]\n let parsed = parseVerb(p)\n json.parts = {}\n Object.keys(parsed).forEach(k => {\n if (parsed[k] && parsed[k].isA === 'Doc') {\n json.parts[k] = parsed[k].text('normal')\n } else {\n json.parts[k] = parsed[k]\n }\n })\n json.isNegative = p.has('#Negative')\n json.conjugations = conjugate(parsed, this.world)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n\n /** grab the adverbs describing these verbs */\n adverbs: function() {\n let list = []\n // look at internal adverbs\n this.forEach(vb => {\n let advb = parseVerb(vb).adverb\n if (advb.found) {\n list = list.concat(advb.list)\n }\n })\n // look for leading adverbs\n let m = this.lookBehind('#Adverb+$')\n if (m.found) {\n list = m.list.concat(list)\n }\n // look for trailing adverbs\n m = this.lookAhead('^#Adverb+')\n if (m.found) {\n list = list.concat(m.list)\n }\n return this.buildFrom(list)\n },\n /**return verbs like 'we walk' and not 'spencer walks' */\n isPlural: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === true) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n /** return verbs like 'spencer walks' and not 'we walk' */\n isSingular: function() {\n let list = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n if (isPlural(parsed, this.world) === false) {\n list.push(vb.list[0])\n }\n })\n return this.buildFrom(list)\n },\n\n /** */\n conjugate: function() {\n let result = []\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let forms = conjugate(parsed, this.world)\n result.push(forms)\n })\n return result\n },\n /** */\n toPastTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).PastTense\n if (str) {\n vb.replaceWith(str, false)\n // vb.tag('PastTense')\n }\n })\n return this\n },\n /** */\n toPresentTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let obj = conjugate(parsed, this.world)\n let str = obj.PresentTense\n // 'i look', not 'i looks'\n if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) {\n str = obj.Infinitive\n }\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('PresentTense')\n }\n })\n return this\n },\n /** */\n toFutureTense: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).FutureTense\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('FutureTense')\n }\n })\n return this\n },\n /** */\n toInfinitive: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Infinitive\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Infinitive')\n }\n })\n return this\n },\n /** */\n toGerund: function() {\n this.forEach(vb => {\n let parsed = parseVerb(vb)\n let str = conjugate(parsed, this.world).Gerund\n if (str) {\n vb.replaceWith(str, false)\n vb.tag('Gerund')\n }\n })\n return this\n },\n\n /** return only verbs with 'not'*/\n isNegative: function() {\n return this.if('#Negative')\n },\n /** return only verbs without 'not'*/\n isPositive: function() {\n return this.ifNo('#Negative')\n },\n /** add a 'not' to these verbs */\n toNegative: function() {\n this.list.forEach(p => {\n let doc = this.buildFrom([p])\n let parsed = parseVerb(doc)\n toNegative(parsed, doc.world)\n })\n return this\n },\n /** remove 'not' from these verbs */\n toPositive: function() {\n let m = this.match('do not #Verb')\n if (m.found) {\n m.remove('do not')\n }\n return this.remove('#Negative')\n },\n}\n","const methods = require('./methods')\n\nconst addMethod = function(Doc) {\n /** */\n class Verbs extends Doc {}\n // add-in our methods\n Object.assign(Verbs.prototype, methods)\n\n // aliases\n Verbs.prototype.negate = Verbs.prototype.toNegative\n\n Doc.prototype.verbs = function(n) {\n let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+')\n // try to ignore leading and trailing adverbs\n match = match.not('^#Adverb+')\n match = match.not('#Adverb+$')\n // handle commas:\n // don't split 'really, really'\n let keep = match.match('(#Adverb && @hasComma) #Adverb')\n // // but split the other commas\n let m = match.not(keep).splitAfter('@hasComma')\n // // combine them back together\n m = m.concat(keep)\n m.sort('index')\n //handle slashes?\n\n //ensure there's actually a verb\n m = m.if('#Verb')\n\n //grab (n)th result\n if (typeof n === 'number') {\n m = m.get(n)\n }\n let vb = new Verbs(m.list, this, this.world)\n return vb\n }\n return Doc\n}\nmodule.exports = addMethod\n","const addMethod = function(Doc) {\n /** */\n class People extends Doc {\n // honorifics(){}\n // firstNames(){}\n // lastNames(){}\n // pronouns(){}\n // toPronoun(){}\n // fromPronoun(){}\n }\n\n Doc.prototype.people = function(n) {\n let match = this.splitAfter('@hasComma')\n match = match.match('#Person+')\n\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return new People(match.list, this, this.world)\n }\n return Doc\n}\nmodule.exports = addMethod\n","const subsets = require('./_simple')\nconst subclass = [\n require('./Abbreviations'),\n require('./Acronyms'),\n require('./Clauses'),\n require('./Contractions'),\n require('./Lists'),\n require('./Nouns'),\n require('./Parentheses'),\n require('./Possessives'),\n require('./Quotations'),\n require('./Verbs'),\n require('./People'),\n]\n\nconst extend = function(Doc) {\n // add basic methods\n Object.keys(subsets).forEach(k => (Doc.prototype[k] = subsets[k]))\n // add subclassed methods\n subclass.forEach(addFn => addFn(Doc))\n return Doc\n}\nmodule.exports = extend\n","const methods = {\n misc: require('./methods'),\n selections: require('../Subset/_simple'),\n}\nconst tagger = require('../02-tagger')\nconst tokenize = require('../01-tokenizer')\nconst extend = require('../Subset')\n\n/** a parsed text object */\nclass Doc {\n constructor(list, from, world) {\n this.list = list\n //quiet these properties in console.logs\n Object.defineProperty(this, 'from', {\n enumerable: false,\n value: from,\n writable: true,\n })\n //borrow some missing data from parent\n if (world === undefined && from !== undefined) {\n world = from.world\n }\n //'world' getter\n Object.defineProperty(this, 'world', {\n enumerable: false,\n value: world,\n writable: true,\n })\n //fast-scans for our data\n Object.defineProperty(this, '_cache', {\n enumerable: false,\n writable: true,\n value: {},\n })\n //'found' getter\n Object.defineProperty(this, 'found', {\n get: () => this.list.length > 0,\n })\n //'length' getter\n Object.defineProperty(this, 'length', {\n get: () => this.list.length,\n })\n // this is way easier than .constructor.name...\n Object.defineProperty(this, 'isA', {\n get: () => 'Doc',\n })\n }\n\n /** run part-of-speech tagger on all results*/\n tagger() {\n return tagger(this)\n }\n\n /** pool is stored on phrase objects */\n pool() {\n if (this.list.length > 0) {\n return this.list[0].pool\n }\n return this.all().list[0].pool\n }\n}\n\n/** create a new Document object */\nDoc.prototype.buildFrom = function(list) {\n list = list.map(p => p.clone(true))\n // new this.constructor()\n let doc = new Doc(list, this, this.world)\n return doc\n}\n\n/** create a new Document from plaintext. */\nDoc.prototype.fromText = function(str) {\n let list = tokenize(str, this.world, this.pool())\n return this.buildFrom(list)\n}\n\nObject.assign(Doc.prototype, methods.misc)\nObject.assign(Doc.prototype, methods.selections)\n\n//add sub-classes\nextend(Doc)\n\n//aliases\nconst aliases = {\n untag: 'unTag',\n and: 'match',\n notIf: 'ifNo',\n only: 'if',\n onlyIf: 'if',\n}\nObject.keys(aliases).forEach(k => (Doc.prototype[k] = Doc.prototype[aliases[k]]))\nmodule.exports = Doc\n","const lexiconStep = require('./01-init/01-lexicon')\n\n//for the tokenize-only build, we want to keep\nconst smallTagger = function(doc) {\n let terms = doc.termList()\n lexiconStep(terms, doc.world)\n return doc\n}\nmodule.exports = smallTagger\n","const tokenize = require('./01-tokenizer')\nconst fromJSON = require('./01-tokenizer/fromJSON')\nconst version = require('./_version')\nconst World = require('./World/World')\nconst Doc = require('./Doc/Doc')\nconst Phrase = require('./Phrase/Phrase')\nconst Term = require('./Term/Term')\nconst Pool = require('./01-tokenizer/Pool')\nconst tinyTagger = require('./02-tagger/tiny')\n\nfunction instance(worldInstance) {\n //blast-out our word-lists, just once\n let world = worldInstance\n\n /** parse and tag text into a compromise object */\n const nlp = function(text = '', lexicon) {\n if (lexicon) {\n world.addWords(lexicon)\n }\n let list = tokenize(text, world)\n let doc = new Doc(list, null, world)\n doc.tagger()\n return doc\n }\n\n /** parse text into a compromise object, without running POS-tagging */\n nlp.tokenize = function(text = '', lexicon) {\n let w = world\n if (lexicon) {\n w = w.clone()\n w.words = {}\n w.addWords(lexicon)\n }\n let list = tokenize(text, w)\n let doc = new Doc(list, null, w)\n if (lexicon) {\n tinyTagger(doc)\n }\n return doc\n }\n\n /** mix in a compromise-plugin */\n nlp.extend = function(fn) {\n fn(Doc, world, this, Phrase, Term, Pool)\n return this\n }\n\n /** create a compromise Doc object from .json() results */\n nlp.fromJSON = function(json) {\n let list = fromJSON(json, world)\n return new Doc(list, null, world)\n }\n\n /** make a deep-copy of the library state */\n nlp.clone = function() {\n return instance(world.clone())\n }\n\n /** log our decision-making for debugging */\n nlp.verbose = function(bool = true) {\n world.verbose(bool)\n return this\n }\n\n /** current version of the library */\n nlp.version = version\n // alias\n nlp.import = nlp.load\n\n return nlp\n}\n\nmodule.exports = instance(new World())\n"],"names":["chars","split","makeId","str","text","i","Math","floor","random","length","compact","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","unicode","Object","keys","forEach","killUnicode","join","periodAcronym","oneLetterAcronym","noPeriodAcronym","lowerCaseAcronym","isAcronym","test","hasSlash","clean","toLowerCase","trim","original","replace","reduced","startings","endings","hasApostrophe","hasAcronym","minusNumber","parseTerm","pre","post","found","after","normalize","parsed","reduce","word","alias","titleCase","upperCase","exports","toUpperCase","isTitleCase","startQuote","endQuote","punct","indexOf","hasQuote","hasPost","hasPre","hyphen","Boolean","implicit","wrapMatch","doesMatch","reg","index","id","anything","start","end","undefined","hasOwnProperty","soft","root","tag","tags","method","regex","oneOf","choices","operator","every","some","result","negative","boring","world","transform","transforms","Plural","toSingular","Verb","Negative","Infinitive","tense","PastTense","Gerund","PresentTense","Participle","Actor","toInfinitive","hasSpace","isUpperCase","options","showPre","showPost","before","normal","titlecase","ProperNoun","Acronym","lowercase","acronyms","whitespace","last","punctuation","hasEllipses","abbreviations","Abbreviation","boringTags","Auxiliary","Possessive","rankTags","term","tagSet","sort","lineage","isA","jsonDefault","offset","bestTag","assign","require$$0","require$$1","require$$2","require$$3","require$$4","isClientSide","window","document","padEnd","width","toString","reason","console","log","arr","prototype","call","charAt","substr","addTag","tagset","fns","isVerbose","logTag","down","unTag","notA","addTags","logUntag","untagAll","canBe","enemies","add","Term","String","obj","prev","next","clone","methods","tagMethods","cache","terms","pool","get","error","push","isShallow","buildFrom","newTerms","map","wantId","lastId","filter","len","trimEnd","isFirst","isLast","isFull","txt","textOut","lastTerm","endOfSentence","combinePost","match","addWhitespace","beforeTerms","newTerm","stitchIn","lastBefore","lastNew","afterId","afterTerm","beforeId","unique","list","appendPhrase","newPhrase","doc","toStretch","hasId","docs","concat","parents","parent","shouldChange","main","joinPhrase","starterId","shrinkAll","deleteLength","phrase","find","deletePhrase","set","append","prepend","firstLength","tmp","findIndex","slice","res","json","regs","getAfter","all","getBefore","require$$5","failFast","optional","getGreedy","until","count","max","min","greedyTo","nextReg","getOrCreateGroup","namedGroups","namedGroupId","startIndex","group","tryHere","previousGroupId","isNamedGroup","named","hasNeeds","remain","greedy","skipto","startAt","isImplicit","postProcess","matches","atEnd","hasMinMax","andSign","captureName","RegExp","stripStart","stripEnd","stripBoth","parseToken","groupType","exec","Number","isNamed","capture","fillGroups","tokens","convert","current","useOneOf","token","shouldPack","isArray","byParentheses","byWords","words","byArray","fromDoc","ids","syntax","input","matchAll","matchOne","minLength","tryMatch","groups","notMatch","ts","justOne","results","previous","can","Phrase","defineProperty","enumerable","writable","value","matchMethods","aliases","Pool","linkTerms","initSplit","hasSomething","hasEllipse","newLine","hasLetter","startWhitespace","naiive_split","lines","isSentence","abbrevs","lastWord","splitSentences","sentences","chunks","splits","ws","wordlike","isBoundary","naiiveSplit","isSlash","notWord","hasHyphen","combineSlashes","splitHyphens","hyphens","whichDash","splitWords","carry","fromText","splitTerms","phrases","fromJSON","entity","Noun","Singular","Person","FirstName","MaleName","FemaleName","LastName","NickName","Honorific","Place","Country","City","Region","Address","Organization","SportsTeam","School","Company","Uncountable","Pronoun","Activity","Unit","Demonym","FutureTense","Copula","Modal","PerfectTense","Pluperfect","PhrasalVerb","Particle","Value","Ordinal","Cardinal","RomanNumeral","TextValue","NumericValue","Money","Percent","Adjective","Comparable","Comparative","Superlative","NumberRange","Adverb","Date","Month","WeekDay","Time","Determiner","Conjunction","Preposition","QuestionWord","Currency","Expression","Url","PhoneNumber","HashTag","AtMention","Emoji","Emoticon","Email","Condition","colorMap","addColors","color","inferIsA","inferNotA","key","inferLineage","validate","inferTags","inferColor","addIn","build","nouns","verbs","values","misc","seq","toAlphaCode","fromCharCode","fromAlphaCode","charCodeAt","encoding","symbols","nodes","symCount","syms","indexFromRef","toArray","unpack","unpack_1","unpack_1$1","Array","addWord","lex","addMore","lexicon","hasCompound","plural","toPlural","conj","conjugate","adjectives","addIrregulars","irregulars","inf","forms","g8","vh1","q1","q2","q3","q4","addendum","alga","alumna","alumnus","analysis","antenna","appendix","avocado","axis","bacillus","barracks","beau","bus","cactus","chateau","child","circus","clothes","corpus","criterion","curriculum","database","deer","diagnosis","echo","embargo","epoch","foot","formula","fungus","genus","goose","halo","hippopotamus","larva","leaf","libretto","loaf","man","matrix","memorandum","modulus","mosquito","mouse","move","nebula","nucleus","octopus","opus","ovum","ox","parenthesis","person","phenomenon","prognosis","quiz","radius","referendum","rodeo","sex","shoe","sombrero","stimulus","stomach","syllabus","synopsis","tableau","thesis","thief","tooth","tornado","tuxedo","vertebra","mapping","prt","perf","pst","fut","pres","pluperf","conjugations","act","ache","age","aim","arise","babysit","ban","be","beat","become","begin","being","bend","bet","bind","bite","bleed","blow","boil","brake","breed","bring","broadcast","budget","burn","burst","buy","choose","cling","come","compete","cost","creep","cut","deal","develop","die","dig","dive","draw","dream","drink","drive","drop","eat","edit","egg","fall","feed","feel","fight","flee","fling","fly","forbid","forget","forgive","free","freeze","give","go","grow","hang","have","hear","hide","hit","hold","hurt","ice","imply","is","keep","kneel","know","lay","lead","leap","leave","lend","lie","light","loose","lose","make","mean","meet","miss","name","pay","prove","puke","put","quit","read","ride","ring","rise","rub","run","say","seat","see","seek","sell","send","sew","shake","shave","shed","shine","shoot","show","shut","sing","sink","sit","ski","slay","sleep","slide","smash","sneak","speak","speed","spend","spill","spin","spit","spread","spring","stand","steal","stick","sting","stink","stream","strew","strike","suit","sware","swear","sweep","swim","swing","take","teach","tear","tell","think","thrive","tie","undergo","understand","upset","wait","wake","wear","weave","wed","weep","win","wind","withdraw","wring","write","final","full","endsWith","repl","pr","pa","gr","ar","posMap","doTransform","pos","checkSuffix","suffixes","hasY","generic","genericFill","do_rules","dont_rules","nice","late","hard","inner","outer","far","worse","bad","good","big","large","to_superlative","grey","gray","green","yellow","red","well","sad","to_comparative","toSuperlative","toComparative","sup","comp","addE","trySuffix","rules","pluralize","invertObj","invert","to","guessVerb","guessTense","three","guess","two","one","irregs","rule","require$$6","World","defaultTags","unpackWords","lexData","getByTag","bool","addLex","inferTagSet","fn","taggers","plurals","compounds","postProcessors","JSON","parse","stringify","w2","from","addParent","reverse","doShallow","wordCount","eq","firstTerms","lastTerms","num","getGroups","allGroups","getOneName","target","fullSentence","cacheRequired","needTags","needWords","_cache","parseSyntax","checkCache","not","has","lookAhead","lookBehind","befores","tagTerms","safe","tagList","why","setTag","detachParent","sub","tokenize","buildTree","termList","val","more","rest","fastLookup","everyTerm","isObject","isObj","lookup","byVal","setRoot","keepTags","uncache","newPhrases","merge","keepCase","tmpDoc","tagger","oldTags","tagSafe","replaceWith","arguments","arg","toRemove","shouldTrim","showFull","trimPre","trimPost","termOffsets","elapsed","offsets","calcOffset","jsonDefaults","setOptions","frequency","freq","already","reset","css","blue","magenta","cyan","black","logClientSide","cli","tagString","debug","module","topk","alpha","left","right","byFreq","counts","sortSequential","order","alphabetical","wordcount","seqNames","sequence","sequential","chron","chronological","isPunct","quotes","termArr","hasDash","quotations","adverbs","remove","defaults","emoji","contractions","parentheses","possessives","honorifics","medium","heavy","strip","contraction","expand","unwrap","possessive","splitOn","foundEm","parts","splitAfter","splitBefore","segment","eachTerm","toTitleCase","dehyphenate","toQuotations","removed","increase","postPunct","setContraction","suffix","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","emojis","atmentions","atMentions","phoneNumbers","money","places","organizations","clauses","entities","yup","people","ignore","things","topics","underOver","tryMultiple","checkLexicon","foundWords","noPrefix","apostrophes","checkPunctuation","endChar","romanNumeral","romanNumValid","checkRegex","Adj","Inf","Pres","Sing","Past","Exp","Last","Avb","Plrl","Vb","ea","ia","ic","ly","oed","ued","xed","azy","ped","ffy","ify","ing","ize","lar","mum","nes","nny","oid","ous","que","rmy","rol","sis","zes","amed","aped","ched","lked","nded","cted","dged","akis","cede","chuk","czyk","ects","ends","enko","ette","fies","fore","gate","gone","ices","ints","ions","less","llen","made","nsen","oses","ould","sson","tage","teen","tion","tive","tors","vice","tized","urned","eased","ances","bound","ettes","fully","ishes","ities","marek","nssen","ology","ports","rough","tches","tieth","tures","wards","where","auskas","keeper","logist","teenth","opoulos","sdottir","endRegexs","char","knownSuffixes","suffixMap","emojiReg","isCommaEmoji","raw","isEmoticon","emoticon","tagEmoji","steps","lookups","afterThisWord","first","it","there","because","but","who","his","when","you","very","old","never","beforeThisWord","me","only","him","were","took","himself","went","jr","afterThisPOS","beforeThisPOS","beforeThisPos","afterThisPos","afterKeys","markov","beforeKeys","checkNeighbours","isKnown","foundTag","nextTerm","hasNumber","checkCase","hasPrefix","prefix","checkPrefix","stem","isPlural","isSingular","noPlurals","notPlural","notSingular","checkPlural","orgWords","maybeOrg","Comma","tagOrgs","periodSeperated","oneLetterWord","A","checkAcronym","step","neighbours","fallbacks","hasNegative","wont","cant","cannot","dont","dun","doAint","noun","checkNegative","easy","ll","ve","re","checkApostrophe","wanna","gonna","im","alot","ive","imma","whered","whend","howd","whatd","dunno","brb","gtg","irl","tbh","imo","til","rn","twas","checkIrregulars","hasApostropheS","blacklist","that","isPossessive","twoTerm","isHas","checkPossessive","hasPerfect","useDid","how","what","checkPerfect","isRange","checkRange","french","qu","checkFrench","isNumber","createPhrase","firstTerm","hasWord","hasTag","miscCorrection","notIf","ifNo","dates","months","allLists","lists","newM","enumerated","required","hasEvery","chances","runner","allChances","worthIt","tryDoc","corrections","fixMisc","init","addMethod","Doc","Abbreviations","stripPeriods","hasPeriod","Acronyms","commas","conjunctions","condition","tooLong","Contractions","contracted","isTitlecase","expanded","isExpanded","isContracted","beforeLast","conjunction","hasOxford","Lists","addPunctuation","items","needsComma","nounList","adjList","verbList","noPlural","hasPlural","hour","heir","heirloom","honest","honour","honor","uber","an_acronyms","a_regexs","makeArticle","firstLetter","endS","exceptions","he","she","they","we","her","their","our","my","your","toPossessive","article","getArticle","agree","an","lookBefore","adj","insertBefore","Nouns","open","close","Parentheses","Possessives","pairs","hasOpen","Quotations","want","verb","findNoun","vb","auxiliary","toNegative","parseVerb","adverb","particle","adverbAfter","toBe","isI","isNegative","out","infinitive","space","advb","toPastTense","toPresentTense","toFutureTense","toGerund","isPositive","toPositive","Verbs","negate","People","subclass","extend","subsets","addFn","selections","untag","and","onlyIf","smallTagger","lexiconStep","instance","worldInstance","nlp","addWords","tinyTagger","verbose","version","load"],"mappings":"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"} \ No newline at end of file diff --git a/builds/compromise.min.js b/builds/compromise.min.js index 18ea5f89d..5c4e636be 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},J=Object.assign({},x,C,V,I,_);function q(){return"undefined"!=typeof window&&window.document}var W=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();re.prototype.clone=function(){var e=new re(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(re.prototype,J),Object.assign(re.prototype,te);var ne=re,ae={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=ie(i)),!0===e.trim&&(i=i.trim()),i}},se={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},ue=/[.?!]\s*$/,le=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,ue.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ce=function(e,t,r){var n=e.terms(),a=t.terms();le(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},he=/ /,de=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===he.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},pe=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},ge={append:function(e,t){return ce(this,e,t),this},prepend:function(e,t){return de(this,e,t),this},delete:function(e){return pe(this,e),this},replace:function(e,t){var r=this.length;ce(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,pe(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},fe={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},me={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ve=Object.assign({},ae,oe,se,ge,fe,me),be=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},ye=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=we(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(ke(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},$e=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Ge=/\{([0-9]+,?[0-9]*)\}/,Pe=/&&/,Fe=new RegExp(/^<(\S+)>/),Be=function(e){return e[e.length-1]},De=function(e){return e[0]},je=function(e){return e.substr(1)},xe=function(e){return e.substr(0,e.length-1)},Ce=function(e){return e=je(e),e=xe(e)},Ee=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Be(t)&&(n.end=!0,t=xe(t)),"^"===De(t)&&(n.start=!0,t=je(t)),("["===De(t)||"]"===Be(t))&&(n.named=!0,"["===De(t)?n.groupType="]"===Be(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===De(t))){var i=Fe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Be(t)&&(n.greedy=!0,t=xe(t)),"*"!==t&&"*"===Be(t)&&"\\*"!==t&&(n.greedy=!0,t=xe(t)),"?"===Be(t)&&(n.optional=!0,t=xe(t)),"!"===De(t)&&(n.negative=!0,t=je(t)),"("===De(t)&&")"===Be(t)){Pe.test(t)?(n.choices=t.split(Pe),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=je(n.choices[0]);var o=n.choices.length-1;n.choices[o]=xe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===De(t)&&"/"===Be(t))return t=Ce(t),n.regex=new RegExp(t),n;if("~"===De(t)&&"~"===Be(t))return t=Ce(t),n.soft=!0,n.word=t,n}return!0===Ge.test(t)&&(t=t.replace(Ge,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===De(t)?(n.tag=je(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===De(t)?(n.method=je(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Ne=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Ee),r=Ne(r)},Te=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Oe(t)),!0===be(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ae(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),$e(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ae(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return $e(a,t,i)}return $e(a,t,i)},Ve=function(e,t){var r={};Te(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},ze={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Te(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Te(this,e,!0).length>0},not:function(e){var t=this,r=Ve(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},He=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};He.prototype.buildFrom=function(e,t,r){var n=new He(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(He.prototype,ze),Object.assign(He.prototype,ve);var Ie={term:"terms"};Object.keys(Ie).forEach((function(e){return He.prototype[e]=He.prototype[Ie[e]]}));var Me=He,Se=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Se.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Se(t)};for(var Le=Se,_e=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,qe=/\S/,We=/[ .][A-Z]\.? *$/i,Ke=/(?:\u2026|\.{2,}) *$/,Re=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ue=/^\s+/,Ze=function(e,t){if(!0===We.test(e))return!1;if(!0===Ke.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Xe=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===qe.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Re),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Xe(e,t);n=n.map((function(e){return ot(e)})),r=r||new Le;var a=n.map((function(e){e=e.map((function(e){var t=new ne(e);return r.add(t),t})),_e(e);var t=new Me(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},ut=function(e,t){var r=new Le;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ne(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return _e(a),new Me(a[0].id,a.length,r)}))},lt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ct=["Person","Place","Organization"],ht={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ct},Actor:{isA:"Noun",notA:ct},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ct},Demonym:{isA:["Noun","ProperNoun"],notA:ct},Possessive:{isA:"Noun"}},dt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},pt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},gt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ft={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:gt},Conjunction:{notA:gt},Preposition:{notA:gt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},mt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},vt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:mt[t]?e[t].color=mt[t]:e[t].isA.some((function(r){return!!mt[r]&&(e[t].color=mt[r],!0)}))})),e},bt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Bt=function(e,t,r){var n=Ft(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===St.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Rt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Ut={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Zt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],Yt=[/ary$/,/ous$/],er={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},tr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],rr={toSuperlative:function(e){if(Ut.hasOwnProperty(e))return Ut[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=or(e);return null!==n?n:ir.test(e)?e+"es":e+"s"},ur=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],lr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Gr={tag:function(e,t){return e?($r(e,this,!1,t),this):this},tagSafe:function(e,t){return e?($r(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Pr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Fr=function(e){return e.split(/[ -]/g)},Br=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Fr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=xr(o)),i=st(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Er=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=st(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Tr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),zr=(Vr.json,Vr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Mr.alphabetical=Mr.alpha,Mr.wordcount=Mr.wordCount;var Sr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Lr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Sr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===sn.test(i)){var s=i.replace(sn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},cn=/[\'‘’‛‵′`´]$/,hn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],dn=/^[IVXLCDM]{2,}$/,pn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,gn="Adjective",fn="Infinitive",mn="PresentTense",vn="Singular",bn="PastTense",yn="Expression",wn="LastName",kn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,wn],[/.[^aeiou]ica$/,vn],[/^([hyj]a)+$/,yn]],c:[[/.[^aeiou]ic$/,gn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,bn],[/.[aeo]{2}[bdgmnprvz]ed$/,bn],[/.[aeiou][sg]hed$/,bn],[/.[aeiou]red$/,bn],[/.[aeiou]r?ried$/,bn],[/.[bcdgtr]led$/,bn],[/.[aoui]f?led$/,bn],[/.[iao]sed$/,bn],[/[aeiou]n?[cs]ed$/,bn],[/[aeiou][rl]?[mnf]ed$/,bn],[/[aeiou][ns]?c?ked$/,bn],[/[aeiou][nl]?ged$/,bn],[/.[tdbwxz]ed$/,bn],[/[^aeiou][aeiou][tvx]ed$/,bn],[/.[cdlmnprstv]ied$/,bn],[/[^aeiou]ard$/,vn],[/[aeiou][^aeiou]id$/,gn],[/.[vrl]id$/,gn]],e:[[/.[lnr]ize$/,fn],[/.[^aeiou]ise$/,fn],[/.[aeiou]te$/,fn],[/.[^aeiou][ai]ble$/,gn],[/.[^aeiou]eable$/,gn],[/.[ts]ive$/,gn]],h:[[/.[^aeiouf]ish$/,gn],[/.v[iy]ch$/,wn],[/^ug?h+$/,yn],[/^uh[ -]?oh$/,yn]],i:[[/.[oau][wvl]ski$/,wn]],k:[[/^(k)+$/,yn]],l:[[/.[gl]ial$/,gn],[/.[^aeiou]ful$/,gn],[/.[nrtumcd]al$/,gn],[/.[^aeiou][ei]al$/,gn]],m:[[/.[^aeiou]ium$/,vn],[/[^aeiou]ism$/,vn],[/^h*u*m+$/,yn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,gn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,yn],[/^(yo)+$/,yn],[/^woo+[pt]?$/,yn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,vn],[/[^i]fer$/,fn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,gn],[/[aeiou].*ist$/,gn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,mn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,vn],[/.[aeiou]sks$/,mn],[/.[aeiou]kes$/,mn],[/[aeiou][^aeiou]is$/,vn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,yn]],v:[[/.[^aeiou][ai][kln]ov$/,wn]],y:[[/.[cts]hy$/,gn],[/.[st]ty$/,gn],[/.[gk]y$/,gn],[/.[tnl]ary$/,gn],[/.[oe]ry$/,vn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,gn],[/.(gg|bb|zz)ly$/,gn],[/.[aeiou]my$/,gn],[/[ea]{2}zy$/,gn],[/.[^aeiou]ity$/,vn]]},An="Adjective",$n="Infinitive",Gn="PresentTense",Pn="Singular",Fn="PastTense",Bn="Adverb",Dn="Plural",jn="Verb",xn="LastName",Cn=[null,null,{ea:Pn,ia:"Noun",ic:An,ly:Bn,"'n":jn,"'t":jn},{oed:Fn,ued:Fn,xed:Fn," so":Bn,"'ll":"Modal","'re":"Copula",azy:An,end:jn,ped:Fn,ffy:An,ify:$n,ing:"Gerund",ize:$n,lar:An,mum:An,nes:Gn,nny:An,oid:An,ous:An,que:An,rmy:An,rol:Pn,sis:Pn,zes:Gn},{amed:Fn,aped:Fn,ched:Fn,lked:Fn,nded:Fn,cted:Fn,dged:Fn,akis:xn,cede:$n,chuk:xn,czyk:xn,ects:Gn,ends:jn,enko:xn,ette:Pn,fies:Gn,fore:Bn,gate:$n,gone:An,ices:Dn,ints:Dn,ions:Dn,less:Bn,llen:An,made:An,nsen:xn,oses:Gn,ould:"Modal",some:An,sson:xn,tage:$n,teen:"Value",tion:Pn,tive:An,tors:"Noun",vice:Pn},{tized:Fn,urned:Fn,eased:Fn,ances:Dn,bound:An,ettes:Dn,fully:Bn,ishes:Gn,ities:Dn,marek:xn,nssen:xn,ology:"Noun",ports:Dn,rough:An,tches:Gn,tieth:"Ordinal",tures:Dn,wards:Bn,where:Bn},{auskas:xn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:xn,sdottir:xn}],En={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}},regex:function(e,t){for(var r=e.text,n=0;n=2&&dn.test(r)&&pn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Cn[i.length].hasOwnProperty(i)){var o=Cn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===kn.hasOwnProperty(n))for(var a=kn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Nn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),En.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Tn=function(e,t){var r=e.world;On.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Wn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Kn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Rn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Qn=[/i$/,/ae$/],Un=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Kn.find((function(t){return e.tags[t]})))return;if(Wn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Wn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Rn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Qn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Zn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),Xn=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},Yn=/^[A-Z]('s|,)?$/,ea=/([A-Z]\.){2}[A-Z]?/i,ta={I:!0,A:!0},ra={neighbours:In,case:Ln,stem:qn,plural:Un,organizations:function(e,t){for(var r=0;r0?La=La.concat(t):La.push(e)})),La.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Da(r),words:Da(n)}),e}));var _a=La,Ja=function(e){_a.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Da(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Za=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Wa(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Di.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Di(e,this,this.world)},Di.prototype.fromText=function(e){var t=st(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Di.prototype,Bi.misc),Object.assign(Di.prototype,Bi.selections),Fi(Di);var ji={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(ji).forEach((function(e){return Di.prototype[e]=Di.prototype[ji[e]]}));var xi=Di,Ci=function(e){var t=e.termList();return ln(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=st(e,r),a=new xi(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=st(e,n),i=new xi(a,null,n);return t&&Ci(i),i},n.extend=function(e){return e(xi,r,this,Me,ne,Le),this},n.fromJSON=function(e){var t=ut(e,r);return new xi(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.version="13.1.1",n.import=n.load,n}(new br)})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},q=Object.assign({},x,E,z,I,_);function J(){return"undefined"!=typeof window&&window.document}var K=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();ne.prototype.clone=function(){var e=new ne(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(ne.prototype,q),Object.assign(ne.prototype,re);var ae=ne,ie={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=oe(i)),!0===e.trim&&(i=i.trim()),i}},ue={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},le=/[.?!]\s*$/,ce=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,le.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},he=function(e,t,r){var n=e.terms(),a=t.terms();ce(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},de=/ /,pe=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===de.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},ge=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return he(this,e,t),this},prepend:function(e,t){return pe(this,e,t),this},delete:function(e){return ge(this,e),this},replace:function(e,t){var r=this.length;he(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,ge(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},ve={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},be=Object.assign({},ie,se,ue,fe,me,ve),ye=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},we=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=ke(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(Ae(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},Be=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Pe=/\{([0-9]+,?[0-9]*)\}/,Ge=/&&/,Ce=new RegExp(/^<(\S+)>/),De=function(e){return e[e.length-1]},je=function(e){return e[0]},xe=function(e){return e.substr(1)},Ee=function(e){return e.substr(0,e.length-1)},Ne=function(e){return e=xe(e),e=Ee(e)},Fe=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===De(t)&&(n.end=!0,t=Ee(t)),"^"===je(t)&&(n.start=!0,t=xe(t)),("["===je(t)||"]"===De(t))&&(n.named=!0,"["===je(t)?n.groupType="]"===De(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===je(t))){var i=Ce.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===De(t)&&(n.greedy=!0,t=Ee(t)),"*"!==t&&"*"===De(t)&&"\\*"!==t&&(n.greedy=!0,t=Ee(t)),"?"===De(t)&&(n.optional=!0,t=Ee(t)),"!"===je(t)&&(n.negative=!0,t=xe(t)),"("===je(t)&&")"===De(t)){Ge.test(t)?(n.choices=t.split(Ge),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=xe(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Ee(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===je(t)&&"/"===De(t))return t=Ne(t),n.regex=new RegExp(t),n;if("~"===je(t)&&"~"===De(t))return t=Ne(t),n.soft=!0,n.word=t,n}return!0===Pe.test(t)&&(t=t.replace(Pe,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===je(t)?(n.tag=xe(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===je(t)?(n.method=xe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Oe=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Fe),r=Oe(r)},ze=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Te(t)),!0===ye(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=$e(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),Be(a,t,i)}for(var h=0;ha.length);h+=1){var d=$e(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return Be(a,t,i)}return Be(a,t,i)},He=function(e,t){var r={};ze(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ve={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=ze(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return ze(this,e,!0).length>0},not:function(e){var t=this,r=He(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},Ie=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Ie.prototype.buildFrom=function(e,t,r){var n=new Ie(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Ie.prototype,Ve),Object.assign(Ie.prototype,be);var Me={term:"terms"};Object.keys(Me).forEach((function(e){return Ie.prototype[e]=Ie.prototype[Me[e]]}));var Se=Ie,Le=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Le.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Le(t)};for(var _e=Le,qe=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ke=/\S/,We=/[ .][A-Z]\.? *$/i,Re=/(?:\u2026|\.{2,}) *$/,Ue=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ze=/^\s+/,Xe=function(e,t){if(!0===We.test(e))return!1;if(!0===Re.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Ye=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Ke.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Ue),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Ye(e,t);n=n.map((function(e){return st(e)})),r=r||new _e;var a=n.map((function(e){e=e.map((function(e){var t=new ae(e);return r.add(t),t})),qe(e);var t=new Se(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},lt=function(e,t){var r=new _e;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ae(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return qe(a),new Se(a[0].id,a.length,r)}))},ct={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ht=["Person","Place","Organization"],dt={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ht},Actor:{isA:"Noun",notA:ht},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ht},Demonym:{isA:["Noun","ProperNoun"],notA:ht},Possessive:{isA:"Noun"}},pt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},gt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ft=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],mt={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ft},Conjunction:{notA:ft},Preposition:{notA:ft},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},vt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},bt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:vt[t]?e[t].color=vt[t]:e[t].isA.some((function(r){return!!vt[r]&&(e[t].color=vt[r],!0)}))})),e},yt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Dt=function(e,t,r){var n=Ct(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Lt.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Ut=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Zt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Xt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Yt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],er=[/ary$/,/ous$/],tr={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},rr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],nr={toSuperlative:function(e){if(Zt.hasOwnProperty(e))return Zt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=sr(e);return null!==n?n:or.test(e)?e+"es":e+"s"},lr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(eas)es$/i,"$1e"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],cr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Pr={tag:function(e,t){return e?(Br(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(Br(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Gr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Cr=function(e){return e.split(/[ -]/g)},Dr=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Cr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=Er(o)),i=ut(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Fr=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ut(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ut(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&zr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Vr=(Hr.json,Hr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Sr.alphabetical=Sr.alpha,Sr.wordcount=Sr.wordCount;var Lr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},_r={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Lr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===un.test(i)){var s=i.replace(un,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},hn=/[\'‘’‛‵′`´]$/,dn=/^(m|k|cm|km|m)\/(s|h|hr)$/,pn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],gn=/^[IVXLCDM]{2,}$/,fn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,mn="Adjective",vn="Infinitive",bn="PresentTense",yn="Singular",wn="PastTense",kn="Expression",An="LastName",$n={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,An],[/.[^aeiou]ica$/,yn],[/^([hyj]a)+$/,kn]],c:[[/.[^aeiou]ic$/,mn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,wn],[/.[aeo]{2}[bdgmnprvz]ed$/,wn],[/.[aeiou][sg]hed$/,wn],[/.[aeiou]red$/,wn],[/.[aeiou]r?ried$/,wn],[/.[bcdgtr]led$/,wn],[/.[aoui]f?led$/,wn],[/.[iao]sed$/,wn],[/[aeiou]n?[cs]ed$/,wn],[/[aeiou][rl]?[mnf]ed$/,wn],[/[aeiou][ns]?c?ked$/,wn],[/[aeiou][nl]?ged$/,wn],[/.[tdbwxz]ed$/,wn],[/[^aeiou][aeiou][tvx]ed$/,wn],[/.[cdlmnprstv]ied$/,wn],[/[^aeiou]ard$/,yn],[/[aeiou][^aeiou]id$/,mn],[/.[vrl]id$/,mn]],e:[[/.[lnr]ize$/,vn],[/.[^aeiou]ise$/,vn],[/.[aeiou]te$/,vn],[/.[^aeiou][ai]ble$/,mn],[/.[^aeiou]eable$/,mn],[/.[ts]ive$/,mn]],h:[[/.[^aeiouf]ish$/,mn],[/.v[iy]ch$/,An],[/^ug?h+$/,kn],[/^uh[ -]?oh$/,kn]],i:[[/.[oau][wvl]ski$/,An]],k:[[/^(k){2}$/,kn]],l:[[/.[gl]ial$/,mn],[/.[^aeiou]ful$/,mn],[/.[nrtumcd]al$/,mn],[/.[^aeiou][ei]al$/,mn]],m:[[/.[^aeiou]ium$/,yn],[/[^aeiou]ism$/,yn],[/^h*u*m+$/,kn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,mn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,kn],[/^(yo)+$/,kn],[/^woo+[pt]?$/,kn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,yn],[/[^i]fer$/,vn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,mn],[/[aeiou].*ist$/,mn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,bn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,yn],[/.[aeiou]sks$/,bn],[/.[aeiou]kes$/,bn],[/[aeiou][^aeiou]is$/,yn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,kn]],v:[[/.[^aeiou][ai][kln]ov$/,An]],y:[[/.[cts]hy$/,mn],[/.[st]ty$/,mn],[/.[gk]y$/,mn],[/.[tnl]ary$/,mn],[/.[oe]ry$/,yn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,mn],[/.(gg|bb|zz)ly$/,mn],[/.[aeiou]my$/,mn],[/[ea]{2}zy$/,mn],[/.[^aeiou]ity$/,yn]]},Bn="Adjective",Pn="Infinitive",Gn="PresentTense",Cn="Singular",Dn="PastTense",jn="Adverb",xn="Plural",En="Verb",Nn="LastName",Fn=[null,null,{ea:Cn,ia:"Noun",ic:Bn,ly:jn,"'n":En,"'t":En},{oed:Dn,ued:Dn,xed:Dn," so":jn,"'ll":"Modal","'re":"Copula",azy:Bn,end:En,ped:Dn,ffy:Bn,ify:Pn,ing:"Gerund",ize:Pn,lar:Bn,mum:Bn,nes:Gn,nny:Bn,oid:Bn,ous:Bn,que:Bn,rmy:Bn,rol:Cn,sis:Cn,zes:Gn},{amed:Dn,aped:Dn,ched:Dn,lked:Dn,nded:Dn,cted:Dn,dged:Dn,akis:Nn,cede:Pn,chuk:Nn,czyk:Nn,ects:Gn,ends:En,enko:Nn,ette:Cn,fies:Gn,fore:jn,gate:Pn,gone:Bn,ices:xn,ints:xn,ions:xn,less:jn,llen:Bn,made:Bn,nsen:Nn,oses:Gn,ould:"Modal",some:Bn,sson:Nn,tage:Pn,teen:"Value",tion:Cn,tive:Bn,tors:"Noun",vice:Cn},{tized:Dn,urned:Dn,eased:Dn,ances:xn,bound:Bn,ettes:xn,fully:jn,ishes:Gn,ities:xn,marek:Nn,nssen:Nn,ology:"Noun",ports:xn,rough:Bn,tches:Gn,tieth:"Ordinal",tures:xn,wards:jn,where:jn},{auskas:Nn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Nn,borough:"Place",sdottir:Nn}],On={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}dn.test(n.text)&&n.tag("Unit","per-sec",r)},regex:function(e,t){for(var r=e.text,n=0;n=2&&gn.test(r)&&fn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Fn[i.length].hasOwnProperty(i)){var o=Fn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===$n.hasOwnProperty(n))for(var a=$n[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Tn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),On.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Hn=function(e,t){var r=e.world;zn.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Rn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Un=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Qn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Zn=[/i$/,/ae$/],Xn=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Un.find((function(t){return e.tags[t]})))return;if(Rn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Rn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Qn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Zn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Yn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),ea=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},ta=/^[A-Z]('s|,)?$/,ra=/([A-Z]\.){2}[A-Z]?/i,na={I:!0,A:!0},aa={neighbours:Sn,case:qn,stem:Wn,plural:Xn,organizations:function(e,t){for(var r=0;r0?qa=qa.concat(t):qa.push(e)})),qa.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:xa(r),words:xa(n)}),e}));var Ja=qa,Ka=function(e){Ja.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=xa(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Ya=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Ra(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();xi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new xi(e,this,this.world)},xi.prototype.fromText=function(e){var t=ut(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(xi.prototype,ji.misc),Object.assign(xi.prototype,ji.selections),Di(xi);var Ei={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ei).forEach((function(e){return xi.prototype[e]=xi.prototype[Ei[e]]}));var Ni=xi,Fi=function(e){var t=e.termList();return cn(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=ut(e,r),a=new Ni(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=ut(e,n),i=new Ni(a,null,n);return t&&Fi(i),i},n.extend=function(e){return e(Ni,r,this,Se,ae,_e),this},n.fromJSON=function(e){var t=lt(e,r);return new Ni(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.world=function(){return r},n.version="13.1.1",n.import=n.load,n}(new yr)})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index ffef74236..ae68d9bea 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -1045,14 +1045,26 @@ var addTags = function addTags(term, tags, reason, world) { var add = addTags; +var lowerCase = /^[a-z]/; + +var titleCase$1 = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); +}; /** remove this tag, and its descentents from the term */ + var unTag = function unTag(t, tag, reason, world) { var isVerbose = world.isVerbose(); //support '*' for removing all tags if (tag === '*') { t.tags = {}; return t; + } + + tag = tag.replace(/^#/, ''); + + if (lowerCase.test(tag) === true) { + tag = titleCase$1(tag); } // remove the tag @@ -2283,7 +2295,7 @@ var hasMinMax = /\{([0-9]+,?[0-9]*)\}/; var andSign = /&&/; var captureName = new RegExp(/^<(\S+)>/); -var titleCase$1 = function titleCase(str) { +var titleCase$2 = function titleCase(str) { return str.charAt(0).toUpperCase() + str.substr(1); }; @@ -2438,7 +2450,7 @@ var parseToken = function parseToken(w) { if (start(w) === '#') { obj.tag = stripStart(w); - obj.tag = titleCase$1(obj.tag); + obj.tag = titleCase$2(obj.tag); return obj; } //dynamic function on a term object @@ -3151,7 +3163,7 @@ var _01Sentences = splitSentences; // console.log(sentence_parser('john f. kenne var wordlike = /\S/; var isBoundary = /^[!?.]+$/; var naiiveSplit = /(\S+)/; -var isSlash = /\/\W*$/; +var isSlash = /[a-z] ?\/ ?[a-z]*$/; var notWord = { '.': true, '-': true, @@ -3373,7 +3385,7 @@ var _data = { "Superlative": "true¦earlier", "PresentTense": "true¦is,sounds", "Value": "true¦a few", - "Noun": "true¦a8b7c5e3f2here,ie,lit,m1no doubt,p0tce,vs;d,l;a,d;t,y;g,sp,tc,x0;!p;a,ca,o0;l,rp;a,c,l;d,l,rc", + "Noun": "true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc", "Copula": "true¦a1is,w0;as,ere;m,re", "PastTense": "true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan", "Condition": "true¦if,unless", @@ -3389,17 +3401,17 @@ var _data = { "SportsTeam": "true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls", "Uncountable": "true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics", "Infinitive": "true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on", - "Unit": "true¦0:16;a11b0Zc0Ld0Ke0If0Dg09h06in0Ejoule0k00lYmNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Kb,d0Qears old,o1;tt0E;att0b;able4b3e2on1sp;!ne0;a2r0A;!l,sp;spo01; ft,uare 1;c0Fd0Ef3i0Ckilo0Gm1ya0B;e0Jil1;e0li0E;eet0o0A;t,uart0;ascals,e2i1ou0Mt;c0Jnt0;rcent,tZ;hms,uVz;an0GewtQ;/s,b,e7g,i3l,m2p1²,³;h,s;!²;!/h,cro3l1;e1li05;! DsC²;g05s0A;gPter1;! 2s1;! 1;per second;b,iZm,u1x;men0x0;b,elvin0g,ilo2m1nQ;!/h,ph,²;byYgWmeter1;! 2s1;! 1;per hour;e1g,z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", + "Unit": "true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s", "Organization": "true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c", "Demonym": "true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an", "Possessive": "true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne", "Currency": "true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s", "City": "true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg", - "Abbreviation": "true¦a08b05cZdXeUfSgRhQiPjNkanMlKmGnEoDpCque,rAs6t4u3v2w0;is0y00;!c;a,s,t;niv,safa,t;ce,e0;nn,x;ask,e1fc,gt,ir,r,t,u0;pt,rg;nDp0;!t;d,e0;pAs,v;a,d,ennGhd,l,rof,vt;ct,kla,nt,p,rd;eb0ov;!r;a2d,essrs,i1lle,me,r5s0t;!tr;nn,ster;!j,r;it,lb,t0;!d;!s;an,r,u0;l,n;a,da,e,nc;on,wy;a,en,ov;eb,l0t,y;!a;g,s1tc,x0;!p;p,q;ak,e0ist,r;c,pt,t;a3ca,l,m2o0pl,res,t;!l0m1nn,rp;!o;dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d3l2pr,r1ss0tty,ug,ve;n,t;c,iz;!ta;!j,m,v", - "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", + "Abbreviation": "true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v", "Country": "true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an", "Region": "true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma", "FemaleName": "true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah", + "Place": "true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s", "WeekDay": "true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s", "Month": "true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il", "Date": "true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w", @@ -3410,7 +3422,7 @@ var _data = { "Verb": "true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en", "PhrasalVerb": "true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut", "Modal": "true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld", - "Adjective": "true¦0:74;1:7J;2:7P;3:7I;4:7B;5:5B;6:48;7:49;8:4R;9:60;A:7G;B:6Z;C:6Y;D:72;E:5W;a6Ib64c5Qd56e4Tf49g41h3Qi35j33k32l2Rm2Gn27o1Rp1Aquack,r10s0Gt09uQvNwFyear5;arp0eJholeIiHoF;man5oFu6B;d6Dzy;despr74s5F;!sa7;eGlFste26;co1Il o4L;!k5;aGiFola4B;b7Sce versa,ol54;ca2gabo62nilla;ltWnJpGrb59su4tterF;!moC; f34b1OpGsFti1H;ca7et,ide dMtairs;er,i3N;aPbeco6Qconvin27deMeLfair,ivers4knKprecedYrIsGwF;iel20ritt5Y;i1VuF;pervis0specti3;eFu5;cognLgul6Gl6G;own;ndi3v5Sxpect0;cid0rF;!grou5NsF;iz0tood;b7ppeaLssu6FuthorF;iz0;i24ra;aJeHhough4OoGrF;i1oubl0;geth8p,rpB;en5PlFm4Zrr2U;li3;boo,lFn;ent0;aXcWeUhTiRmug,nobbi3EoPpOqueami3EtJuFymb63;bHi gener54pFrprisi3;erFre0L;! dup8b,i29;du0seq4T;anda6TeIi0PrFy38;aightFip0; fFfF;or5A;adfaCreotyp0;aEec2Gir1JlendBot on; call0le,mb8phist1XrFu0Xvi41;dBry;gnifica2nF;ceEg7;am2Pe8ocki3ut;cFda1em5lfi2Yni1Wpa68re6;o1Gr3V;at57ient28reec57;cr0me,ns serif;aMeIiGoF;buCtt4TuSy4;ghtFv4;!-29f9;ar,bel,condi1du62fres51lHpublic3VsFtard0;is47oF;lu1na2;e1Euc45;bBciF;al,st;aQeOicayu6lacBopuliCrGuF;bl59mp0;eJiGoF;!b0AfuDmi31p8;mGor,sFva1;ti6;a4Ve;ciDmF;a0IiF;er,um;ac20rFti1;feAma2Tplexi3v33;rFst;allelHtF;-tiFi4;me;!ed;bQffOkNld fashion0nMpLrg1Hth8utKvF;al,erF;!aHniGt,wF;eiFrouF;ght;ll;do0Ver,g2Lsi45;en,posi1; boa5Fg2Jli6;!ay; gua5DbFli6;eat;eHsF;cFer0Hole1;e6uE;d2Sse;ak0eMiLoFua4O;nJrGtF;ab7;thF;!eF;rn;chala2descri4Zstop;ght5;arby,cessa3Wighbor5xt;aNeLiIoFultip7;bi7derGlFnth5ot,st;dy;a1n;nFx0;iaFor;tuE;di4EnaFre;ci3;cFgenta,in,j03keshift,le,mmoth,ny,sculi6;abEho;aOeJiGoFu13;uti12vi3;mGteraF;l,te;it0;ftIgFth4;al,eGitiF;ma1;nda3C;!-0C;nguBst,tt8;ap1Sind5no0A;agg0uF;niOstifi0veni7;de4gno4Blleg4mSnHpso 1VrF;a1releF;va2; NaMbr0corLdJfluenTiTnIsHtF;aAenDoxF;ic36;a6i2R;a1er,oce2;iGoF;or;reA;deq3Jppr2Y;fFsitu,vitro;ro2;mJpF;arHerfeAoFrop8;li1rtF;a2ed;ti4;eFi0Q;d2QnD;aKelJiHoFumdr3B;neCok0rrFs07ur5;if2S;ghfalut1OspF;an2Q;liZpf9;lInHrF;d05roF;wi3;dy,gi3;f,low0;ainf9ener2Jiga22lLoKraHuF;ilFng ho;ty;cGtF;ef9is;ef9;ne,od;ea2Dob4;aUeOinNlMoHrF;a1TeFoz1K;e2Dq12tf9;oHrF; keeps,eFm8tuna1;g04ign;liF;sh;ag2Zue2;al,i1;dJmGrF;ti7;a7ini6;ne;le; up;bl0i2lDr Gux,voF;ri1uri1;oFreac1E;ff;aNfficie2lMmiLnJreAthere4veIxF;aAcess,pe1OtraGuF;be2Ll0H;!va1D;n,ryday; Fcouragi3tiE;rou1sui1;ne2;abo23dQe18i1;g8sF;t,ygF;oi3;er;aVeNiHoFrea15ue;mina2ne,ubF;le,tf9;dact1Bfficu1OsGvF;erD;creHeas0gruntl0honeCordGtF;a2ress0;er5;et; LadpKfJgene1PliHrang0spe1PtGvoF;ut;ail0ermin0;be1Mca1ghF;tf9;ia2;an;facto;i5magFngeroZs0I;ed,i3;ly;ertaRhief,ivil,oHrF;aFowd0u0H;mp0v02z0;loNmLnGoi3rrFve0P;eAu1I;cre1grIsHtF;emFra0F;po0D;ta2;ue2;mer08pleF;te,x;ni4ss4;in;aPeLizarElJoGrF;and new,isk,okP;gGna fiWttom,urgeoF;is;us;ank,iI;re;autif9hiGlov0nFst,yoG;eVt;nd;ul;ckGnkru0XrrF;en;!wards; priori,b0Nc0Kd0AfraBg05h04lZma06ntiquYpUrOsMttracti07utheLvIwF;aGkF;wa0U;ke,re;ant garGerF;age;de;ntV;leep,tonisF;hi3;ab,bitIroHtiF;fiF;ci4;ga2;raF;ry;pFt;are2etiPrF;oprF;ia1;at0;arIcohGeFiMl,oof;rt;olF;ic;mi3;ead;ainCgressiGoniF;zi3;ve;st;id; MeKuJvF;aGerD;se;nc0;ed;lt;pt,qF;ua1;hoc,infinitF;um;cuGtu4u1;al;ra1;erPlOoMruLsGuF;nda2;e2oGtraA;ct;lu1rbi3;ng;te;pt;aFve;rd;aze,e;ra2;nt", + "Adjective": "true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt", "Comparable": "true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd", "TextValue": "true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th", "Ordinal": "true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th", @@ -5569,7 +5581,9 @@ var toPlural = pluralize; //patterns for turning 'dwarves' to 'dwarf' var _rules$1 = [[/([^v])ies$/i, '$1y'], [/ises$/i, 'isis'], [/(kn|[^o]l|w)ives$/i, '$1ife'], [/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i, '$1f'], [/^(dwar|handkerchie|hoo|scar|whar)ves$/i, '$1f'], [/(antenn|formul|nebul|vertebr|vit)ae$/i, '$1a'], [/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i, '$1us'], [/(buffal|tomat|tornad)(oes)$/i, '$1o'], // [/(analy|diagno|parenthe|progno|synop|the)ses$/i, '$1sis'], -[/(..[aeiou]s)es$/i, '$1'], [/(vert|ind|cort)(ices)$/i, '$1ex'], [/(matr|append)(ices)$/i, '$1ix'], [/(x|ch|ss|sh|z|o)es$/i, '$1'], [/men$/i, 'man'], [/(n)ews$/i, '$1ews'], [/([ti])a$/i, '$1um'], [/([^aeiouy]|qu)ies$/i, '$1y'], [/(s)eries$/i, '$1eries'], [/(m)ovies$/i, '$1ovie'], [/([m|l])ice$/i, '$1ouse'], [/(cris|ax|test)es$/i, '$1is'], [/(alias|status)es$/i, '$1'], [/(ss)$/i, '$1'], [/(ics)$/i, '$1'], [/s$/i, '']]; +[/(eas)es$/i, '$1e'], //diseases +[/(..[aeiou]s)es$/i, '$1'], //geniouses +[/(vert|ind|cort)(ices)$/i, '$1ex'], [/(matr|append)(ices)$/i, '$1ix'], [/(x|ch|ss|sh|z|o)es$/i, '$1'], [/men$/i, 'man'], [/(n)ews$/i, '$1ews'], [/([ti])a$/i, '$1um'], [/([^aeiouy]|qu)ies$/i, '$1y'], [/(s)eries$/i, '$1eries'], [/(m)ovies$/i, '$1ovie'], [/([m|l])ice$/i, '$1ouse'], [/(cris|ax|test)es$/i, '$1is'], [/(alias|status)es$/i, '$1'], [/(ss)$/i, '$1'], [/(ics)$/i, '$1'], [/s$/i, '']]; var invertObj = function invertObj(obj) { return Object.keys(obj).reduce(function (h, k) { @@ -5580,7 +5594,8 @@ var invertObj = function invertObj(obj) { var toSingular = function toSingular(str, world) { var irregulars = world.irregulars.nouns; - var invert = invertObj(irregulars); // check irregulars list + var invert = invertObj(irregulars); //(not very efficient) + // check irregulars list if (invert.hasOwnProperty(str)) { return invert[str]; @@ -6572,6 +6587,22 @@ var _03Match = createCommonjsModule(function (module, exports) { }); return this.buildFrom(befores); }; + /** return only results with this match afterwards */ + + + exports.hasAfter = function (reg) { + return this.filter(function (doc) { + return doc.lookAfter(reg).found; + }); + }; + /** return only results with this match before it */ + + + exports.hasBefore = function (reg) { + return this.filter(function (doc) { + return doc.lookBefore(reg).found; + }); + }; }); var _03Match_1 = _03Match.match; var _03Match_2 = _03Match.not; @@ -6584,6 +6615,8 @@ var _03Match_8 = _03Match.lookBehind; var _03Match_9 = _03Match.lookBefore; var _03Match_10 = _03Match.before; var _03Match_11 = _03Match.after; +var _03Match_12 = _03Match.hasAfter; +var _03Match_13 = _03Match.hasBefore; /** apply a tag, or tags to all terms */ var tagTerms = function tagTerms(tag, doc, safe, reason) { @@ -7064,7 +7097,7 @@ var _07Cache = { uncache: uncache }; -var titleCase$2 = function titleCase(str) { +var titleCase$3 = function titleCase(str) { return str.charAt(0).toUpperCase() + str.substr(1); }; /** substitute-in new content */ @@ -7112,7 +7145,7 @@ var replaceWith = function replaceWith(replace) { } else if (typeof input === 'string') { //input is a string if (options.keepCase !== false && p.terms(0).isTitleCase()) { - input = titleCase$2(input); + input = titleCase$3(input); } newPhrases = _01Tokenizer(input, _this.world, _this.pool()); //tag the new phrases @@ -8635,7 +8668,7 @@ methods$5.phoneNumbers = function (n) { return m; }; -/** money + currency pair */ +/** Deprecated: please use compromise-numbers plugin */ methods$5.money = function (n) { @@ -8793,7 +8826,9 @@ var checkLexicon = function checkLexicon(terms, world) { var _01Lexicon = checkLexicon; -var apostrophes = /[\'‘’‛‵′`´]$/; // +var apostrophes = /[\'‘’‛‵′`´]$/; +var perSec = /^(m|k|cm|km|m)\/(s|h|hr)$/; // '5 k/m' +// var checkPunctuation = function checkPunctuation(terms, i, world) { var term = terms[i]; //check hyphenation @@ -8821,6 +8856,11 @@ var checkPunctuation = function checkPunctuation(terms, i, world) { term.tag(['Gerund'], 'chillin', world); } } + } // '5 km/s' + + + if (perSec.test(term.text)) { + term.tag('Unit', 'per-sec', world); } // 'NASA' is, but not 'i REALLY love it.' // if (term.tags.Noun === true && isAcronym(term, world)) { // term.tag('Acronym', 'acronym-step', world) @@ -8965,7 +9005,7 @@ var endsWith$1 = { ], i: [[/.[oau][wvl]ski$/, Last] //polish (male) ], - k: [[/^(k)+$/, Exp] //kkkk + k: [[/^(k){2}$/, Exp] //kkkk ], l: [[/.[gl]ial$/, Adj], [/.[^aeiou]ful$/, Adj], [/.[nrtumcd]al$/, Adj], [/.[^aeiou][ei]al$/, Adj]], m: [[/.[^aeiou]ium$/, Sing], [/[^aeiou]ism$/, Sing], [/^h*u*m+$/, Exp], //mmmmmmm / ummmm / huuuuuummmmmm @@ -8999,7 +9039,8 @@ var Actor$1 = 'Actor'; var Vb = 'Verb'; var Noun$1 = 'Noun'; var Last$1 = 'LastName'; -var Modal = 'Modal'; // find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup +var Modal = 'Modal'; +var Place = 'Place'; // find any issues - https://observablehq.com/@spencermountain/suffix-word-lookup var suffixMap = [null, //0 null, //1 @@ -9116,6 +9157,8 @@ null, //1 //7-letter opoulos: Last$1, //greek + borough: Place, + //Hillsborough sdottir: Last$1 //swedish female }]; @@ -9497,7 +9540,7 @@ var checkNeighbours = function checkNeighbours(terms, world) { var _01Neighbours = checkNeighbours; -var titleCase$3 = /^[A-Z][a-z'\u00C0-\u00FF]/; +var titleCase$4 = /^[A-Z][a-z'\u00C0-\u00FF]/; var hasNumber = /[0-9]/; /** look for any grammar signals based on capital/lowercase */ @@ -9509,7 +9552,7 @@ var checkCase = function checkCase(doc) { for (var i = 1; i < terms.length; i++) { var term = terms[i]; - if (titleCase$3.test(term.text) === true && hasNumber.test(term.text) === false) { + if (titleCase$4.test(term.text) === true && hasNumber.test(term.text) === false) { term.tag('ProperNoun', 'titlecase-noun', world); } } @@ -10943,6 +10986,7 @@ var _06Value = [// ==== PhoneNumber ==== tag: 'PhoneNumber', reason: '(800) PhoneNumber' }, // ==== Currency ==== +// chinese yuan { match: '#Demonym #Currency', tag: 'Currency', @@ -10953,11 +10997,6 @@ var _06Value = [// ==== PhoneNumber ==== group: 0, tag: 'Ordinal', reason: 'second-noun' -}, // ==== Money ==== -{ - match: '#Value+ #Currency', - tag: 'Money', - reason: '15 usd' }, // ==== Unit ==== //5 yan { @@ -10977,19 +11016,30 @@ var _06Value = [// ==== PhoneNumber ==== reason: 'minus-value' }, //5 kg. { - match: '#Value #Abbreviation', - tag: 'Value', + match: '#Value [#Abbreviation]', + group: 0, + tag: 'Unit', reason: 'value-abbr' +}, { + match: '#Value [k]', + group: 0, + tag: 'Unit', + reason: 'value-k' +}, { + match: '#Unit an hour', + tag: 'Unit', + reason: 'unit-an-hour' }, //seven point five { match: '#Value (point|decimal) #Value', tag: 'Value', reason: 'value-point-value' -}, // ten grand +}, // ten bucks { - match: '#Value grand', - tag: 'Value', - reason: 'value-grand' + match: '(#Value|a) [(buck|bucks|grand)]', + group: 0, + tag: 'Currency', + reason: 'value-bucks' }, //quarter million { match: '#Determiner [(half|quarter)] #Ordinal', @@ -11000,6 +11050,12 @@ var _06Value = [// ==== PhoneNumber ==== match: 'a #Value', tag: 'Value', reason: 'a-value' +}, // ==== Money ==== +{ + match: '[#Value+] #Currency', + group: 0, + tag: 'Money', + reason: '15 usd' }, // thousand and two { match: "(hundred|thousand|million|billion|trillion|quadrillion)+ and #Value", @@ -11259,6 +11315,12 @@ var list$4 = [// ==== Region ==== match: '(district|region|province|municipality|territory|burough|state) of #ProperNoun', tag: 'Region', reason: 'district-of-Foo' +}, // in Foo California +{ + match: 'in [#ProperNoun] #Place', + group: 0, + tag: 'Place', + reason: 'propernoun-place' }, // ==== Address ==== { match: '#Value #Noun (st|street|rd|road|crescent|cr|way|tr|terrace|avenue|ave)', @@ -12460,7 +12522,7 @@ var methods$6 = { var toSingular = this.world.transforms.toSingular; this.forEach(function (doc) { - if (doc.has('#Singular') || hasPlural_1(doc) === false) { + if (doc.has('^#Singular+$') || hasPlural_1(doc) === false) { return; } // double-check it isn't an un-tagged plural @@ -13630,6 +13692,12 @@ function instance(worldInstance) { world.verbose(bool); return this; }; + /** grab currently-used World object */ + + + nlp.world = function () { + return world; + }; /** current version of the library */ diff --git a/rollup.config.js b/rollup.config.js index 4e7258e96..5ecdb101a 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -10,6 +10,8 @@ import { version } from './package.json' console.log('\n 📦 - running rollup..\n') const banner = '/* compromise ' + version + ' MIT */' +const noop = __dirname + '/scripts/build/no-ops/_function' +const noobj = __dirname + '/scripts/build/no-ops/_object' export default [ { @@ -25,12 +27,17 @@ export default [ alias({ //remove a bunch of imports with no-ops entries: [ - { find: './data/conjugations', replacement: __dirname + '/scripts/build/no-ops/_object' }, - { find: './data/plurals', replacement: __dirname + '/scripts/build/no-ops/_object' }, - { find: './data/misc', replacement: __dirname + '/scripts/build/no-ops/_object' }, - { find: './_data', replacement: __dirname + '/scripts/build/no-ops/_object' }, + { find: './data/conjugations', replacement: noobj }, + { find: './data/plurals', replacement: noobj }, + { find: './data/misc', replacement: noobj }, + { find: '../transforms/conjugate', replacement: noop }, + { find: '../transforms/adjectives', replacement: noop }, + { find: '../transforms/toPlural', replacement: noop }, + { find: '../transforms/toSingular', replacement: noop }, + { find: '../transforms/toInfinitive', replacement: noop }, + { find: './_data', replacement: noobj }, { find: '../02-tagger', replacement: __dirname + '/src/02-tagger/tiny' }, - { find: 'efrt-unpack', replacement: __dirname + '/scripts/build/no-ops/_function' }, + { find: 'efrt-unpack', replacement: noop }, ], }), terser(), From 4df4cd98b6308dbbdbe08a705e98940d7fd8ed4e Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 22 Apr 2020 10:38:59 -0400 Subject: [PATCH 16/24] four money tests failing --- builds/compromise-tokenize.js | 8797 +++++++++++++++++++++++++++++++- changelog.md | 7 +- plugins/numbers/src/index.js | 16 +- plugins/numbers/src/methods.js | 86 +- scratch.js | 13 +- 5 files changed, 8862 insertions(+), 57 deletions(-) diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 48e83f4b0..8c67c8ef5 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1 +1,8796 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var n=0;nr[e].lineage.length?1:r[t].isA.length>r[e].isA.length?-1:0:0:1}))},W={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},U={json:function(t,e){t=t||{};var n={};return(t=Object.assign({},W,t)).text&&(n.text=this.text),t.normal&&(n.normal=this.normal),t.tags&&(n.tags=Object.keys(this.tags)),t.clean&&(n.clean=this.clean),(t.id||t.offset)&&(n.id=this.id),t.implicit&&null!==this.implicit&&(n.implicit=this.implicit),t.whitespace&&(n.pre=this.pre,n.post=this.post),t.bestTag&&(n.bestTag=z(this,e)[0]),n}},_=Object.assign({},T,N,I,L,U);function H(){return"undefined"!=typeof window&&window.document}var G=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),n=String(n);var r=k(n);this.text=r.text||"",this.clean=r.clean,this.reduced=r.reduced,this.root=null,this.implicit=null,this.pre=r.pre||"",this.post=r.post||"",this.tags={},this.prev=null,this.next=null,this.id=h(r.clean),this.isA="Term",r.alias&&(this.alias=r.alias)}return r(t,[{key:"set",value:function(t){var e=k(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();rt.prototype.clone=function(){var t=new rt(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(rt.prototype,_),Object.assign(rt.prototype,nt);var it=rt,ot={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],n=0;n0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var r=this.terms(),i=!1;r[0]&&null===r[0].prev&&null===r[r.length-1].next&&(i=!0);var o=r.reduce((function(o,s,a){t.last=n&&a===r.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===r.length-1&&n&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&n&&(o=st(o)),!0===t.trim&&(o=o.trim()),o}},ut={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ct=/[.?!]\s*$/,ht=function(t,e){e[0].pre=t[0].pre;var n,r,i=t[t.length-1],o=e[e.length-1];o.post=(n=i.post,r=o.post,ct.test(r)?r+n.match(/\s*$/):n),i.post="",""===i.post&&(i.post+=" ")},lt=function(t,e,n){var r=t.terms(),i=e.terms();ht(r,i),function(t,e,n){var r=t[t.length-1],i=e[e.length-1],o=r.next;(r.next=e[0].id,i.next=o,o)&&(n.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(r,i,t.pool);var o,s=[t],a=t.start,u=[n];return(u=u.concat(n.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},ft=/ /,pt=function(t,e,n){var r=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===ft.test(e.post)&&(e.post+=" ")}(i),function(t,e,n){var r=n[n.length-1];r.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);n[0].prev=t.terms(0).prev,t.terms(0).prev=r.id}(t,e,i);var o,s=[t],a=[n];return(a=a.concat(n.parents())).forEach((function(t){var n=t.list.filter((function(t){return t.hasId(r)||t.hasId(e.start)}));s=s.concat(n)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===r&&(t.start=e.start),t.cache={}})),t},dt=function(t,e){var n=e.pool(),r=t.terms(),i=n.get(r[0].prev)||{},o=n.get(r[r.length-1].next)||{};r[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,n,r){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=n,i.start===e&&(i.start=r.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},vt={append:function(t,e){return lt(this,t,e),this},prepend:function(t,e){return pt(this,t,e),this},delete:function(t){return dt(this,t),this},replace:function(t,e){var n=this.length;lt(this,t,e);var r=this.buildFrom(this.start,this.length);r.length=n,dt(r,e)},splitOn:function(t){var e=this.terms(),n={before:null,match:null,after:null},r=e.findIndex((function(e){return e.id===t.start}));if(-1===r)return n;var i=e.slice(0,r);i.length>0&&(n.before=this.buildFrom(i[0].id,i.length));var o=e.slice(r,r+t.length);o.length>0&&(n.match=this.buildFrom(o[0].id,o.length));var s=e.slice(r+t.length,e.length);return s.length>0&&(n.after=this.buildFrom(s[0].id,s.length,this.pool)),n}},mt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,n={};return t.text&&(n.text=this.text()),t.normal&&(n.normal=this.text("normal")),t.clean&&(n.clean=this.text("clean")),t.reduced&&(n.reduced=this.text("reduced")),t.root&&(n.root=this.text("root")),t.trim&&(n.text&&(n.text=n.text.trim()),n.normal&&(n.normal=n.normal.trim()),n.reduced&&(n.reduced=n.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),n.terms=this.terms().map((function(n){return n.json(t.terms,e)}))),n}},gt={lookAhead:function(t){t||(t=".*");var e=this.pool,n=[],r=this.terms();return function t(r){var i=e.get(r);i&&(n.push(i),i.prev&&t(i.next))}(r[r.length-1].next),0===n.length?[]:this.buildFrom(n[0].id,n.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,n=[];return function t(r){var i=e.get(r);i&&(n.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===n.length?[]:this.buildFrom(n[n.length-1].id,n.length).match(t)}},bt=Object.assign({},ot,at,ut,vt,mt,gt),yt=function(t,e){if(0===e.length)return!0;for(var n=0;n0)return!0;if(!0===r.anything&&!0===r.negative)return!0}return!1},At=function(t,e,n,r,i,o){for(var s=e;e1&&u.greedy?d.length+=s-p:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,n+s,r)))return[!1,null];s+=2}}else{var v=wt(t,s,e[a+1],u,n);if(void 0!==u.min&&v-su.max){s+=u.max;continue}if(null===v)return[!1,null];c&&(Pt(i,l,t,s,u.named).length=v-s),s=v}}return[t.slice(0,s),i]},jt=function(t,e,n){if(!n||0===n.length)return n;if(e.some((function(t){return t.end}))){var r=t[t.length-1];n=n.filter((function(t){return-1!==t.match.indexOf(r)}))}return n},Et=/\{([0-9]+,?[0-9]*)\}/,Ot=/&&/,Ct=new RegExp(/^<(\S+)>/),kt=function(t){return t[t.length-1]},Ft=function(t){return t[0]},Tt=function(t){return t.substr(1)},Nt=function(t){return t.substr(0,t.length-1)},Vt=function(t){return t=Tt(t),t=Nt(t)},$t=function t(e){for(var n,r={},i=0;i<2;i+=1){if("$"===kt(e)&&(r.end=!0,e=Nt(e)),"^"===Ft(e)&&(r.start=!0,e=Tt(e)),("["===Ft(e)||"]"===kt(e))&&(r.named=!0,"["===Ft(e)?r.groupType="]"===kt(e)?"single":"start":r.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ft(e))){var o=Ct.exec(e);o.length>=2&&(r.named=o[1],e=e.replace(o[0],""))}if("+"===kt(e)&&(r.greedy=!0,e=Nt(e)),"*"!==e&&"*"===kt(e)&&"\\*"!==e&&(r.greedy=!0,e=Nt(e)),"?"===kt(e)&&(r.optional=!0,e=Nt(e)),"!"===Ft(e)&&(r.negative=!0,e=Tt(e)),"("===Ft(e)&&")"===kt(e)){Ot.test(e)?(r.choices=e.split(Ot),r.operator="and"):(r.choices=e.split("|"),r.operator="or"),r.choices[0]=Tt(r.choices[0]);var s=r.choices.length-1;r.choices[s]=Nt(r.choices[s]),r.choices=r.choices.map((function(t){return t.trim()})),r.choices=r.choices.filter((function(t){return t})),r.choices=r.choices.map(t),e=""}if("/"===Ft(e)&&"/"===kt(e))return e=Vt(e),r.regex=new RegExp(e),r;if("~"===Ft(e)&&"~"===kt(e))return e=Vt(e),r.soft=!0,r.word=e,r}return!0===Et.test(e)&&(e=e.replace(Et,(function(t,e){var n=e.split(/,/g);return 1===n.length?(r.min=Number(n[0]),r.max=Number(n[0])):(r.min=Number(n[0]),r.max=Number(n[1]||999)),r.greedy=!0,""}))),"#"===Ft(e)?(r.tag=Tt(e),r.tag=(n=r.tag).charAt(0).toUpperCase()+n.substr(1),r):"@"===Ft(e)?(r.method=Tt(e),r):"."===e?(r.anything=!0,r):"*"===e?(r.anything=!0,r.greedy=!0,r.optional=!0,r):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),r.word=e.toLowerCase()),r)},St=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,n,r=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return n=(n=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var n=t.split(" ");n=n.filter((function(t){return t})),e=e.concat(n)}})),e}(n)).map($t),n=St(n)},It=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=Bt(e)),!0===yt(t,e))return[];var r=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=xt(i,e,0,i.length),a=u(s,2),c=a[0],h=a[1];return!1!==c&&c.length>0&&(c=c.filter((function(t){return t})),o.push({match:c,groups:h})),jt(i,e,o)}for(var l=0;li.length);l+=1){var f=xt(i.slice(l),e,l,i.length),p=u(f,2),d=p[0],v=p[1];if(!1!==d&&d.length>0&&(l+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:v}),!0===n))return jt(i,e,o)}return jt(i,e,o)},Dt=function(t,e){var n={};It(t,e).forEach((function(t){t.match.forEach((function(t){n[t.id]=!0}))}));var r=t.terms(),i=[],o=[];return r.forEach((function(t){!0!==n[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},qt={match:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=It(this,t,n);return r=r.map((function(t){var n=t.match,r=t.groups,i=e.buildFrom(n[0].id,n.length,r);return i.cache.terms=n,i}))},has:function(t){return It(this,t,!0).length>0},not:function(t){var e=this,n=Dt(this,t);return n=n.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var n=this,r=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return n.buildFrom(t[0].id,t.length)}))}},Lt=function t(n,r,i){e(this,t),this.start=n,this.length=r,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Lt.prototype.buildFrom=function(t,e,n){var r=new Lt(t,e,this.pool);return n&&Object.keys(n).length>0?r.groups=n:r.groups=this.groups,r},Object.assign(Lt.prototype,qt),Object.assign(Lt.prototype,bt);var Mt={term:"terms"};Object.keys(Mt).forEach((function(t){return Lt.prototype[t]=Lt.prototype[Mt[t]]}));var zt=Lt,Wt=function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:n})}return r(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Wt.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,n){var r=t.words[n].clone();return e[r.id]=r,e}),{});return new Wt(e)};var Ut=Wt,_t=function(t){t.forEach((function(e,n){n>0&&(e.prev=t[n-1].id),t[n+1]&&(e.next=t[n+1].id)}))},Ht=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Gt=/\S/,Qt=/[ .][A-Z]\.? *$/i,Rt=/(?:\u2026|\.{2,}) *$/,Zt=/((?:\r?\n|\r)+)/,Jt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Yt=/^\s+/,Kt=function(t,e){if(!0===Qt.test(t))return!1;if(!0===Rt.test(t))return!1;if(!1===Jt.test(t))return!1;var n=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),r=n[n.length-1].toLowerCase();return!e.hasOwnProperty(r)},Xt=function(t,e){var n=e.cache.abbreviations;t=t||"";var r=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Gt.test(t))return r;for(var o=function(t){for(var e=[],n=t.split(Zt),r=0;r0&&(r.push(c),i[u]="")}if(0===r.length)return[t];for(var h=1;h0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var r=Xt(t,e);r=r.map((function(t){return ae(t)})),n=n||new Ut;var i=r.map((function(t){t=t.map((function(t){var e=new it(t);return n.add(e),e})),_t(t);var e=new zt(t[0].id,t.length,n);return e.cache.terms=t,e}));return i},ce=function(t,e){var n=new Ut;return t.map((function(t,r){var i=t.terms.map((function(i,o){var s=new it(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",r>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),n.add(s),s}));return _t(i),new zt(i[0].id,i.length,n)}))},he={},le=["Person","Place","Organization"],fe={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:le},Actor:{isA:"Noun",notA:le},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:le},Demonym:{isA:["Noun","ProperNoun"],notA:le},Possessive:{isA:"Noun"}},pe={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},de={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ve=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],me={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ve},Conjunction:{notA:ve},Preposition:{notA:ve},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},ge={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},be=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:ge[e]?t[e].color=ge[e]:t[e].isA.some((function(n){return!!ge[n]&&(t[e].color=ge[n],!0)}))})),t},ye=function(t){return Object.keys(t).forEach((function(e){for(var n=t[e],r=n.isA.length,i=0;i1&&(n.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,n);r[s]=r[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,n),u=Object.keys(a),c=0;c1?i[o]&&"."!==i[o]&&n.tag(i[o],r,e.world):n.tag(t,r,e.world)}))}))}),ze={tag:function(t,e){return t?(Me(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(Me(t,this,!0,e),this):this},unTag:function(t,e){var n=this;return this.list.forEach((function(r){r.terms().forEach((function(r){return r.unTag(t,e,n.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,n=this.list.reduce((function(n,r){return n.concat(r.canBe(t,e))}),[]);return this.buildFrom(n)}},We={map:function(e){var n=this;if(!e)return this;var r=this.list.map((function(t,r){var i=n.buildFrom([t]);i.from=null;var o=e(i,r);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(r=r.filter((function(t){return t}))).length?this.buildFrom(r):"object"!==t(r[0])||"Phrase"!==r[0].isA?r:this.buildFrom(r)},forEach:function(t,e){var n=this;return t?(this.list.forEach((function(r,i){var o=n.buildFrom([r]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var n=this.list.filter((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)}));return this.buildFrom(n)},find:function(t){var e=this;if(!t)return this;var n=this.list.find((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)}));return n?this.buildFrom([n]):void 0},some:function(t){var e=this;return t?this.list.some((function(n,r){var i=e.buildFrom([n]);return i.from=null,t(i,r)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var n=[this.list[e]];return this.buildFrom(n)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},Ue=function(t){return t.split(/[ -]/g)},_e=function(t,e,n){for(var r=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n={};return t.forEach((function(t,r){var i=!0;void 0!==e[r]&&(i=e[r]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=Ue(t).map((function(t){return t.trim()}));n[o[0]]=n[o[0]]||{},1===o.length?n[o[0]].value=i:(n[o[0]].more=n[o[0]].more||[],n[o[0]].more.push({rest:o.slice(1),value:i}))})),n}(t,e),i=[],o=function(t){for(var e=n.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==r[o[t]]&&(void 0!==r[o[t]].more&&r[o[t]].more.forEach((function(n){void 0!==o[t+n.rest.length]&&(!0===n.rest.every((function(e,n){return e===o[t+n+1]}))&&i.push({id:e.terms()[t].id,value:n.value,length:n.rest.length+1}))})),void 0!==r[o[t]].value&&i.push({id:e.terms()[t].id,value:r[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===r&&(r={keepTags:!0}),!1===r&&(r={keepTags:!1}),r=r||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,n.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==r.keepCase&&i.terms(0).isTitleCase()&&(s=Qe(s)),o=ue(s,n.world,n.pool()),n.buildFrom(o).tagger()}if(!0===r.keepTags){var a=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){a[e]&&t.tagSafe(a[e].tags,"keptTag",n.world)}))}i.replace(o[0],n)})),this):this.delete()},replace:function(t,e,n){return void 0===e?this.replaceWith(t,n):(this.match(t).replaceWith(e,n),this)}},Ze=F((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(n){var r=ue(t,e.world,e.pool())[0];e.buildFrom([r]).tagger(),n.append(r,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(n){var r=ue(t,e.world,e.pool())[0];e.buildFrom([r]).tagger(),n.prepend(r,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(n);!0===(e=r(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(n){return n.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&Ke(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),tn=(Xe.json,Xe.data,F((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countr?1:0},length:function(t,e){var n=t.text().trim().length,r=e.text().trim().length;return nr?-1:0},wordCount:function(t,e){var n=t.wordCount(),r=e.wordCount();return nr?-1:0}};rn.alphabetical=rn.alpha,rn.wordcount=rn.wordCount;var on={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},sn={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(n={},r={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(r);n[e]=n[e]||0,n[e]+=1})),e.list.sort((function(t,e){var i=n[t.text(r)],o=n[e.text(r)];return io?-1:0})),e):on.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,n){return e[t.start]>e[n.start]?1:e[t.start]0){i+=s;continue}}if(void 0===n[o]||!0!==n.hasOwnProperty(o))if(o===t[i].reduced||!0!==n.hasOwnProperty(t[i].reduced)){if(!0===jn.test(o)){var a=o.replace(jn,"");!0===n.hasOwnProperty(a)&&t[i].tag(n[a],"noprefix-lexicon",e)}}else t[i].tag(n[t[i].reduced],"lexicon",e);else t[i].tag(n[o],"lexicon",e)}return t},Cn=function(t){var e=t.termList();return On(e,t.world),t},kn=function(t){var n=function(t){function n(){return e(this,n),a(this,o(n).apply(this,arguments))}return i(n,t),r(n,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),n}(t);return n.prototype.unwrap=n.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new n(e.list,this,this.world)},t},Fn=/\./,Tn=function(t){var n=function(t){function n(){return e(this,n),a(this,o(n).apply(this,arguments))}return i(n,t),r(n,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===Fn.test(t.post)&&(e+="."),t.set(e)})),this}}]),n}(t);return n.prototype.unwrap=n.prototype.stripPeriods,n.prototype.strip=n.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new n(e.list,this,this.world)},t},Nn=function(t){return t.prototype.clauses=function(e){var n=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),r=this.splitAfter(n),i=r.quotations(),o=(r=r.splitOn(i)).parentheses(),s=(r=r.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(r=r.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(r=(r=(r=(r=(r=(r=r.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");r=r.splitOn(c.eq(0))}return"number"==typeof e&&(r=r.get(e)),new t(r.list,this,this.world)},t},Vn=function(t){var n=function(t){function n(t,r,i){var s;return e(this,n),(s=a(this,o(n).call(this,t,r,i))).contracted=null,s}return i(n,t),r(n,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),n=e[0].isTitleCase();e.forEach((function(t,n){t.set(t.implicit||t.text),t.implicit=void 0,n0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return r(t,[{key:"tagger",value:function(){return Cn(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();cr.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new cr(t,this,this.world)},cr.prototype.fromText=function(t){var e=ue(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(cr.prototype,ur.misc),Object.assign(cr.prototype,ur.selections),ar(cr);var hr={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(hr).forEach((function(t){return cr.prototype[t]=cr.prototype[hr[t]]}));var lr=cr;return function t(e){var n=e,r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&n.addWords(e);var r=ue(t,n),i=new lr(r,null,n);return i.tagger(),i};return r.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=n;e&&((r=r.clone()).words={},r.addWords(e));var i=ue(t,r),o=new lr(i,null,r);return e&&Cn(o),o},r.extend=function(t){return t(lr,n,this,zt,it,Ut),this},r.fromJSON=function(t){var e=ce(t,n);return new lr(e,null,n)},r.clone=function(){return t(n.clone())},r.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return n.verbose(t),this},r.world=function(){return n},r.version="13.1.1",r.import=r.load,r}(new Be)})); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = global || self, global.nlp = factory()); +}(this, (function () { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); + } + + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) _setPrototypeOf(subClass, superClass); + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } + + return _assertThisInitialized(self); + } + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + + function _iterableToArrayLimit(arr, i) { + if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { + return; + } + + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + + //this is a not-well-thought-out way to reduce our dependence on `object===object` stuff + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split(''); //generates a unique id for this term + + function makeId(str) { + str = str || '_'; + var text = str + '-'; + + for (var i = 0; i < 7; i++) { + text += chars[Math.floor(Math.random() * chars.length)]; + } + + return text; + } + + var _id = makeId; + + //a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii. + //approximate visual (not semantic or phonetic) relationship between unicode and ascii characters + //http://en.wikipedia.org/wiki/List_of_Unicode_characters + //https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E + var compact = { + '!': '¡', + '?': '¿Ɂ', + '"': '“”"❝❞', + "'": '‘‛❛❜', + '-': '—–', + a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ', + b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ', + c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ', + d: 'ÐĎďĐđƉƊȡƋƌǷ', + e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ', + f: 'ƑƒϜϝӺӻҒғſ', + g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ', + h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ', + I: 'ÌÍÎÏ', + i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії', + j: 'ĴĵǰȷɈɉϳЈј', + k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ', + l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ', + m: 'ΜϺϻМмӍӎ', + n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ', + o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ', + p: 'ƤƿΡρϷϸϼРрҎҏÞ', + q: 'Ɋɋ', + r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ', + s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ', + t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт', + u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ', + v: 'νѴѵѶѷ', + w: 'ŴŵƜωώϖϢϣШЩшщѡѿ', + x: '×ΧχϗϰХхҲҳӼӽӾӿ', + y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ', + z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ' + }; //decompress data into two hashes + + var unicode = {}; + Object.keys(compact).forEach(function (k) { + compact[k].split('').forEach(function (s) { + unicode[s] = k; + }); + }); + + var killUnicode = function killUnicode(str) { + var chars = str.split(''); + chars.forEach(function (s, i) { + if (unicode[s]) { + chars[i] = unicode[s]; + } + }); + return chars.join(''); + }; + + var unicode_1 = killUnicode; // console.log(killUnicode('bjŏȒk—Ɏó')); + + var periodAcronym = /([A-Z]\.)+[A-Z]?,?$/; + var oneLetterAcronym = /^[A-Z]\.,?$/; + var noPeriodAcronym = /[A-Z]{2,}('s|,)?$/; + var lowerCaseAcronym = /([a-z]\.){2,}[a-z]\.?$/; + + var isAcronym = function isAcronym(str) { + //like N.D.A + if (periodAcronym.test(str) === true) { + return true; + } //like c.e.o + + + if (lowerCaseAcronym.test(str) === true) { + return true; + } //like 'F.' + + + if (oneLetterAcronym.test(str) === true) { + return true; + } //like NDA + + + if (noPeriodAcronym.test(str) === true) { + return true; + } + + return false; + }; + + var isAcronym_1 = isAcronym; + + var hasSlash = /[a-z\u00C0-\u00FF] ?\/ ?[a-z\u00C0-\u00FF]/; + /** some basic operations on a string to reduce noise */ + + var clean = function clean(str) { + str = str || ''; + str = str.toLowerCase(); + str = str.trim(); + var original = str; //(very) rough ASCII transliteration - bjŏrk -> bjork + + str = unicode_1(str); //rough handling of slashes - 'see/saw' + + if (hasSlash.test(str) === true) { + str = str.replace(/\/.*/, ''); + } //#tags, @mentions + + + str = str.replace(/^[#@]/, ''); //punctuation + + str = str.replace(/[,;.!?]+$/, ''); // coerce single curly quotes + + str = str.replace(/[\u0027\u0060\u00B4\u2018\u2019\u201A\u201B\u2032\u2035\u2039\u203A]+/g, "'"); // coerce double curly quotes + + str = str.replace(/[\u0022\u00AB\u00BB\u201C\u201D\u201E\u201F\u2033\u2034\u2036\u2037\u2E42\u301D\u301E\u301F\uFF02]+/g, '"'); //coerce Unicode ellipses + + str = str.replace(/\u2026/g, '...'); //en-dash + + str = str.replace(/\u2013/g, '-'); //lookin'->looking (make it easier for conjugation) + + str = str.replace(/([aeiou][ktrp])in$/, '$1ing'); //turn re-enactment to reenactment + + if (/^(re|un)-?[^aeiou]./.test(str) === true) { + str = str.replace('-', ''); + } //strip leading & trailing grammatical punctuation + + + if (/^[:;]/.test(str) === false) { + str = str.replace(/\.{3,}$/g, ''); + str = str.replace(/[",\.!:;\?\)]+$/g, ''); + str = str.replace(/^['"\(]+/g, ''); + } //do this again.. + + + str = str.trim(); //oh shucks, + + if (str === '') { + str = original; + } //compact acronyms + + + if (isAcronym_1(str)) { + str = str.replace(/\./g, ''); + } //nice-numbers + + + str = str.replace(/([0-9]),([0-9])/g, '$1$2'); + return str; + }; + + var clean_1 = clean; // console.log(normalize('Dr. V Cooper')); + + /** reduced is one step further than clean */ + var reduced = function reduced(str) { + // remove apostrophes + str = str.replace(/['’]s$/, ''); + str = str.replace(/s['’]$/, 's'); + return str; + }; + + var reduce = reduced; + + //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation + //we have slightly different rules for start/end - like #hashtags. + + var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; + var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ + + var hasSlash$1 = /\//; + var hasApostrophe = /['’]/; + var hasAcronym = /^[a-z]\.([a-z]\.)+/i; + var minusNumber = /^[-+\.][0-9]/; + /** turn given text into a parsed-up object + * seperate the 'meat' of the word from the whitespace+punctuation + */ + + var parseTerm = function parseTerm(str) { + var original = str; + var pre = ''; + var post = ''; + str = str.replace(startings, function (found) { + pre = found; // support '-40' + + if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) { + pre = ''; + return found; + } + + return ''; + }); + str = str.replace(endings, function (found) { + post = found; // keep s-apostrophe - "flanders'" or "chillin'" + + if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) { + post = post.replace(hasApostrophe, ''); + return "'"; + } //keep end-period in acronym + + + if (hasAcronym.test(str) === true) { + post = post.replace(/\./, ''); + return '.'; + } + + return ''; + }); //we went too far.. + + if (str === '') { + // do a very mild parse, and hope for the best. + original = original.replace(/ *$/, function (after) { + post = after || ''; + return ''; + }); + str = original; + pre = ''; + post = post; + } // create the various forms of our text, + + + var clean = clean_1(str); + var parsed = { + text: str, + clean: clean, + reduced: reduce(clean), + pre: pre, + post: post + }; // support aliases for slashes + + if (hasSlash$1.test(str)) { + str.split(hasSlash$1).forEach(function (word) { + parsed.alias = parsed.alias || {}; + parsed.alias[word.trim()] = true; + }); + } + + return parsed; + }; + + var parse = parseTerm; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var _01Case = createCommonjsModule(function (module, exports) { + var titleCase = /^[A-Z][a-z'\u00C0-\u00FF]/; + var upperCase = /^[A-Z]+s?$/; + /** convert all text to uppercase */ + + exports.toUpperCase = function () { + this.text = this.text.toUpperCase(); + return this; + }; + /** convert all text to lowercase */ + + + exports.toLowerCase = function () { + this.text = this.text.toLowerCase(); + return this; + }; + /** only set the first letter to uppercase + * leave any existing uppercase alone + */ + + + exports.toTitleCase = function () { + this.text = this.text.replace(/^ *[a-z\u00C0-\u00FF]/, function (x) { + return x.toUpperCase(); + }); //support unicode? + + return this; + }; + /** if all letters are uppercase */ + + + exports.isUpperCase = function () { + return upperCase.test(this.text); + }; + /** if the first letter is uppercase, and the rest are lowercase */ + + + exports.isTitleCase = function () { + return titleCase.test(this.text); + }; + + exports.titleCase = exports.isTitleCase; + }); + var _01Case_1 = _01Case.toUpperCase; + var _01Case_2 = _01Case.toLowerCase; + var _01Case_3 = _01Case.toTitleCase; + var _01Case_4 = _01Case.isUpperCase; + var _01Case_5 = _01Case.isTitleCase; + var _01Case_6 = _01Case.titleCase; + + var _02Punctuation = createCommonjsModule(function (module, exports) { + // these methods are called with '@hasComma' in the match syntax + // various unicode quotation-mark formats + var startQuote = /(\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F)/; + var endQuote = /(\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E)/; + /** search the term's 'post' punctuation */ + + exports.hasPost = function (punct) { + return this.post.indexOf(punct) !== -1; + }; + /** search the term's 'pre' punctuation */ + + + exports.hasPre = function (punct) { + return this.pre.indexOf(punct) !== -1; + }; + /** does it have a quotation symbol? */ + + + exports.hasQuote = function () { + return startQuote.test(this.pre) || endQuote.test(this.post); + }; + + exports.hasQuotation = exports.hasQuote; + /** does it have a comma? */ + + exports.hasComma = function () { + return this.hasPost(','); + }; + /** does it end in a period? */ + + + exports.hasPeriod = function () { + return this.hasPost('.') === true && this.hasPost('...') === false; + }; + /** does it end in an exclamation */ + + + exports.hasExclamation = function () { + return this.hasPost('!'); + }; + /** does it end with a question mark? */ + + + exports.hasQuestionMark = function () { + return this.hasPost('?') || this.hasPost('¿'); + }; + /** is there a ... at the end? */ + + + exports.hasEllipses = function () { + return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…'); + }; + /** is there a semicolon after this word? */ + + + exports.hasSemicolon = function () { + return this.hasPost(';'); + }; + /** is there a slash '/' in this word? */ + + + exports.hasSlash = function () { + return /\//.test(this.text); + }; + /** a hyphen connects two words like-this */ + + + exports.hasHyphen = function () { + var hyphen = /(-|–|—)/; + return hyphen.test(this.post) || hyphen.test(this.pre); + }; + /** a dash separates words - like that */ + + + exports.hasDash = function () { + var hyphen = / (-|–|—) /; + return hyphen.test(this.post) || hyphen.test(this.pre); + }; + /** is it multiple words combinded */ + + + exports.hasContraction = function () { + return Boolean(this.implicit); + }; + /** try to sensibly put this punctuation mark into the term */ + + + exports.addPunctuation = function (punct) { + // dont add doubles + if (punct === ',' || punct === ';') { + this.post = this.post.replace(punct, ''); + } + + this.post = punct + this.post; + return this; + }; + }); + var _02Punctuation_1 = _02Punctuation.hasPost; + var _02Punctuation_2 = _02Punctuation.hasPre; + var _02Punctuation_3 = _02Punctuation.hasQuote; + var _02Punctuation_4 = _02Punctuation.hasQuotation; + var _02Punctuation_5 = _02Punctuation.hasComma; + var _02Punctuation_6 = _02Punctuation.hasPeriod; + var _02Punctuation_7 = _02Punctuation.hasExclamation; + var _02Punctuation_8 = _02Punctuation.hasQuestionMark; + var _02Punctuation_9 = _02Punctuation.hasEllipses; + var _02Punctuation_10 = _02Punctuation.hasSemicolon; + var _02Punctuation_11 = _02Punctuation.hasSlash; + var _02Punctuation_12 = _02Punctuation.hasHyphen; + var _02Punctuation_13 = _02Punctuation.hasDash; + var _02Punctuation_14 = _02Punctuation.hasContraction; + var _02Punctuation_15 = _02Punctuation.addPunctuation; + + //declare it up here + var wrapMatch = function wrapMatch() {}; + /** ignore optional/greedy logic, straight-up term match*/ + + + var doesMatch = function doesMatch(t, reg, index, length) { + // support id matches + if (reg.id === t.id) { + return true; + } // support '.' + + + if (reg.anything === true) { + return true; + } // support '^' (in parentheses) + + + if (reg.start === true && index !== 0) { + return false; + } // support '$' (in parentheses) + + + if (reg.end === true && index !== length - 1) { + return false; + } //support a text match + + + if (reg.word !== undefined) { + //match contractions + if (t.implicit !== null && t.implicit === reg.word) { + return true; + } // term aliases for slashes and things + + + if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) { + return true; + } // support ~ match + + + if (reg.soft === true && reg.word === t.root) { + return true; + } //match either .clean or .text + + + return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced; + } //support #Tag + + + if (reg.tag !== undefined) { + return t.tags[reg.tag] === true; + } //support @method + + + if (reg.method !== undefined) { + if (typeof t[reg.method] === 'function' && t[reg.method]() === true) { + return true; + } + + return false; + } //support /reg/ + + + if (reg.regex !== undefined) { + return reg.regex.test(t.clean); + } // support optimized (one|two) + + + if (reg.oneOf !== undefined) { + return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text); + } //support (one|two) + + + if (reg.choices !== undefined) { + // try to support && operator + if (reg.operator === 'and') { + // must match them all + return reg.choices.every(function (r) { + return wrapMatch(t, r, index, length); + }); + } // or must match one + + + return reg.choices.some(function (r) { + return wrapMatch(t, r, index, length); + }); + } + + return false; + }; // wrap result for !negative match logic + + + wrapMatch = function wrapMatch(t, reg, index, length) { + var result = doesMatch(t, reg, index, length); + + if (reg.negative === true) { + return !result; + } + + return result; + }; + + var _doesMatch = wrapMatch; + + var boring = {}; + /** check a match object against this term */ + + var doesMatch_1 = function doesMatch_1(reg, index, length) { + return _doesMatch(this, reg, index, length); + }; + /** does this term look like an acronym? */ + + + var isAcronym_1$1 = function isAcronym_1$1() { + return isAcronym_1(this.text); + }; + /** is this term implied by a contraction? */ + + + var isImplicit = function isImplicit() { + return this.text === '' && Boolean(this.implicit); + }; + /** does the term have at least one good tag? */ + + + var isKnown = function isKnown() { + return Object.keys(this.tags).some(function (t) { + return boring[t] !== true; + }); + }; + /** cache the root property of the term */ + + + var setRoot = function setRoot(world) { + var transform = world.transforms; + var str = this.implicit || this.clean; + + if (this.tags.Plural) { + str = transform.toSingular(str, world); + } + + if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) { + var tense = null; + + if (this.tags.PastTense) { + tense = 'PastTense'; + } else if (this.tags.Gerund) { + tense = 'Gerund'; + } else if (this.tags.PresentTense) { + tense = 'PresentTense'; + } else if (this.tags.Participle) { + tense = 'Participle'; + } else if (this.tags.Actor) { + tense = 'Actor'; + } + + str = transform.toInfinitive(str, world, tense); + } + + this.root = str; + }; + + var _03Misc = { + doesMatch: doesMatch_1, + isAcronym: isAcronym_1$1, + isImplicit: isImplicit, + isKnown: isKnown, + setRoot: setRoot + }; + + var hasSpace = /[\s-]/; + var isUpperCase = /^[A-Z-]+$/; // const titleCase = str => { + // return str.charAt(0).toUpperCase() + str.substr(1) + // } + + /** return various text formats of this term */ + + var textOut = function textOut(options, showPre, showPost) { + options = options || {}; + var word = this.text; + var before = this.pre; + var after = this.post; // -word- + + if (options.reduced === true) { + word = this.reduced || ''; + } + + if (options.root === true) { + word = this.root || ''; + } + + if (options.implicit === true && this.implicit) { + word = this.implicit || ''; + } + + if (options.normal === true) { + word = this.clean || this.text || ''; + } + + if (options.root === true) { + word = this.root || this.reduced || ''; + } + + if (options.unicode === true) { + word = unicode_1(word); + } // cleanup case + + + if (options.titlecase === true) { + if (this.tags.ProperNoun && !this.titleCase()) ; else if (this.tags.Acronym) { + word = word.toUpperCase(); //uppercase acronyms + } else if (isUpperCase.test(word) && !this.tags.Acronym) { + // lowercase everything else + word = word.toLowerCase(); + } + } + + if (options.lowercase === true) { + word = word.toLowerCase(); + } // remove the '.'s from 'F.B.I.' (safely) + + + if (options.acronyms === true && this.tags.Acronym) { + word = word.replace(/\./g, ''); + } // -before/after- + + + if (options.whitespace === true || options.root === true) { + before = ''; + after = ' '; + + if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) { + after = ''; + } + } + + if (options.punctuation === true && !options.root) { + //normalized end punctuation + if (this.hasPost('.') === true) { + after = '.' + after; + } else if (this.hasPost('?') === true) { + after = '?' + after; + } else if (this.hasPost('!') === true) { + after = '!' + after; + } else if (this.hasPost(',') === true) { + after = ',' + after; + } else if (this.hasEllipses() === true) { + after = '...' + after; + } + } + + if (showPre !== true) { + before = ''; + } + + if (showPost !== true) { + // let keep = after.match(/\)/) || '' + after = ''; //keep //after.replace(/[ .?!,]+/, '') + } // remove the '.' from 'Mrs.' (safely) + + + if (options.abbreviations === true && this.tags.Abbreviation) { + after = after.replace(/^\./, ''); + } + + return before + word + after; + }; + + var _04Text = { + textOut: textOut + }; + + var boringTags = { + Auxiliary: 1, + Possessive: 1 + }; + /** a subjective ranking of tags kinda tfidf-based */ + + var rankTags = function rankTags(term, world) { + var tags = Object.keys(term.tags); + var tagSet = world.tags; + tags = tags.sort(function (a, b) { + //bury the tags we dont want + if (boringTags[b] || !tagSet[b]) { + return -1; + } // unknown tags are interesting + + + if (!tagSet[b]) { + return 1; + } + + if (!tagSet[a]) { + return 0; + } // then sort by #of parent tags (most-specific tags first) + + + if (tagSet[a].lineage.length > tagSet[b].lineage.length) { + return 1; + } + + if (tagSet[a].isA.length > tagSet[b].isA.length) { + return -1; + } + + return 0; + }); + return tags; + }; + + var _bestTag = rankTags; + + var jsonDefault = { + text: true, + tags: true, + implicit: true, + whitespace: true, + clean: false, + id: false, + index: false, + offset: false, + bestTag: false + }; + /** return various metadata for this term */ + + var json = function json(options, world) { + options = options || {}; + options = Object.assign({}, jsonDefault, options); + var result = {}; // default on + + if (options.text) { + result.text = this.text; + } + + if (options.normal) { + result.normal = this.normal; + } + + if (options.tags) { + result.tags = Object.keys(this.tags); + } // default off + + + if (options.clean) { + result.clean = this.clean; + } + + if (options.id || options.offset) { + result.id = this.id; + } + + if (options.implicit && this.implicit !== null) { + result.implicit = this.implicit; + } + + if (options.whitespace) { + result.pre = this.pre; + result.post = this.post; + } + + if (options.bestTag) { + result.bestTag = _bestTag(this, world)[0]; + } + + return result; + }; + + var _05Json = { + json: json + }; + + var methods = Object.assign({}, _01Case, _02Punctuation, _03Misc, _04Text, _05Json); + + function isClientSide() { + return typeof window !== 'undefined' && window.document; + } + /** add spaces at the end */ + + + var padEnd = function padEnd(str, width) { + str = str.toString(); + + while (str.length < width) { + str += ' '; + } + + return str; + }; + /** output for verbose-mode */ + + + var logTag = function logTag(t, tag, reason) { + if (isClientSide()) { + console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;'); + return; + } //server-side + + + var log = '\x1b[33m' + padEnd(t.clean, 15) + '\x1b[0m + \x1b[32m' + tag + '\x1b[0m '; + + if (reason) { + log = padEnd(log, 35) + ' ' + reason + ''; + } + + console.log(log); + }; + /** output for verbose mode */ + + + var logUntag = function logUntag(t, tag, reason) { + if (isClientSide()) { + console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;'); + return; + } //server-side + + + var log = '\x1b[33m' + padEnd(t.clean, 3) + ' \x1b[31m - #' + tag + '\x1b[0m '; + + if (reason) { + log = padEnd(log, 35) + ' ' + reason; + } + + console.log(log); + }; + + var isArray = function isArray(arr) { + return Object.prototype.toString.call(arr) === '[object Array]'; + }; + + var titleCase = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); + }; + + var fns = { + logTag: logTag, + logUntag: logUntag, + isArray: isArray, + titleCase: titleCase + }; + + /** add a tag, and its descendents, to a term */ + + var addTag = function addTag(t, tag, reason, world) { + var tagset = world.tags; //support '.' or '-' notation for skipping the tag + + if (tag === '' || tag === '.' || tag === '-') { + return; + } + + if (tag[0] === '#') { + tag = tag.replace(/^#/, ''); + } + + tag = fns.titleCase(tag); //if we already got this one + + if (t.tags[tag] === true) { + return; + } // log it? + + + var isVerbose = world.isVerbose(); + + if (isVerbose === true) { + fns.logTag(t, tag, reason); + } //add tag + + + t.tags[tag] = true; //whee! + //check tagset for any additional things to do... + + if (tagset.hasOwnProperty(tag) === true) { + //add parent Tags + tagset[tag].isA.forEach(function (down) { + t.tags[down] = true; + + if (isVerbose === true) { + fns.logTag(t, '→ ' + down); + } + }); //remove any contrary tags + + t.unTag(tagset[tag].notA, '←', world); + } + }; + /** support an array of tags */ + + + var addTags = function addTags(term, tags, reason, world) { + if (typeof tags !== 'string') { + for (var i = 0; i < tags.length; i++) { + addTag(term, tags[i], reason, world); + } // tags.forEach(tag => addTag(term, tag, reason, world)) + + } else { + addTag(term, tags, reason, world); + } + }; + + var add = addTags; + + var lowerCase = /^[a-z]/; + + var titleCase$1 = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); + }; + /** remove this tag, and its descentents from the term */ + + + var unTag = function unTag(t, tag, reason, world) { + var isVerbose = world.isVerbose(); //support '*' for removing all tags + + if (tag === '*') { + t.tags = {}; + return t; + } + + tag = tag.replace(/^#/, ''); + + if (lowerCase.test(tag) === true) { + tag = titleCase$1(tag); + } // remove the tag + + + if (t.tags[tag] === true) { + delete t.tags[tag]; //log in verbose-mode + + if (isVerbose === true) { + fns.logUntag(t, tag, reason); + } + } //delete downstream tags too + + + var tagset = world.tags; + + if (tagset[tag]) { + var lineage = tagset[tag].lineage; + + for (var i = 0; i < lineage.length; i++) { + if (t.tags[lineage[i]] === true) { + delete t.tags[lineage[i]]; + + if (isVerbose === true) { + fns.logUntag(t, ' - ' + lineage[i]); + } + } + } + } + + return t; + }; //handle an array of tags + + + var untagAll = function untagAll(term, tags, reason, world) { + if (typeof tags !== 'string' && tags) { + for (var i = 0; i < tags.length; i++) { + unTag(term, tags[i], reason, world); + } + + return; + } + + unTag(term, tags, reason, world); + }; + + var unTag_1 = untagAll; + + var canBe = function canBe(term, tag, world) { + var tagset = world.tags; // cleanup tag + + if (tag[0] === '#') { + tag = tag.replace(/^#/, ''); + } //fail-fast + + + if (tagset[tag] === undefined) { + return true; + } //loop through tag's contradictory tags + + + var enemies = tagset[tag].notA || []; + + for (var i = 0; i < enemies.length; i++) { + if (term.tags[enemies[i]] === true) { + return false; + } + } + + if (tagset[tag].isA !== undefined) { + return canBe(term, tagset[tag].isA, world); //recursive + } + + return true; + }; + + var canBe_1 = canBe; + + /** add a tag or tags, and their descendents to this term + * @param {string | string[]} tags - a tag or tags + * @param {string?} [reason] a clue for debugging + */ + + var tag_1 = function tag_1(tags, reason, world) { + add(this, tags, reason, world); + return this; + }; + /** only tag this term if it's consistent with it's current tags */ + + + var tagSafe = function tagSafe(tags, reason, world) { + if (canBe_1(this, tags, world)) { + add(this, tags, reason, world); + } + + return this; + }; + /** remove a tag or tags, and their descendents from this term + * @param {string | string[]} tags - a tag or tags + * @param {string?} [reason] a clue for debugging + */ + + + var unTag_1$1 = function unTag_1$1(tags, reason, world) { + unTag_1(this, tags, reason, world); + return this; + }; + /** is this tag consistent with the word's current tags? + * @param {string | string[]} tags - a tag or tags + * @returns {boolean} + */ + + + var canBe_1$1 = function canBe_1$1(tags, world) { + return canBe_1(this, tags, world); + }; + + var tag = { + tag: tag_1, + tagSafe: tagSafe, + unTag: unTag_1$1, + canBe: canBe_1$1 + }; + + var Term = + /*#__PURE__*/ + function () { + function Term() { + var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + + _classCallCheck(this, Term); + + text = String(text); + var obj = parse(text); // the various forms of our text + + this.text = obj.text || ''; + this.clean = obj.clean; + this.reduced = obj.reduced; + this.root = null; + this.implicit = null; + this.pre = obj.pre || ''; + this.post = obj.post || ''; + this.tags = {}; + this.prev = null; + this.next = null; + this.id = _id(obj.clean); + this.isA = 'Term'; // easier than .constructor... + // support alternative matches + + if (obj.alias) { + this.alias = obj.alias; + } + } + /** set the text of the Term to something else*/ + + + _createClass(Term, [{ + key: "set", + value: function set(str) { + var obj = parse(str); + this.text = obj.text; + this.clean = obj.clean; + return this; + } + }]); + + return Term; + }(); + /** create a deep-copy of this term */ + + + Term.prototype.clone = function () { + var term = new Term(this.text); + term.pre = this.pre; + term.post = this.post; + term.tags = Object.assign({}, this.tags); //use the old id, so it can be matched with .match(doc) + // term.id = this.id + + return term; + }; + + Object.assign(Term.prototype, methods); + Object.assign(Term.prototype, tag); + var Term_1 = Term; + + /** return a flat array of Term objects */ + var terms = function terms(n) { + if (this.length === 0) { + return []; + } // use cache, if it exists + + + if (this.cache.terms) { + if (n !== undefined) { + return this.cache.terms[n]; + } + + return this.cache.terms; + } + + var terms = [this.pool.get(this.start)]; + + for (var i = 0; i < this.length - 1; i += 1) { + var id = terms[terms.length - 1].next; + + if (id === null) { + // throw new Error('linked-list broken') + console.error("Compromise error: Linked list broken in phrase '" + this.start + "'"); + break; + } + + var term = this.pool.get(id); + terms.push(term); //return this one? + + if (n !== undefined && n === i) { + return terms[n]; + } + } + + if (n === undefined) { + this.cache.terms = terms; + } + + if (n !== undefined) { + return terms[n]; + } + + return terms; + }; + /** return a shallow or deep copy of this phrase */ + + + var clone = function clone(isShallow) { + var _this = this; + + if (isShallow) { + var p = this.buildFrom(this.start, this.length); + p.cache = this.cache; + return p; + } //how do we clone part of the pool? + + + var terms = this.terms(); + var newTerms = terms.map(function (t) { + return t.clone(); + }); //connect these new ids up + + newTerms.forEach(function (t, i) { + //add it to the pool.. + _this.pool.add(t); + + if (newTerms[i + 1]) { + t.next = newTerms[i + 1].id; + } + + if (newTerms[i - 1]) { + t.prev = newTerms[i - 1].id; + } + }); + return this.buildFrom(newTerms[0].id, newTerms.length); + }; + /** return last term object */ + + + var lastTerm = function lastTerm() { + var terms = this.terms(); + return terms[terms.length - 1]; + }; + /** quick lookup for a term id */ + + + var hasId = function hasId(wantId) { + if (this.length === 0 || !wantId) { + return false; + } + + if (this.start === wantId) { + return true; + } // use cache, if available + + + if (this.cache.terms) { + var _terms = this.cache.terms; + + for (var i = 0; i < _terms.length; i++) { + if (_terms[i].id === wantId) { + return true; + } + } + + return false; + } // otherwise, go through each term + + + var lastId = this.start; + + for (var _i = 0; _i < this.length - 1; _i += 1) { + var term = this.pool.get(lastId); + + if (term === undefined) { + console.error("Compromise error: Linked list broken. Missing term '".concat(lastId, "' in phrase '").concat(this.start, "'\n")); // throw new Error('linked List error') + + return false; + } + + if (term.next === wantId) { + return true; + } + + lastId = term.next; + } + + return false; + }; + /** how many seperate, non-empty words is it? */ + + + var wordCount = function wordCount() { + return this.terms().filter(function (t) { + return t.text !== ''; + }).length; + }; + /** get the full-sentence this phrase belongs to */ + + + var fullSentence = function fullSentence() { + var t = this.terms(0); //find first term in sentence + + while (t.prev) { + t = this.pool.get(t.prev); + } + + var start = t.id; + var len = 1; //go to end of sentence + + while (t.next) { + t = this.pool.get(t.next); + len += 1; + } + + return this.buildFrom(start, len); + }; + + var _01Utils = { + terms: terms, + clone: clone, + lastTerm: lastTerm, + hasId: hasId, + wordCount: wordCount, + fullSentence: fullSentence + }; + + var trimEnd = function trimEnd(str) { + return str.replace(/ +$/, ''); + }; + /** produce output in the given format */ + + + var text = function text() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var isFirst = arguments.length > 1 ? arguments[1] : undefined; + var isLast = arguments.length > 2 ? arguments[2] : undefined; + + if (typeof options === 'string') { + if (options === 'normal') { + options = { + whitespace: true, + unicode: true, + lowercase: true, + punctuation: true, + acronyms: true, + abbreviations: true, + implicit: true, + normal: true + }; + } else if (options === 'clean') { + options = { + titlecase: false, + lowercase: true, + punctuation: true, + whitespace: true, + unicode: true, + implicit: true + }; + } else if (options === 'reduced') { + options = { + titlecase: false, + lowercase: true, + punctuation: false, + //FIXME: reversed? + whitespace: true, + unicode: true, + implicit: true, + reduced: true + }; + } else if (options === 'root') { + options = { + titlecase: false, + lowercase: true, + punctuation: true, + whitespace: true, + unicode: true, + implicit: true, + root: true + }; + } else { + options = {}; + } + } + + var terms = this.terms(); //this this phrase a complete sentence? + + var isFull = false; + + if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) { + isFull = true; + } + + var text = terms.reduce(function (str, t, i) { + options.last = isLast && i === terms.length - 1; + var showPre = true; + var showPost = true; + + if (isFull === false) { + // dont show beginning whitespace + if (i === 0 && isFirst) { + showPre = false; + } // dont show end-whitespace + + + if (i === terms.length - 1 && isLast) { + showPost = false; + } + } + + var txt = t.textOut(options, showPre, showPost); // if (options.titlecase && i === 0) { + // txt = titleCase(txt) + // } + + return str + txt; + }, ''); //full-phrases show punctuation, but not whitespace + + if (isFull === true && isLast) { + text = trimEnd(text); + } + + if (options.trim === true) { + text = text.trim(); + } + + return text; + }; + + var _02Text = { + text: text + }; + + /** remove start and end whitespace */ + var trim = function trim() { + var terms = this.terms(); + + if (terms.length > 0) { + //trim starting + terms[0].pre = terms[0].pre.replace(/^\s+/, ''); //trim ending + + var lastTerm = terms[terms.length - 1]; + lastTerm.post = lastTerm.post.replace(/\s+$/, ''); + } + + return this; + }; + + var _03Change = { + trim: trim + }; + + var endOfSentence = /[.?!]\s*$/; // replacing a 'word.' with a 'word!' + + var combinePost = function combinePost(before, after) { + //only transfer the whitespace + if (endOfSentence.test(after)) { + var whitespace = before.match(/\s*$/); + return after + whitespace; + } + + return before; + }; //add whitespace to the start of the second bit + + + var addWhitespace = function addWhitespace(beforeTerms, newTerms) { + // add any existing pre-whitespace to beginning + newTerms[0].pre = beforeTerms[0].pre; + var lastTerm = beforeTerms[beforeTerms.length - 1]; //add any existing punctuation to end of our new terms + + var newTerm = newTerms[newTerms.length - 1]; + newTerm.post = combinePost(lastTerm.post, newTerm.post); // remove existing punctuation + + lastTerm.post = ''; //before ←[space] - after + + if (lastTerm.post === '') { + lastTerm.post += ' '; + } + }; //insert this segment into the linked-list + + + var stitchIn = function stitchIn(beforeTerms, newTerms, pool) { + var lastBefore = beforeTerms[beforeTerms.length - 1]; + var lastNew = newTerms[newTerms.length - 1]; + var afterId = lastBefore.next; //connect ours in (main → newPhrase) + + lastBefore.next = newTerms[0].id; //stich the end in (newPhrase → after) + + lastNew.next = afterId; //do it backwards, too + + if (afterId) { + // newPhrase ← after + var afterTerm = pool.get(afterId); + afterTerm.prev = lastNew.id; + } // before ← newPhrase + + + var beforeId = beforeTerms[0].id; + + if (beforeId) { + var newTerm = newTerms[0]; + newTerm.prev = beforeId; + } + }; // avoid stretching a phrase twice. + + + var unique = function unique(list) { + return list.filter(function (o, i) { + return list.indexOf(o) === i; + }); + }; //append one phrase onto another. + + + var appendPhrase = function appendPhrase(before, newPhrase, doc) { + var beforeTerms = before.terms(); + var newTerms = newPhrase.terms(); //spruce-up the whitespace issues + + addWhitespace(beforeTerms, newTerms); //insert this segment into the linked-list + + stitchIn(beforeTerms, newTerms, before.pool); // stretch! + // make each effected phrase longer + + var toStretch = [before]; + var hasId = before.start; + var docs = [doc]; + docs = docs.concat(doc.parents()); // find them all! + + docs.forEach(function (parent) { + // only the phrases that should change + var shouldChange = parent.list.filter(function (p) { + return p.hasId(hasId); + }); + toStretch = toStretch.concat(shouldChange); + }); // don't double-count a phrase + + toStretch = unique(toStretch); + toStretch.forEach(function (p) { + p.length += newPhrase.length; + }); + before.cache = {}; + return before; + }; + + var append = appendPhrase; + + var hasSpace$1 = / /; //a new space needs to be added, either on the new phrase, or the old one + // '[new] [◻old]' -or- '[old] [◻new] [old]' + + var addWhitespace$1 = function addWhitespace(newTerms) { + //add a space before our new text? + // add a space after our text + var lastTerm = newTerms[newTerms.length - 1]; + + if (hasSpace$1.test(lastTerm.post) === false) { + lastTerm.post += ' '; + } + + return; + }; //insert this segment into the linked-list + + + var stitchIn$1 = function stitchIn(main, newPhrase, newTerms) { + // [newPhrase] → [main] + var lastTerm = newTerms[newTerms.length - 1]; + lastTerm.next = main.start; // [before] → [main] + + var pool = main.pool; + var start = pool.get(main.start); + + if (start.prev) { + var before = pool.get(start.prev); + before.next = newPhrase.start; + } //do it backwards, too + // before ← newPhrase + + + newTerms[0].prev = main.terms(0).prev; // newPhrase ← main + + main.terms(0).prev = lastTerm.id; + }; + + var unique$1 = function unique(list) { + return list.filter(function (o, i) { + return list.indexOf(o) === i; + }); + }; //append one phrase onto another + + + var joinPhrase = function joinPhrase(original, newPhrase, doc) { + var starterId = original.start; + var newTerms = newPhrase.terms(); //spruce-up the whitespace issues + + addWhitespace$1(newTerms); //insert this segment into the linked-list + + stitchIn$1(original, newPhrase, newTerms); //increase the length of our phrases + + var toStretch = [original]; + var docs = [doc]; + docs = docs.concat(doc.parents()); + docs.forEach(function (d) { + // only the phrases that should change + var shouldChange = d.list.filter(function (p) { + return p.hasId(starterId) || p.hasId(newPhrase.start); + }); + toStretch = toStretch.concat(shouldChange); + }); // don't double-count + + toStretch = unique$1(toStretch); // stretch these phrases + + toStretch.forEach(function (p) { + p.length += newPhrase.length; // change the start too, if necessary + + if (p.start === starterId) { + p.start = newPhrase.start; + } + + p.cache = {}; + }); + return original; + }; + + var prepend = joinPhrase; + + //recursively decrease the length of all the parent phrases + var shrinkAll = function shrinkAll(doc, id, deleteLength, after) { + var arr = doc.parents(); + arr.push(doc); + arr.forEach(function (d) { + //find our phrase to shrink + var phrase = d.list.find(function (p) { + return p.hasId(id); + }); + + if (!phrase) { + return; + } + + phrase.length -= deleteLength; // does it start with this soon-removed word? + + if (phrase.start === id) { + phrase.start = after.id; + } + + phrase.cache = {}; + }); // cleanup empty phrase objects + + doc.list = doc.list.filter(function (p) { + if (!p.start || !p.length) { + return false; + } + + return true; + }); + }; + /** wrap the linked-list around these terms + * so they don't appear any more + */ + + + var deletePhrase = function deletePhrase(phrase, doc) { + var pool = doc.pool(); + var terms = phrase.terms(); //grab both sides of the chain, + + var prev = pool.get(terms[0].prev) || {}; + var after = pool.get(terms[terms.length - 1].next) || {}; + + if (terms[0].implicit && prev.implicit) { + prev.set(prev.implicit); + prev.post += ' '; + } // //first, change phrase lengths + + + shrinkAll(doc, phrase.start, phrase.length, after); // connect [prev]->[after] + + if (prev) { + prev.next = after.id; + } // connect [prev]<-[after] + + + if (after) { + after.prev = prev.id; + } // lastly, actually delete the terms from the pool? + // for (let i = 0; i < terms.length; i++) { + // pool.remove(terms[i].id) + // } + + }; + + var _delete = deletePhrase; + + /** put this text at the end */ + + var append_1 = function append_1(newPhrase, doc) { + append(this, newPhrase, doc); + return this; + }; + /** add this text to the beginning */ + + + var prepend_1 = function prepend_1(newPhrase, doc) { + prepend(this, newPhrase, doc); + return this; + }; + + var delete_1 = function delete_1(doc) { + _delete(this, doc); + return this; + }; // stich-in newPhrase, stretch 'doc' + parents + + + var replace = function replace(newPhrase, doc) { + //add it do the end + var firstLength = this.length; + append(this, newPhrase, doc); //delete original terms + + var tmp = this.buildFrom(this.start, this.length); + tmp.length = firstLength; + _delete(tmp, doc); + }; + /** + * Turn this phrase object into 3 phrase objects + */ + + + var splitOn = function splitOn(p) { + var terms = this.terms(); + var result = { + before: null, + match: null, + after: null + }; + var index = terms.findIndex(function (t) { + return t.id === p.start; + }); + + if (index === -1) { + return result; + } //make all three sections into phrase-objects + + + var start = terms.slice(0, index); + + if (start.length > 0) { + result.before = this.buildFrom(start[0].id, start.length); + } + + var match = terms.slice(index, index + p.length); + + if (match.length > 0) { + result.match = this.buildFrom(match[0].id, match.length); + } + + var end = terms.slice(index + p.length, terms.length); + + if (end.length > 0) { + result.after = this.buildFrom(end[0].id, end.length, this.pool); + } + + return result; + }; + + var _04Insert = { + append: append_1, + prepend: prepend_1, + "delete": delete_1, + replace: replace, + splitOn: splitOn + }; + + /** return json metadata for this phrase */ + var json$1 = function json() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var world = arguments.length > 1 ? arguments[1] : undefined; + var res = {}; // text data + + if (options.text) { + res.text = this.text(); + } + + if (options.normal) { + res.normal = this.text('normal'); + } + + if (options.clean) { + res.clean = this.text('clean'); + } + + if (options.reduced) { + res.reduced = this.text('reduced'); + } + + if (options.root) { + res.root = this.text('root'); + } + + if (options.trim) { + if (res.text) { + res.text = res.text.trim(); + } + + if (res.normal) { + res.normal = res.normal.trim(); + } + + if (res.reduced) { + res.reduced = res.reduced.trim(); + } + } // terms data + + + if (options.terms) { + if (options.terms === true) { + options.terms = {}; + } + + res.terms = this.terms().map(function (t) { + return t.json(options.terms, world); + }); + } + + return res; + }; + + var _05Json$1 = { + json: json$1 + }; + + /** match any terms after this phrase */ + var lookAhead = function lookAhead(regs) { + // if empty match string, return everything after + if (!regs) { + regs = '.*'; + } + + var pool = this.pool; // get a list of all terms preceding our start + + var terms = []; + + var getAfter = function getAfter(id) { + var term = pool.get(id); + + if (!term) { + return; + } + + terms.push(term); + + if (term.prev) { + getAfter(term.next); //recursion + } + }; + + var all = this.terms(); + var lastTerm = all[all.length - 1]; + getAfter(lastTerm.next); + + if (terms.length === 0) { + return []; + } // got the terms, make a phrase from them + + + var p = this.buildFrom(terms[0].id, terms.length); + return p.match(regs); + }; + /** match any terms before this phrase */ + + + var lookBehind = function lookBehind(regs) { + // if empty match string, return everything before + if (!regs) { + regs = '.*'; + } + + var pool = this.pool; // get a list of all terms preceding our start + + var terms = []; + + var getBefore = function getBefore(id) { + var term = pool.get(id); + + if (!term) { + return; + } + + terms.push(term); + + if (term.prev) { + getBefore(term.prev); //recursion + } + }; + + var term = pool.get(this.start); + getBefore(term.prev); + + if (terms.length === 0) { + return []; + } // got the terms, make a phrase from them + + + var p = this.buildFrom(terms[terms.length - 1].id, terms.length); + return p.match(regs); + }; + + var _06Lookahead = { + lookAhead: lookAhead, + lookBehind: lookBehind + }; + + var methods$1 = Object.assign({}, _01Utils, _02Text, _03Change, _04Insert, _05Json$1, _06Lookahead); + + // try to avoid doing the match + var failFast = function failFast(p, regs) { + if (regs.length === 0) { + return true; + } + + for (var i = 0; i < regs.length; i += 1) { + var reg = regs[i]; //logical quick-ones + + if (reg.optional !== true && reg.negative !== true) { + //start/end impossibilites + if (reg.start === true && i > 0) { + return true; + } + } //this is not possible + + + if (reg.anything === true && reg.negative === true) { + return true; + } + } + + return false; + }; + + var _02FailFast = failFast; + + //found a match? it's greedy? keep going! + + var getGreedy = function getGreedy(terms, t, reg, until, index, length) { + var start = t; + + for (; t < terms.length; t += 1) { + //stop for next-reg match + if (until && terms[t].doesMatch(until, index + t, length)) { + return t; + } + + var count = t - start + 1; // is it max-length now? + + if (reg.max !== undefined && count === reg.max) { + return t; + } //stop here + + + if (terms[t].doesMatch(reg, index + t, length) === false) { + // is it too short? + if (reg.min !== undefined && count < reg.min) { + return null; + } + + return t; + } + } + + return t; + }; //'unspecific greedy' is a weird situation. + + + var greedyTo = function greedyTo(terms, t, nextReg, index, length) { + //if there's no next one, just go off the end! + if (!nextReg) { + return terms.length; + } //otherwise, we're looking for the next one + + + for (; t < terms.length; t += 1) { + if (terms[t].doesMatch(nextReg, index + t, length) === true) { + return t; + } + } //guess it doesn't exist, then. + + + return null; + }; // get or create named group + + + var getOrCreateGroup = function getOrCreateGroup(namedGroups, namedGroupId, terms, startIndex, group) { + var g = namedGroups[namedGroupId]; + + if (g) { + return g; + } + + var id = terms[startIndex].id; + namedGroups[namedGroupId] = { + group: String(group), + start: id, + length: 0 + }; + return namedGroups[namedGroupId]; + }; + /** tries to match a sequence of terms, starting from here */ + + + var tryHere = function tryHere(terms, regs, index, length) { + var namedGroups = {}; + var previousGroupId = null; + var t = 0; // we must satisfy each rule in 'regs' + + for (var r = 0; r < regs.length; r += 1) { + var reg = regs[r]; // Check if this reg has a named capture group + + var isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'; + var namedGroupId = null; // Reuse previous capture group if same + + if (isNamedGroup) { + var prev = regs[r - 1]; + + if (prev && prev.named === reg.named && previousGroupId) { + namedGroupId = previousGroupId; + } else { + namedGroupId = _id(reg.named); + previousGroupId = namedGroupId; + } + } //should we fail here? + + + if (!terms[t]) { + //are all remaining regs optional? + var hasNeeds = regs.slice(r).some(function (remain) { + return !remain.optional; + }); + + if (hasNeeds === false) { + break; + } // have unmet needs + + + return [false, null]; + } //support 'unspecific greedy' .* properly + + + if (reg.anything === true && reg.greedy === true) { + var skipto = greedyTo(terms, t, regs[r + 1], reg, index); // ensure it's long enough + + if (reg.min !== undefined && skipto - t < reg.min) { + return [false, null]; + } // reduce it back, if it's too long + + + if (reg.max !== undefined && skipto - t > reg.max) { + t = t + reg.max; + continue; + } + + if (skipto === null) { + return [false, null]; //couldn't find it + } // is it really this easy?.... + + + if (isNamedGroup) { + var g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named); // Update group + + g.length = skipto - t; + } + + t = skipto; + continue; + } //if it looks like a match, continue + //we have a special case where an end-anchored greedy match may need to + //start matching before the actual end; we do this by (temporarily!) + //removing the "end" property from the matching token... since this is + //very situation-specific, we *only* do this when we really need to. + + + if (reg.anything === true || reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { + end: false + }), index + t, length) === true || terms[t].doesMatch(reg, index + t, length) === true) { + var startAt = t; // okay, it was a match, but if it optional too, + // we should check the next reg too, to skip it? + + if (reg.optional && regs[r + 1]) { + // does the next reg match it too? + if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) { + // but does the next reg match the next term?? + // only skip if it doesn't + if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) { + r += 1; + } + } + } //advance to the next term! + + + t += 1; //check any ending '$' flags + + if (reg.end === true) { + //if this isn't the last term, refuse the match + if (t !== terms.length && reg.greedy !== true) { + return [false, null]; + } + } //try keep it going! + + + if (reg.greedy === true) { + // for greedy checking, we no longer care about the reg.start + // value, and leaving it can cause failures for anchored greedy + // matches. ditto for end-greedy matches: we need an earlier non- + // ending match to succceed until we get to the actual end. + t = getGreedy(terms, t, Object.assign({}, reg, { + start: false, + end: false + }), regs[r + 1], index, length); + + if (t === null) { + return [false, null]; //greedy was too short + } // if this was also an end-anchor match, check to see we really + // reached the end + + + if (reg.end === true && index + t !== length) { + return [false, null]; //greedy didn't reach the end + } + } + + if (isNamedGroup) { + // Get or create capture group + var _g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named); // Update group - add greedy or increment length + + + if (t > 1 && reg.greedy) { + _g.length += t - startAt; + } else { + _g.length++; + } + } + + continue; + } //bah, who cares, keep going + + + if (reg.optional === true) { + continue; + } // should we skip-over an implicit word? + + + if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) { + // does the next one match? + if (terms[t + 1].doesMatch(reg, index + t, length)) { + t += 2; + continue; + } + } // console.log(' ❌\n\n') + + + return [false, null]; + } //return our result + + + return [terms.slice(0, t), namedGroups]; + }; + + var _03TryMatch = tryHere; + + var postProcess = function postProcess(terms, regs, matches) { + if (!matches || matches.length === 0) { + return matches; + } // ensure end reg has the end term + + + var atEnd = regs.some(function (r) { + return r.end; + }); + + if (atEnd) { + var lastTerm = terms[terms.length - 1]; + matches = matches.filter(function (_ref) { + var arr = _ref.match; + return arr.indexOf(lastTerm) !== -1; + }); + } + + return matches; + }; + + var _04PostProcess = postProcess; + + /* break-down a match expression into this: + { + word:'', + tag:'', + regex:'', + + start:false, + end:false, + negative:false, + anything:false, + greedy:false, + optional:false, + + named:'', + choices:[], + } + */ + var hasMinMax = /\{([0-9]+,?[0-9]*)\}/; + var andSign = /&&/; + var captureName = new RegExp(/^<(\S+)>/); + + var titleCase$2 = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); + }; + + var end = function end(str) { + return str[str.length - 1]; + }; + + var start = function start(str) { + return str[0]; + }; + + var stripStart = function stripStart(str) { + return str.substr(1); + }; + + var stripEnd = function stripEnd(str) { + return str.substr(0, str.length - 1); + }; + + var stripBoth = function stripBoth(str) { + str = stripStart(str); + str = stripEnd(str); + return str; + }; // + + + var parseToken = function parseToken(w) { + var obj = {}; //collect any flags (do it twice) + + for (var i = 0; i < 2; i += 1) { + //end-flag + if (end(w) === '$') { + obj.end = true; + w = stripEnd(w); + } //front-flag + + + if (start(w) === '^') { + obj.start = true; + w = stripStart(w); + } //capture group (this one can span multiple-terms) + + + if (start(w) === '[' || end(w) === ']') { + obj.named = true; + + if (start(w) === '[') { + obj.groupType = end(w) === ']' ? 'single' : 'start'; + } else { + obj.groupType = 'end'; + } + + w = w.replace(/^\[/, ''); + w = w.replace(/\]$/, ''); // Use capture group name + + if (start(w) === '<') { + var res = captureName.exec(w); + + if (res.length >= 2) { + obj.named = res[1]; + w = w.replace(res[0], ''); + } + } + } //back-flags + + + if (end(w) === '+') { + obj.greedy = true; + w = stripEnd(w); + } + + if (w !== '*' && end(w) === '*' && w !== '\\*') { + obj.greedy = true; + w = stripEnd(w); + } + + if (end(w) === '?') { + obj.optional = true; + w = stripEnd(w); + } + + if (start(w) === '!') { + obj.negative = true; + w = stripStart(w); + } //wrapped-flags + + + if (start(w) === '(' && end(w) === ')') { + // support (one && two) + if (andSign.test(w)) { + obj.choices = w.split(andSign); + obj.operator = 'and'; + } else { + obj.choices = w.split('|'); + obj.operator = 'or'; + } //remove '(' and ')' + + + obj.choices[0] = stripStart(obj.choices[0]); + var last = obj.choices.length - 1; + obj.choices[last] = stripEnd(obj.choices[last]); // clean up the results + + obj.choices = obj.choices.map(function (s) { + return s.trim(); + }); + obj.choices = obj.choices.filter(function (s) { + return s; + }); //recursion alert! + + obj.choices = obj.choices.map(parseToken); + w = ''; + } //regex + + + if (start(w) === '/' && end(w) === '/') { + w = stripBoth(w); + obj.regex = new RegExp(w); //potential vuln - security/detect-non-literal-regexp + + return obj; + } //soft-match + + + if (start(w) === '~' && end(w) === '~') { + w = stripBoth(w); + obj.soft = true; + obj.word = w; + return obj; + } + } // support #Tag{0,9} + + + if (hasMinMax.test(w) === true) { + w = w.replace(hasMinMax, function (a, b) { + var arr = b.split(/,/g); + + if (arr.length === 1) { + // '{3}' Exactly three times + obj.min = Number(arr[0]); + obj.max = Number(arr[0]); + } else { + // '{2,4}' Two to four times + // '{3,}' Three or more times + obj.min = Number(arr[0]); + obj.max = Number(arr[1] || 999); + } + + obj.greedy = true; + return ''; + }); + } //do the actual token content + + + if (start(w) === '#') { + obj.tag = stripStart(w); + obj.tag = titleCase$2(obj.tag); + return obj; + } //dynamic function on a term object + + + if (start(w) === '@') { + obj.method = stripStart(w); + return obj; + } + + if (w === '.') { + obj.anything = true; + return obj; + } //support alone-astrix + + + if (w === '*') { + obj.anything = true; + obj.greedy = true; + obj.optional = true; + return obj; + } + + if (w) { + //somehow handle encoded-chars? + w = w.replace('\\*', '*'); + w = w.replace('\\.', '.'); + obj.word = w.toLowerCase(); + } + + return obj; + }; + + var parseToken_1 = parseToken; + + var isNamed = function isNamed(capture) { + return typeof capture === 'string' || typeof capture === 'number'; + }; + + var fillGroups = function fillGroups(tokens) { + var convert = false; + var index = -1; + var current; //'fill in' capture groups between start-end + + for (var i = 0; i < tokens.length; i++) { + var n = tokens[i]; // Give name to un-named single tokens + + if (n.groupType === 'single' && n.named === true) { + index += 1; + n.named = index; + continue; + } // Start converting tokens + + + if (n.groupType === 'start') { + convert = true; + + if (isNamed(n.named)) { + current = n.named; + } else { + index += 1; + current = index; + } + } // Ensure this token has the right name + + + if (convert) { + n.named = current; + } // Stop converting tokens + + + if (n.groupType === 'end') { + convert = false; + } + } + + return tokens; + }; + + var useOneOf = function useOneOf(tokens) { + return tokens.map(function (token) { + if (token.choices !== undefined) { + // are they all straight non-optional words? + var shouldPack = token.choices.every(function (c) { + return c.optional !== true && c.negative !== true && c.word !== undefined; + }); + + if (shouldPack === true) { + var oneOf = {}; + token.choices.forEach(function (c) { + return oneOf[c.word] = true; + }); + token.oneOf = oneOf; + delete token.choices; + } + } + + return token; + }); + }; + + var postProcess$1 = function postProcess(tokens) { + // ensure all capture groups are filled between start and end + // give all capture groups names + var count = tokens.filter(function (t) { + return t.groupType; + }).length; + + if (count > 0) { + tokens = fillGroups(tokens); + } // convert 'choices' format to 'oneOf' format + + + tokens = useOneOf(tokens); // console.log(tokens) + + return tokens; + }; + + var postProcess_1 = postProcess$1; + + var isArray$1 = function isArray(arr) { + return Object.prototype.toString.call(arr) === '[object Array]'; + }; //split-up by (these things) + + + var byParentheses = function byParentheses(str) { + var arr = str.split(/([\^\[\!]*(?:<\S+>)?\(.*?\)[?+*]*\]?\$?)/); + arr = arr.map(function (s) { + return s.trim(); + }); + return arr; + }; + + var byWords = function byWords(arr) { + var words = []; + arr.forEach(function (a) { + //keep brackets lumped together + if (/^[[^_/]?\(/.test(a[0])) { + words.push(a); + return; + } + + var list = a.split(' '); + list = list.filter(function (w) { + return w; + }); + words = words.concat(list); + }); + return words; + }; //turn an array into a 'choices' list + + + var byArray = function byArray(arr) { + return [{ + choices: arr.map(function (s) { + return { + word: s + }; + }) + }]; + }; + + var fromDoc = function fromDoc(doc) { + if (!doc || !doc.list || !doc.list[0]) { + return []; + } + + var ids = []; + doc.list.forEach(function (p) { + p.terms().forEach(function (t) { + ids.push({ + id: t.id + }); + }); + }); + return [{ + choices: ids, + greedy: true + }]; + }; + /** parse a match-syntax string into json */ + + + var syntax = function syntax(input) { + // fail-fast + if (input === null || input === undefined || input === '') { + return []; + } //try to support a ton of different formats: + + + if (_typeof(input) === 'object') { + if (isArray$1(input)) { + if (input.length === 0 || !input[0]) { + return []; + } //is it a pre-parsed reg-list? + + + if (_typeof(input[0]) === 'object') { + return input; + } //support a flat array of normalized words + + + if (typeof input[0] === 'string') { + return byArray(input); + } + } //support passing-in a compromise object as a match + + + if (input && input.isA === 'Doc') { + return fromDoc(input); + } + + return []; + } + + if (typeof input === 'number') { + input = String(input); //go for it? + } + + var tokens = byParentheses(input); + tokens = byWords(tokens); + tokens = tokens.map(parseToken_1); //clean up anything weird + + tokens = postProcess_1(tokens); // console.log(JSON.stringify(tokens, null, 2)) + + return tokens; + }; + + var syntax_1 = syntax; + + /** returns a simple array of arrays */ + + var matchAll = function matchAll(p, regs) { + var matchOne = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + //if we forgot to parse it.. + if (typeof regs === 'string') { + regs = syntax_1(regs); + } //try to dismiss it, at-once + + + if (_02FailFast(p, regs) === true) { + return []; + } //any match needs to be this long, at least + + + var minLength = regs.filter(function (r) { + return r.optional !== true; + }).length; + var terms = p.terms(); + var matches = []; //optimisation for '^' start logic + + if (regs[0].start === true) { + var _tryMatch = _03TryMatch(terms, regs, 0, terms.length), + _tryMatch2 = _slicedToArray(_tryMatch, 2), + match = _tryMatch2[0], + groups = _tryMatch2[1]; + + if (match !== false && match.length > 0) { + match = match.filter(function (m) { + return m; + }); + matches.push({ + match: match, + groups: groups + }); + } + + return _04PostProcess(terms, regs, matches); + } //try starting, from every term + + + for (var i = 0; i < terms.length; i += 1) { + // slice may be too short + if (i + minLength > terms.length) { + break; + } //try it! + + + var _tryMatch3 = _03TryMatch(terms.slice(i), regs, i, terms.length), + _tryMatch4 = _slicedToArray(_tryMatch3, 2), + _match = _tryMatch4[0], + _groups = _tryMatch4[1]; + + if (_match !== false && _match.length > 0) { + //zoom forward! + i += _match.length - 1; //[capture-groups] return some null responses + + _match = _match.filter(function (m) { + return m; + }); + matches.push({ + match: _match, + groups: _groups + }); //ok, maybe that's enough? + + if (matchOne === true) { + return _04PostProcess(terms, regs, matches); + } + } + } + + return _04PostProcess(terms, regs, matches); + }; + + var _01MatchAll = matchAll; + + /** return anything that doesn't match. + * returns a simple array of arrays + */ + + var notMatch = function notMatch(p, regs) { + var found = {}; + var arr = _01MatchAll(p, regs); + arr.forEach(function (_ref) { + var ts = _ref.match; + ts.forEach(function (t) { + found[t.id] = true; + }); + }); //return anything not found + + var terms = p.terms(); + var result = []; + var current = []; + terms.forEach(function (t) { + if (found[t.id] === true) { + if (current.length > 0) { + result.push(current); + current = []; + } + + return; + } + + current.push(t); + }); + + if (current.length > 0) { + result.push(current); + } + + return result; + }; + + var not = notMatch; + + /** return an array of matching phrases */ + + var match_1 = function match_1(regs) { + var _this = this; + + var justOne = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + var matches = _01MatchAll(this, regs, justOne); //make them phrase objects + + matches = matches.map(function (_ref) { + var match = _ref.match, + groups = _ref.groups; + + var p = _this.buildFrom(match[0].id, match.length, groups); + + p.cache.terms = match; + return p; + }); + return matches; + }; + /** return boolean if one match is found */ + + + var has = function has(regs) { + var matches = _01MatchAll(this, regs, true); + return matches.length > 0; + }; + /** remove all matches from the result */ + + + var not$1 = function not$1(regs) { + var _this2 = this; + + var matches = not(this, regs); //make them phrase objects + + matches = matches.map(function (list) { + return _this2.buildFrom(list[0].id, list.length); + }); + return matches; + }; + /** return a list of phrases that can have this tag */ + + + var canBe$1 = function canBe(tag, world) { + var _this3 = this; + + var results = []; + var terms = this.terms(); + var previous = false; + + for (var i = 0; i < terms.length; i += 1) { + var can = terms[i].canBe(tag, world); + + if (can === true) { + if (previous === true) { + //add it to the end + results[results.length - 1].push(terms[i]); + } else { + results.push([terms[i]]); //make a new one + } + + previous = can; + } + } //turn them into Phrase objects + + + results = results.filter(function (a) { + return a.length > 0; + }).map(function (arr) { + return _this3.buildFrom(arr[0].id, arr.length); + }); + return results; + }; + + var match = { + match: match_1, + has: has, + not: not$1, + canBe: canBe$1 + }; + + var Phrase = function Phrase(id, length, pool) { + _classCallCheck(this, Phrase); + + this.start = id; + this.length = length; + this.isA = 'Phrase'; // easier than .constructor... + + Object.defineProperty(this, 'pool', { + enumerable: false, + writable: true, + value: pool + }); + Object.defineProperty(this, 'cache', { + enumerable: false, + writable: true, + value: {} + }); + Object.defineProperty(this, 'groups', { + enumerable: false, + writable: true, + value: {} + }); + }; + /** create a new Phrase object from an id and length */ + + + Phrase.prototype.buildFrom = function (id, length, groups) { + var p = new Phrase(id, length, this.pool); //copy-over or replace capture-groups too + + if (groups && Object.keys(groups).length > 0) { + p.groups = groups; + } else { + p.groups = this.groups; + } + + return p; + }; //apply methods + + + Object.assign(Phrase.prototype, match); + Object.assign(Phrase.prototype, methods$1); //apply aliases + + var aliases = { + term: 'terms' + }; + Object.keys(aliases).forEach(function (k) { + return Phrase.prototype[k] = Phrase.prototype[aliases[k]]; + }); + var Phrase_1 = Phrase; + + /** a key-value store of all terms in our Document */ + var Pool = + /*#__PURE__*/ + function () { + function Pool() { + var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, Pool); + + //quiet this property in console.logs + Object.defineProperty(this, 'words', { + enumerable: false, + value: words + }); + } + /** throw a new term object in */ + + + _createClass(Pool, [{ + key: "add", + value: function add(term) { + this.words[term.id] = term; + return this; + } + /** find a term by it's id */ + + }, { + key: "get", + value: function get(id) { + return this.words[id]; + } + /** find a term by it's id */ + + }, { + key: "remove", + value: function remove(id) { + delete this.words[id]; + } + }, { + key: "merge", + value: function merge(pool) { + Object.assign(this.words, pool.words); + return this; + } + /** helper method */ + + }, { + key: "stats", + value: function stats() { + return { + words: Object.keys(this.words).length + }; + } + }]); + + return Pool; + }(); + /** make a deep-copy of all terms */ + + + Pool.prototype.clone = function () { + var _this = this; + + var keys = Object.keys(this.words); + var words = keys.reduce(function (h, k) { + var t = _this.words[k].clone(); + + h[t.id] = t; + return h; + }, {}); + return new Pool(words); + }; + + var Pool_1 = Pool; + + //add forward/backward 'linked-list' prev/next ids + var linkTerms = function linkTerms(terms) { + terms.forEach(function (term, i) { + if (i > 0) { + term.prev = terms[i - 1].id; + } + + if (terms[i + 1]) { + term.next = terms[i + 1].id; + } + }); + }; + + var _linkTerms = linkTerms; + + //(Rule-based sentence boundary segmentation) - chop given text into its proper sentences. + // Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc. + // @spencermountain 2017 MIT + //proper nouns with exclamation marks + // const blacklist = { + // yahoo: true, + // joomla: true, + // jeopardy: true, + // } + //regs- + var initSplit = /(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g; + var hasSomething = /\S/; + var isAcronym$1 = /[ .][A-Z]\.? *$/i; + var hasEllipse = /(?:\u2026|\.{2,}) *$/; + var newLine = /((?:\r?\n|\r)+)/; // Match different new-line formats + + var hasLetter = /[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i; + var startWhitespace = /^\s+/; // Start with a regex: + + var naiive_split = function naiive_split(text) { + var all = []; //first, split by newline + + var lines = text.split(newLine); + + for (var i = 0; i < lines.length; i++) { + //split by period, question-mark, and exclamation-mark + var arr = lines[i].split(initSplit); + + for (var o = 0; o < arr.length; o++) { + all.push(arr[o]); + } + } + + return all; + }; + /** does this look like a sentence? */ + + + var isSentence = function isSentence(str, abbrevs) { + // check for 'F.B.I.' + if (isAcronym$1.test(str) === true) { + return false; + } //check for '...' + + + if (hasEllipse.test(str) === true) { + return false; + } // must have a letter + + + if (hasLetter.test(str) === false) { + return false; + } + + var txt = str.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/, ''); + var words = txt.split(' '); + var lastWord = words[words.length - 1].toLowerCase(); // check for 'Mr.' + + if (abbrevs.hasOwnProperty(lastWord)) { + return false; + } // //check for jeopardy! + // if (blacklist.hasOwnProperty(lastWord)) { + // return false + // } + + + return true; + }; + + var splitSentences = function splitSentences(text, world) { + var abbrevs = world.cache.abbreviations; + text = text || ''; + text = String(text); + var sentences = []; // First do a greedy-split.. + + var chunks = []; // Ensure it 'smells like' a sentence + + if (!text || typeof text !== 'string' || hasSomething.test(text) === false) { + return sentences; + } // Start somewhere: + + + var splits = naiive_split(text); // Filter-out the crap ones + + for (var i = 0; i < splits.length; i++) { + var s = splits[i]; + + if (s === undefined || s === '') { + continue; + } //this is meaningful whitespace + + + if (hasSomething.test(s) === false) { + //add it to the last one + if (chunks[chunks.length - 1]) { + chunks[chunks.length - 1] += s; + continue; + } else if (splits[i + 1]) { + //add it to the next one + splits[i + 1] = s + splits[i + 1]; + continue; + } + } //else, only whitespace, no terms, no sentence + + + chunks.push(s); + } //detection of non-sentence chunks: + //loop through these chunks, and join the non-sentence chunks back together.. + + + for (var _i = 0; _i < chunks.length; _i++) { + var c = chunks[_i]; //should this chunk be combined with the next one? + + if (chunks[_i + 1] && isSentence(c, abbrevs) === false) { + chunks[_i + 1] = c + (chunks[_i + 1] || ''); + } else if (c && c.length > 0) { + //&& hasLetter.test(c) + //this chunk is a proper sentence.. + sentences.push(c); + chunks[_i] = ''; + } + } //if we never got a sentence, return the given text + + + if (sentences.length === 0) { + return [text]; + } //move whitespace to the ends of sentences, when possible + //['hello',' world'] -> ['hello ','world'] + + + for (var _i2 = 1; _i2 < sentences.length; _i2 += 1) { + var ws = sentences[_i2].match(startWhitespace); + + if (ws !== null) { + sentences[_i2 - 1] += ws[0]; + sentences[_i2] = sentences[_i2].replace(startWhitespace, ''); + } + } + + return sentences; + }; + + var _01Sentences = splitSentences; // console.log(sentence_parser('john f. kennedy')); + + var wordlike = /\S/; + var isBoundary = /^[!?.]+$/; + var naiiveSplit = /(\S+)/; + var isSlash = /[a-z] ?\/ ?[a-z]*$/; + var notWord = { + '.': true, + '-': true, + //dash + '–': true, + //en-dash + '—': true, + //em-dash + '--': true, + '...': true // '/': true, // 'one / two' + + }; + + var hasHyphen = function hasHyphen(str) { + //dont split 're-do' + if (/^(re|un)-?[^aeiou]./.test(str) === true) { + return false; + } //letter-number + + + var reg = /^([a-z\u00C0-\u00FF`"'/]+)(-|–|—)([a-z0-9\u00C0-\u00FF].*)/i; + + if (reg.test(str) === true) { + return true; + } //support weird number-emdash combo '2010–2011' + // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i + // if (reg2.test(str)) { + // return true + // } + + + return false; + }; // 'he / she' should be one word + + + var combineSlashes = function combineSlashes(arr) { + for (var i = 1; i < arr.length - 1; i++) { + if (isSlash.test(arr[i])) { + arr[i - 1] += arr[i] + arr[i + 1]; + arr[i] = null; + arr[i + 1] = null; + } + } + + return arr; + }; + + var splitHyphens = function splitHyphens(word) { + var arr = []; //support multiple-hyphenated-terms + + var hyphens = word.split(/[-–—]/); + var whichDash = '-'; + var found = word.match(/[-–—]/); + + if (found && found[0]) { + whichDash = found; + } + + for (var o = 0; o < hyphens.length; o++) { + if (o === hyphens.length - 1) { + arr.push(hyphens[o]); + } else { + arr.push(hyphens[o] + whichDash); + } + } + + return arr; + }; //turn a string into an array of strings (naiive for now, lumped later) + + + var splitWords = function splitWords(str) { + var result = []; + var arr = []; //start with a naiive split + + str = str || ''; + + if (typeof str === 'number') { + str = String(str); + } + + var words = str.split(naiiveSplit); + + for (var i = 0; i < words.length; i++) { + //split 'one-two' + if (hasHyphen(words[i]) === true) { + arr = arr.concat(splitHyphens(words[i])); + continue; + } + + arr.push(words[i]); + } //greedy merge whitespace+arr to the right + + + var carry = ''; + + for (var _i = 0; _i < arr.length; _i++) { + var word = arr[_i]; //if it's more than a whitespace + + if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) { + //put whitespace on end of previous term, if possible + if (result.length > 0) { + result[result.length - 1] += carry; + result.push(word); + } else { + //otherwise, but whitespace before + result.push(carry + word); + } + + carry = ''; + } else { + carry += word; + } + } //handle last one + + + if (carry) { + if (result.length === 0) { + result[0] = ''; + } + + result[result.length - 1] += carry; //put it on the end + } // combine 'one / two' + + + result = combineSlashes(result); // remove empty results + + result = result.filter(function (s) { + return s; + }); + return result; + }; + + var _02Words = splitWords; + + /** turn a string into an array of Phrase objects */ + + var fromText = function fromText() { + var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var world = arguments.length > 1 ? arguments[1] : undefined; + var pool = arguments.length > 2 ? arguments[2] : undefined; + + //a bit of validation, first + if (typeof text !== 'string') { + if (typeof text === 'number') { + text = String(text); + } + } //tokenize into words + + + var sentences = _01Sentences(text, world); + sentences = sentences.map(function (str) { + return _02Words(str); + }); //turn them into proper objects + + pool = pool || new Pool_1(); + var phrases = sentences.map(function (terms) { + terms = terms.map(function (str) { + var term = new Term_1(str); + pool.add(term); + return term; + }); //add next/previous ids + + _linkTerms(terms); //return phrase objects + + var p = new Phrase_1(terms[0].id, terms.length, pool); + p.cache.terms = terms; + return p; + }); //return them ready for a Document object + + return phrases; + }; + + var _01Tokenizer = fromText; + + var fromJSON = function fromJSON(json, world) { + var pool = new Pool_1(); + var phrases = json.map(function (p, k) { + var terms = p.terms.map(function (o, i) { + var term = new Term_1(o.text); + term.pre = o.pre !== undefined ? o.pre : ''; + + if (o.post === undefined) { + o.post = ' '; //no given space for very last term + + if (i >= p.terms.length - 1) { + o.post = '. '; + + if (k >= p.terms.length - 1) { + o.post = '.'; + } + } + } + + term.post = o.post !== undefined ? o.post : ' '; + + if (o.tags) { + o.tags.forEach(function (tag) { + return term.tag(tag, '', world); + }); + } + + pool.add(term); + return term; + }); //add prev/next links + + _linkTerms(terms); // return a proper Phrase object + + return new Phrase_1(terms[0].id, terms.length, pool); + }); + return phrases; + }; + + var fromJSON_1 = fromJSON; + + var _version = '13.1.1'; + + var _object = {}; + + var entity = ['Person', 'Place', 'Organization']; + var nouns = { + Noun: { + notA: ['Verb', 'Adjective', 'Adverb'] + }, + // - singular + Singular: { + isA: 'Noun', + notA: 'Plural' + }, + //a specific thing that's capitalized + ProperNoun: { + isA: 'Noun' + }, + // -- people + Person: { + isA: ['ProperNoun', 'Singular'], + notA: ['Place', 'Organization', 'Date'] + }, + FirstName: { + isA: 'Person' + }, + MaleName: { + isA: 'FirstName', + notA: ['FemaleName', 'LastName'] + }, + FemaleName: { + isA: 'FirstName', + notA: ['MaleName', 'LastName'] + }, + LastName: { + isA: 'Person', + notA: ['FirstName'] + }, + NickName: { + isA: 'Person', + notA: ['FirstName', 'LastName'] + }, + Honorific: { + isA: 'Noun', + notA: ['FirstName', 'LastName', 'Value'] + }, + // -- places + Place: { + isA: 'Singular', + notA: ['Person', 'Organization'] + }, + Country: { + isA: ['Place', 'ProperNoun'], + notA: ['City'] + }, + City: { + isA: ['Place', 'ProperNoun'], + notA: ['Country'] + }, + Region: { + isA: ['Place', 'ProperNoun'] + }, + Address: { + isA: 'Place' + }, + //---Orgs--- + Organization: { + isA: ['Singular', 'ProperNoun'], + notA: ['Person', 'Place'] + }, + SportsTeam: { + isA: 'Organization' + }, + School: { + isA: 'Organization' + }, + Company: { + isA: 'Organization' + }, + // - plural + Plural: { + isA: 'Noun', + notA: ['Singular'] + }, + //(not plural or singular) + Uncountable: { + isA: 'Noun' + }, + Pronoun: { + isA: 'Noun', + notA: entity + }, + //a word for someone doing something -'plumber' + Actor: { + isA: 'Noun', + notA: entity + }, + //a gerund-as-noun - 'swimming' + Activity: { + isA: 'Noun', + notA: ['Person', 'Place'] + }, + //'kilograms' + Unit: { + isA: 'Noun', + notA: entity + }, + //'Canadians' + Demonym: { + isA: ['Noun', 'ProperNoun'], + notA: entity + }, + //`john's` + Possessive: { + isA: 'Noun' // notA: 'Pronoun', + + } + }; + + var verbs = { + Verb: { + notA: ['Noun', 'Adjective', 'Adverb', 'Value'] + }, + // walks + PresentTense: { + isA: 'Verb', + notA: ['PastTense', 'Copula', 'FutureTense'] + }, + // neutral form - 'walk' + Infinitive: { + isA: 'PresentTense', + notA: ['PastTense', 'Gerund'] + }, + // walking + Gerund: { + isA: 'PresentTense', + notA: ['PastTense', 'Copula', 'FutureTense'] + }, + // walked + PastTense: { + isA: 'Verb', + notA: ['FutureTense'] + }, + // will walk + FutureTense: { + isA: 'Verb' + }, + // is + Copula: { + isA: 'Verb' + }, + // would have + Modal: { + isA: 'Verb', + notA: ['Infinitive'] + }, + // had walked + PerfectTense: { + isA: 'Verb', + notA: 'Gerund' + }, + Pluperfect: { + isA: 'Verb' + }, + // shown + Participle: { + isA: 'Verb' + }, + // show up + PhrasalVerb: { + isA: 'Verb' + }, + //'up' part + Particle: { + isA: 'PhrasalVerb' + } + }; + + var values = { + Value: { + notA: ['Verb', 'Adjective', 'Adverb'] + }, + Ordinal: { + isA: 'Value', + notA: ['Cardinal'] + }, + Cardinal: { + isA: 'Value', + notA: ['Ordinal'] + }, + RomanNumeral: { + isA: 'Cardinal', + //can be a person, too + notA: ['Ordinal', 'TextValue'] + }, + TextValue: { + isA: 'Value', + notA: ['NumericValue'] + }, + NumericValue: { + isA: 'Value', + notA: ['TextValue'] + }, + Money: { + isA: 'Cardinal' + }, + Percent: { + isA: 'Value' + } + }; + + var anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']; + var misc = { + //--Adjectives-- + Adjective: { + notA: ['Noun', 'Verb', 'Adverb', 'Value'] + }, + // adjectives that can conjugate + Comparable: { + isA: ['Adjective'] + }, + // better + Comparative: { + isA: ['Adjective'] + }, + // best + Superlative: { + isA: ['Adjective'], + notA: ['Comparative'] + }, + NumberRange: { + isA: ['Contraction'] + }, + Adverb: { + notA: ['Noun', 'Verb', 'Adjective', 'Value'] + }, + // Dates: + //not a noun, but usually is + Date: { + notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'] + }, + Month: { + isA: ['Date', 'Singular'], + notA: ['Year', 'WeekDay', 'Time'] + }, + WeekDay: { + isA: ['Date', 'Noun'] + }, + // '9:20pm' + Time: { + isA: ['Date'], + notA: ['Value'] + }, + //glue + Determiner: { + notA: anything + }, + Conjunction: { + notA: anything + }, + Preposition: { + notA: anything + }, + // what, who, why + QuestionWord: { + notA: ['Determiner'] + }, + // peso, euro + Currency: {}, + // ughh + Expression: { + notA: ['Noun', 'Adjective', 'Verb', 'Adverb'] + }, + // dr. + Abbreviation: {}, + // internet tags + Url: { + notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'] + }, + PhoneNumber: { + notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'] + }, + HashTag: {}, + AtMention: { + isA: ['Noun'], + notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'] + }, + Emoji: { + notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] + }, + Emoticon: { + notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] + }, + Email: { + notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] + }, + //non-exclusive + Auxiliary: { + notA: ['Noun', 'Adjective', 'Value'] + }, + Acronym: { + notA: ['Plural', 'RomanNumeral'] + }, + Negative: { + notA: ['Noun', 'Adjective', 'Value'] + }, + // if, unless, were + Condition: { + notA: ['Verb', 'Adjective', 'Noun', 'Value'] + } + }; + + // i just made these up + var colorMap = { + Noun: 'blue', + Verb: 'green', + Negative: 'green', + Date: 'red', + Value: 'red', + Adjective: 'magenta', + Preposition: 'cyan', + Conjunction: 'cyan', + Determiner: 'cyan', + Adverb: 'cyan' + }; + /** add a debug color to some tags */ + + var addColors = function addColors(tags) { + Object.keys(tags).forEach(function (k) { + // assigned from plugin, for example + if (tags[k].color) { + tags[k].color = tags[k].color; + return; + } // defined above + + + if (colorMap[k]) { + tags[k].color = colorMap[k]; + return; + } + + tags[k].isA.some(function (t) { + if (colorMap[t]) { + tags[k].color = colorMap[t]; + return true; + } + + return false; + }); + }); + return tags; + }; + + var _color = addColors; + + var unique$2 = function unique(arr) { + return arr.filter(function (v, i, a) { + return a.indexOf(v) === i; + }); + }; //add 'downward' tags (that immediately depend on this one) + + + var inferIsA = function inferIsA(tags) { + Object.keys(tags).forEach(function (k) { + var tag = tags[k]; + var len = tag.isA.length; + + for (var i = 0; i < len; i++) { + var down = tag.isA[i]; + + if (tags[down]) { + tag.isA = tag.isA.concat(tags[down].isA); + } + } // clean it up + + + tag.isA = unique$2(tag.isA); + }); + return tags; + }; + + var _isA = inferIsA; + + var unique$3 = function unique(arr) { + return arr.filter(function (v, i, a) { + return a.indexOf(v) === i; + }); + }; // crawl the tag-graph and infer any conflicts + // faster than doing this at tag-time + + + var inferNotA = function inferNotA(tags) { + var keys = Object.keys(tags); + keys.forEach(function (k) { + var tag = tags[k]; + tag.notA = tag.notA || []; + tag.isA.forEach(function (down) { + if (tags[down] && tags[down].notA) { + // borrow its conflicts + var notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []; + tag.notA = tag.notA.concat(notA); + } + }); // any tag that lists us as a conflict, we conflict it back. + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (tags[key].notA.indexOf(k) !== -1) { + tag.notA.push(key); + } + } // clean it up + + + tag.notA = unique$3(tag.notA); + }); + return tags; + }; + + var _notA = inferNotA; + + // a lineage is all 'incoming' tags that have this as 'isA' + var inferLineage = function inferLineage(tags) { + var keys = Object.keys(tags); + keys.forEach(function (k) { + var tag = tags[k]; + tag.lineage = []; // find all tags with it in their 'isA' set + + for (var i = 0; i < keys.length; i++) { + if (tags[keys[i]].isA.indexOf(k) !== -1) { + tag.lineage.push(keys[i]); + } + } + }); + return tags; + }; + + var _lineage = inferLineage; + + var validate = function validate(tags) { + // cleanup format + Object.keys(tags).forEach(function (k) { + var tag = tags[k]; // ensure isA is an array + + tag.isA = tag.isA || []; + + if (typeof tag.isA === 'string') { + tag.isA = [tag.isA]; + } // ensure notA is an array + + + tag.notA = tag.notA || []; + + if (typeof tag.notA === 'string') { + tag.notA = [tag.notA]; + } + }); + return tags; + }; // build-out the tag-graph structure + + + var inferTags = function inferTags(tags) { + // validate data + tags = validate(tags); // build its 'down tags' + + tags = _isA(tags); // infer the conflicts + + tags = _notA(tags); // debug tag color + + tags = _color(tags); // find incoming links + + tags = _lineage(tags); + return tags; + }; + + var inference = inferTags; + + var addIn = function addIn(obj, tags) { + Object.keys(obj).forEach(function (k) { + tags[k] = obj[k]; + }); + }; + + var build = function build() { + var tags = {}; + addIn(nouns, tags); + addIn(verbs, tags); + addIn(values, tags); + addIn(misc, tags); // do the graph-stuff + + tags = inference(tags); + return tags; + }; + + var tags = build(); + + var _function = function _function(n) { + return n; + }; + + //safely add it to the lexicon + var addWord = function addWord(word, tag, lex) { + if (lex[word] !== undefined) { + if (typeof lex[word] === 'string') { + lex[word] = [lex[word]]; + } + + if (typeof tag === 'string') { + lex[word].push(tag); + } else { + lex[word] = lex[word].concat(tag); + } + } else { + lex[word] = tag; + } + }; // blast-out more forms for some given words + + + var addMore = function addMore(word, tag, world) { + var lexicon = world.words; + var transform = world.transforms; // cache multi-words + + var words = word.split(' '); + + if (words.length > 1) { + //cache the beginning word + world.hasCompound[words[0]] = true; + } // inflect our nouns + + + if (tag === 'Singular') { + var plural = transform.toPlural(word, world); + lexicon[plural] = lexicon[plural] || 'Plural'; // only if it's safe + } //conjugate our verbs + + + if (tag === 'Infinitive') { + var conj = transform.conjugate(word, world); + var tags = Object.keys(conj); + + for (var i = 0; i < tags.length; i++) { + var w = conj[tags[i]]; + lexicon[w] = lexicon[w] || tags[i]; // only if it's safe + } + } //derive more adjective forms + + + if (tag === 'Comparable') { + var _conj = transform.adjectives(word); + + var _tags = Object.keys(_conj); + + for (var _i = 0; _i < _tags.length; _i++) { + var _w = _conj[_tags[_i]]; + lexicon[_w] = lexicon[_w] || _tags[_i]; // only if it's safe + } + } //conjugate phrasal-verbs + + + if (tag === 'PhrasalVerb') { + //add original form + addWord(word, 'Infinitive', lexicon); //conjugate first word + + var _conj2 = transform.conjugate(words[0], world); + + var _tags2 = Object.keys(_conj2); + + for (var _i2 = 0; _i2 < _tags2.length; _i2++) { + //add it to our cache + world.hasCompound[_conj2[_tags2[_i2]]] = true; //first + last words + + var _w2 = _conj2[_tags2[_i2]] + ' ' + words[1]; + + addWord(_w2, _tags2[_i2], lexicon); + addWord(_w2, 'PhrasalVerb', lexicon); + } + } // inflect our demonyms - 'germans' + + + if (tag === 'Demonym') { + var _plural = transform.toPlural(word, world); + + lexicon[_plural] = lexicon[_plural] || ['Demonym', 'Plural']; // only if it's safe + } + }; // throw a bunch of words in our lexicon + // const doWord = function(words, tag, world) { + // let lexicon = world.words + // for (let i = 0; i < words.length; i++) { + // addWord(words[i], tag, lexicon) + // // do some fancier stuff + // addMore(words[i], tag, world) + // } + // } + + + var addWords = { + addWord: addWord, + addMore: addMore + }; + + // add words from plurals and conjugations data + var addIrregulars = function addIrregulars(world) { + //add irregular plural nouns + var nouns = world.irregulars.nouns; + var words = Object.keys(nouns); + + for (var i = 0; i < words.length; i++) { + var w = words[i]; + world.words[w] = 'Singular'; + world.words[nouns[w]] = 'Plural'; + } // add irregular verb conjugations + + + var verbs = world.irregulars.verbs; + var keys = Object.keys(verbs); + + var _loop = function _loop(_i) { + var inf = keys[_i]; //add only if it it's safe... + + world.words[inf] = world.words[inf] || 'Infinitive'; + var forms = world.transforms.conjugate(inf, world); + forms = Object.assign(forms, verbs[inf]); //add the others + + Object.keys(forms).forEach(function (tag) { + world.words[forms[tag]] = world.words[forms[tag]] || tag; + }); + }; + + for (var _i = 0; _i < keys.length; _i++) { + _loop(_i); + } + }; + + var addIrregulars_1 = addIrregulars; + + var irregulars = { + nouns: _object, + verbs: _object + }; //these behaviours are configurable & shared across some plugins + + var transforms = { + conjugate: _function, + adjectives: _function, + toPlural: _function, + toSingular: _function, + toInfinitive: _function + }; + var _isVerbose = false; + /** all configurable linguistic data */ + + var World = + /*#__PURE__*/ + function () { + function World() { + _classCallCheck(this, World); + + // quiet these properties from a console.log + Object.defineProperty(this, 'words', { + enumerable: false, + value: _object, + writable: true + }); + Object.defineProperty(this, 'hasCompound', { + enumerable: false, + value: {}, + writable: true + }); + Object.defineProperty(this, 'irregulars', { + enumerable: false, + value: irregulars, + writable: true + }); + Object.defineProperty(this, 'tags', { + enumerable: false, + value: Object.assign({}, tags), + writable: true + }); + Object.defineProperty(this, 'transforms', { + enumerable: false, + value: transforms, + writable: true + }); + Object.defineProperty(this, 'taggers', { + enumerable: false, + value: [], + writable: true + }); // add our compressed data to lexicon + + this.unpackWords(_object); // add our irregulars to lexicon + + this.addIrregulars(); // cache our abbreviations for our sentence-parser + + Object.defineProperty(this, 'cache', { + enumerable: false, + value: { + abbreviations: this.getByTag('Abbreviation') + } + }); + } + /** more logs for debugging */ + + + _createClass(World, [{ + key: "verbose", + value: function verbose(bool) { + _isVerbose = bool; + return this; + } + }, { + key: "isVerbose", + value: function isVerbose() { + return _isVerbose; + } + /** get all terms in our lexicon with this tag */ + + }, { + key: "getByTag", + value: function getByTag(tag) { + var lex = this.words; + var res = {}; + var words = Object.keys(lex); + + for (var i = 0; i < words.length; i++) { + if (typeof lex[words[i]] === 'string') { + if (lex[words[i]] === tag) { + res[words[i]] = true; + } + } else if (lex[words[i]].some(function (t) { + return t === tag; + })) { + res[words[i]] = true; + } + } + + return res; + } + /** augment our lingustic data with new data */ + + }, { + key: "unpackWords", + value: function unpackWords(lex) { + var tags = Object.keys(lex); + + for (var i = 0; i < tags.length; i++) { + var words = Object.keys(_function(lex[tags[i]])); + + for (var w = 0; w < words.length; w++) { + addWords.addWord(words[w], tags[i], this.words); // do some fancier stuff + + addWords.addMore(words[w], tags[i], this); + } + } + } + /** put new words into our lexicon, properly */ + + }, { + key: "addWords", + value: function addWords$1(obj) { + var keys = Object.keys(obj); + + for (var i = 0; i < keys.length; i++) { + var word = keys[i].toLowerCase(); + addWords.addWord(word, obj[keys[i]], this.words); // do some fancier stuff + + addWords.addMore(word, obj[keys[i]], this); + } + } + }, { + key: "addIrregulars", + value: function addIrregulars() { + addIrregulars_1(this); + + return this; + } + /** extend the compromise tagset */ + + }, { + key: "addTags", + value: function addTags(tags) { + tags = Object.assign({}, tags); + this.tags = Object.assign(this.tags, tags); // calculate graph implications for the new tags + + this.tags = inference(this.tags); + return this; + } + /** call methods after tagger runs */ + + }, { + key: "postProcess", + value: function postProcess(fn) { + this.taggers.push(fn); + return this; + } + /** helper method for logging + debugging */ + + }, { + key: "stats", + value: function stats() { + return { + words: Object.keys(this.words).length, + plurals: Object.keys(this.irregulars.nouns).length, + conjugations: Object.keys(this.irregulars.verbs).length, + compounds: Object.keys(this.hasCompound).length, + postProcessors: this.taggers.length + }; + } + }]); + + return World; + }(); // ¯\_(:/)_/¯ + + + var clone$1 = function clone(obj) { + return JSON.parse(JSON.stringify(obj)); + }; + /** produce a deep-copy of all lingustic data */ + + + World.prototype.clone = function () { + var w2 = new World(); // these are simple to copy: + + w2.words = Object.assign({}, this.words); + w2.hasCompound = Object.assign({}, this.hasCompound); //these ones are nested: + + w2.irregulars = clone$1(this.irregulars); + w2.tags = clone$1(this.tags); // these are functions + + w2.transforms = this.transforms; + w2.taggers = this.taggers; + return w2; + }; + + var World_1 = World; + + var _01Utils$1 = createCommonjsModule(function (module, exports) { + /** return the root, first document */ + exports.all = function () { + return this.parents()[0] || this; + }; + /** return the previous result */ + + + exports.parent = function () { + if (this.from) { + return this.from; + } + + return this; + }; + /** return a list of all previous results */ + + + exports.parents = function (n) { + var arr = []; + + var addParent = function addParent(doc) { + if (doc.from) { + arr.push(doc.from); + addParent(doc.from); + } + }; + + addParent(this); + arr = arr.reverse(); + + if (typeof n === 'number') { + return arr[n]; + } + + return arr; + }; + /** deep-copy the document, so that no references remain */ + + + exports.clone = function (doShallow) { + var list = this.list.map(function (ts) { + return ts.clone(doShallow); + }); + var tmp = this.buildFrom(list); + return tmp; + }; + /** how many seperate terms does the document have? */ + + + exports.wordCount = function () { + return this.list.reduce(function (count, p) { + count += p.wordCount(); + return count; + }, 0); + }; + + exports.wordcount = exports.wordCount; + /** turn on logging for decision-debugging */ + // exports.verbose = function(bool) { + // if (bool === undefined) { + // bool = true + // } + // this.world.verbose = bool + // } + }); + var _01Utils_1 = _01Utils$1.all; + var _01Utils_2 = _01Utils$1.parent; + var _01Utils_3 = _01Utils$1.parents; + var _01Utils_4 = _01Utils$1.clone; + var _01Utils_5 = _01Utils$1.wordCount; + var _01Utils_6 = _01Utils$1.wordcount; + + var _02Accessors = createCommonjsModule(function (module, exports) { + /** use only the first result(s) */ + exports.first = function (n) { + if (n === undefined) { + return this.get(0); + } + + return this.slice(0, n); + }; + /** use only the last result(s) */ + + + exports.last = function (n) { + if (n === undefined) { + return this.get(this.list.length - 1); + } + + var end = this.list.length; + return this.slice(end - n, end); + }; + /** grab a given subset of the results*/ + + + exports.slice = function (start, end) { + var list = this.list.slice(start, end); + return this.buildFrom(list); + }; + /* grab nth result */ + + + exports.eq = function (n) { + var p = this.list[n]; + + if (p === undefined) { + return this.buildFrom([]); + } + + return this.buildFrom([p]); + }; + + exports.get = exports.eq; + /** grab term[0] for every match */ + + exports.firstTerms = function () { + return this.match('^.'); + }; + + exports.firstTerm = exports.firstTerms; + /** grab the last term for every match */ + + exports.lastTerms = function () { + return this.match('.$'); + }; + + exports.lastTerm = exports.lastTerms; + /** return a flat array of term objects */ + + exports.termList = function (num) { + var arr = []; //'reduce' but faster + + for (var i = 0; i < this.list.length; i++) { + var terms = this.list[i].terms(); + + for (var o = 0; o < terms.length; o++) { + arr.push(terms[o]); //support .termList(4) + + if (num !== undefined && arr[num] !== undefined) { + return arr[num]; + } + } + } + + return arr; + }; + /* grab named capture group terms as object */ + + + var getGroups = function getGroups(doc) { + var res = {}; + var allGroups = {}; + + var _loop = function _loop(i) { + var phrase = doc.list[i]; + var groups = Object.keys(phrase.groups).map(function (k) { + return phrase.groups[k]; + }); + + for (var j = 0; j < groups.length; j++) { + var _groups$j = groups[j], + group = _groups$j.group, + start = _groups$j.start, + length = _groups$j.length; + + if (!allGroups[group]) { + allGroups[group] = []; + } + + allGroups[group].push(phrase.buildFrom(start, length)); + } + }; + + for (var i = 0; i < doc.list.length; i++) { + _loop(i); + } + + var keys = Object.keys(allGroups); + + for (var _i = 0; _i < keys.length; _i++) { + var key = keys[_i]; + res[key] = doc.buildFrom(allGroups[key]); + } + + return res; + }; + + var getOneName = function getOneName(doc, name) { + var arr = []; + + var _loop2 = function _loop2(i) { + var phrase = doc.list[i]; + var keys = Object.keys(phrase.groups); + keys = keys.filter(function (id) { + return phrase.groups[id].group === name; + }); + keys.forEach(function (id) { + arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length)); + }); + }; + + for (var i = 0; i < doc.list.length; i++) { + _loop2(i); + } + + return doc.buildFrom(arr); + }; + /** grab named capture group results */ + + + exports.groups = function (target) { + if (target === undefined) { + return getGroups(this); + } + + if (typeof target === 'number') { + target = String(target); + } + + return getOneName(this, target) || this.buildFrom([]); + }; + + exports.group = exports.groups; + /** get the full-sentence each phrase belongs to */ + + exports.sentences = function (n) { + var arr = []; + this.list.forEach(function (p) { + arr.push(p.fullSentence()); + }); + + if (typeof n === 'number') { + return this.buildFrom([arr[n]]); + } + + return this.buildFrom(arr); + }; + + exports.sentence = exports.sentences; + }); + var _02Accessors_1 = _02Accessors.first; + var _02Accessors_2 = _02Accessors.last; + var _02Accessors_3 = _02Accessors.slice; + var _02Accessors_4 = _02Accessors.eq; + var _02Accessors_5 = _02Accessors.get; + var _02Accessors_6 = _02Accessors.firstTerms; + var _02Accessors_7 = _02Accessors.firstTerm; + var _02Accessors_8 = _02Accessors.lastTerms; + var _02Accessors_9 = _02Accessors.lastTerm; + var _02Accessors_10 = _02Accessors.termList; + var _02Accessors_11 = _02Accessors.groups; + var _02Accessors_12 = _02Accessors.group; + var _02Accessors_13 = _02Accessors.sentences; + var _02Accessors_14 = _02Accessors.sentence; + + // cache the easier conditions up-front + var cacheRequired = function cacheRequired(reg) { + var needTags = []; + var needWords = []; + reg.forEach(function (obj) { + if (obj.optional === true || obj.negative === true) { + return; + } + + if (obj.tag !== undefined) { + needTags.push(obj.tag); + } + + if (obj.word !== undefined) { + needWords.push(obj.word); + } + }); + return { + tags: needTags, + words: needWords + }; + }; + + var failFast$1 = function failFast(doc, regs) { + if (doc._cache && doc._cache.set === true) { + var _cacheRequired = cacheRequired(regs), + words = _cacheRequired.words, + tags = _cacheRequired.tags; //check required words + + + for (var i = 0; i < words.length; i++) { + if (doc._cache.words[words[i]] === undefined) { + return false; + } + } //check required tags + + + for (var _i = 0; _i < tags.length; _i++) { + if (doc._cache.tags[tags[_i]] === undefined) { + return false; + } + } + } + + return true; + }; + + var checkCache = failFast$1; + + var _03Match = createCommonjsModule(function (module, exports) { + /** return a new Doc, with this one as a parent */ + exports.match = function (reg, name) { + //parse-up the input expression + var regs = syntax_1(reg); + + if (regs.length === 0) { + return this.buildFrom([]); + } //check our cache, if it exists + + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } //try expression on each phrase + + + var matches = this.list.reduce(function (arr, p) { + return arr.concat(p.match(regs)); + }, []); + + if (name !== undefined && name !== null && name !== '') { + return this.buildFrom(matches).groups(name); + } + + return this.buildFrom(matches); + }; + /** return all results except for this */ + + + exports.not = function (reg) { + //parse-up the input expression + var regs = syntax_1(reg); //if it's empty, return them all! + + if (regs.length === 0 || checkCache(this, regs) === false) { + return this; + } //try expression on each phrase + + + var matches = this.list.reduce(function (arr, p) { + return arr.concat(p.not(regs)); + }, []); + return this.buildFrom(matches); + }; + /** return only the first match */ + + + exports.matchOne = function (reg) { + var regs = syntax_1(reg); //check our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } + + for (var i = 0; i < this.list.length; i++) { + var match = this.list[i].match(regs, true); + return this.buildFrom(match); + } + + return this.buildFrom([]); + }; + /** return each current phrase, only if it contains this match */ + + + exports["if"] = function (reg) { + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return this.buildFrom([]); + } + + var found = this.list.filter(function (p) { + return p.has(regs) === true; + }); + return this.buildFrom(found); + }; + /** Filter-out any current phrases that have this match*/ + + + exports.ifNo = function (reg) { + var regs = syntax_1(reg); + var found = this.list.filter(function (p) { + return p.has(regs) === false; + }); + return this.buildFrom(found); + }; + /**Return a boolean if this match exists */ + + + exports.has = function (reg) { + var regs = syntax_1(reg); //consult our cache, if it exists + + if (checkCache(this, regs) === false) { + return false; + } + + return this.list.some(function (p) { + return p.has(regs) === true; + }); + }; + /** match any terms after our matches, within the sentence */ + + + exports.lookAhead = function (reg) { + // find everything afterwards, by default + if (!reg) { + reg = '.*'; + } + + var regs = syntax_1(reg); + var matches = []; + this.list.forEach(function (p) { + matches = matches.concat(p.lookAhead(regs)); + }); + matches = matches.filter(function (p) { + return p; + }); + return this.buildFrom(matches); + }; + + exports.lookAfter = exports.lookAhead; + /** match any terms before our matches, within the sentence */ + + exports.lookBehind = function (reg) { + // find everything afterwards, by default + if (!reg) { + reg = '.*'; + } + + var regs = syntax_1(reg); + var matches = []; + this.list.forEach(function (p) { + matches = matches.concat(p.lookBehind(regs)); + }); + matches = matches.filter(function (p) { + return p; + }); + return this.buildFrom(matches); + }; + + exports.lookBefore = exports.lookBehind; + /** return all terms before a match, in each phrase */ + + exports.before = function (reg) { + var regs = syntax_1(reg); //only the phrases we care about + + var phrases = this["if"](regs).list; + var befores = phrases.map(function (p) { + var ids = p.terms().map(function (t) { + return t.id; + }); //run the search again + + var m = p.match(regs)[0]; + var index = ids.indexOf(m.start); //nothing is before a first-term match + + if (index === 0 || index === -1) { + return null; + } + + return p.buildFrom(p.start, index); + }); + befores = befores.filter(function (p) { + return p !== null; + }); + return this.buildFrom(befores); + }; + /** return all terms after a match, in each phrase */ + + + exports.after = function (reg) { + var regs = syntax_1(reg); //only the phrases we care about + + var phrases = this["if"](regs).list; + var befores = phrases.map(function (p) { + var terms = p.terms(); + var ids = terms.map(function (t) { + return t.id; + }); //run the search again + + var m = p.match(regs)[0]; + var index = ids.indexOf(m.start); //skip if nothing is after it + + if (index === -1 || !terms[index + m.length]) { + return null; + } //create the new phrase, after our match. + + + var id = terms[index + m.length].id; + var len = p.length - index - m.length; + return p.buildFrom(id, len); + }); + befores = befores.filter(function (p) { + return p !== null; + }); + return this.buildFrom(befores); + }; + /** return only results with this match afterwards */ + + + exports.hasAfter = function (reg) { + return this.filter(function (doc) { + return doc.lookAfter(reg).found; + }); + }; + /** return only results with this match before it */ + + + exports.hasBefore = function (reg) { + return this.filter(function (doc) { + return doc.lookBefore(reg).found; + }); + }; + }); + var _03Match_1 = _03Match.match; + var _03Match_2 = _03Match.not; + var _03Match_3 = _03Match.matchOne; + var _03Match_4 = _03Match.ifNo; + var _03Match_5 = _03Match.has; + var _03Match_6 = _03Match.lookAhead; + var _03Match_7 = _03Match.lookAfter; + var _03Match_8 = _03Match.lookBehind; + var _03Match_9 = _03Match.lookBefore; + var _03Match_10 = _03Match.before; + var _03Match_11 = _03Match.after; + var _03Match_12 = _03Match.hasAfter; + var _03Match_13 = _03Match.hasBefore; + + /** apply a tag, or tags to all terms */ + var tagTerms = function tagTerms(tag, doc, safe, reason) { + var tagList = []; + + if (typeof tag === 'string') { + tagList = tag.split(' '); + } //do indepenent tags for each term: + + + doc.list.forEach(function (p) { + var terms = p.terms(); // tagSafe - apply only to fitting terms + + if (safe === true) { + terms = terms.filter(function (t) { + return t.canBe(tag, doc.world); + }); + } + + terms.forEach(function (t, i) { + //fancy version: + if (tagList.length > 1) { + if (tagList[i] && tagList[i] !== '.') { + t.tag(tagList[i], reason, doc.world); + } + } else { + //non-fancy version (same tag for all terms) + t.tag(tag, reason, doc.world); + } + }); + }); + return; + }; + + var _setTag = tagTerms; + + /** Give all terms the given tag */ + + var tag$1 = function tag(tags, why) { + if (!tags) { + return this; + } + + _setTag(tags, this, false, why); + return this; + }; + /** Only apply tag to terms if it is consistent with current tags */ + + + var tagSafe$1 = function tagSafe(tags, why) { + if (!tags) { + return this; + } + + _setTag(tags, this, true, why); + return this; + }; + /** Remove this term from the given terms */ + + + var unTag$1 = function unTag(tags, why) { + var _this = this; + + this.list.forEach(function (p) { + p.terms().forEach(function (t) { + return t.unTag(tags, why, _this.world); + }); + }); + return this; + }; + /** return only the terms that can be this tag*/ + + + var canBe$2 = function canBe(tag) { + if (!tag) { + return this; + } + + var world = this.world; + var matches = this.list.reduce(function (arr, p) { + return arr.concat(p.canBe(tag, world)); + }, []); + return this.buildFrom(matches); + }; + + var _04Tag = { + tag: tag$1, + tagSafe: tagSafe$1, + unTag: unTag$1, + canBe: canBe$2 + }; + + /* run each phrase through a function, and create a new document */ + var map = function map(fn) { + var _this = this; + + if (!fn) { + return this; + } + + var list = this.list.map(function (p, i) { + var doc = _this.buildFrom([p]); + + doc.from = null; //it's not a child/parent + + var res = fn(doc, i); // if its a doc, return one result + + if (res && res.list && res.list[0]) { + return res.list[0]; + } + + return res; + }); //remove nulls + + list = list.filter(function (x) { + return x; + }); // return an empty response + + if (list.length === 0) { + return this.buildFrom(list); + } // if it is not a list of Phrase objects, then don't try to make a Doc object + + + if (_typeof(list[0]) !== 'object' || list[0].isA !== 'Phrase') { + return list; + } + + return this.buildFrom(list); + }; + /** run a function on each phrase */ + + + var forEach = function forEach(fn, detachParent) { + var _this2 = this; + + if (!fn) { + return this; + } + + this.list.forEach(function (p, i) { + var sub = _this2.buildFrom([p]); // if we're doing fancy insertions, we may want to skip updating the parent each time. + + + if (detachParent === true) { + sub.from = null; // + } + + fn(sub, i); + }); + return this; + }; + /** return only the phrases that return true */ + + + var filter = function filter(fn) { + var _this3 = this; + + if (!fn) { + return this; + } + + var list = this.list.filter(function (p, i) { + var doc = _this3.buildFrom([p]); + + doc.from = null; //it's not a child/parent + + return fn(doc, i); + }); + return this.buildFrom(list); + }; + /** return a document with only the first phrase that matches */ + + + var find = function find(fn) { + var _this4 = this; + + if (!fn) { + return this; + } + + var phrase = this.list.find(function (p, i) { + var doc = _this4.buildFrom([p]); + + doc.from = null; //it's not a child/parent + + return fn(doc, i); + }); + + if (phrase) { + return this.buildFrom([phrase]); + } + + return undefined; + }; + /** return true or false if there is one matching phrase */ + + + var some = function some(fn) { + var _this5 = this; + + if (!fn) { + return this; + } + + return this.list.some(function (p, i) { + var doc = _this5.buildFrom([p]); + + doc.from = null; //it's not a child/parent + + return fn(doc, i); + }); + }; + /** sample a subset of the results */ + + + var random = function random(n) { + if (!this.found) { + return this; + } + + var r = Math.floor(Math.random() * this.list.length); + + if (n === undefined) { + var list = [this.list[r]]; + return this.buildFrom(list); + } //prevent it from going over the end + + + if (r + n > this.length) { + r = this.length - n; + r = r < 0 ? 0 : r; + } + + return this.slice(r, r + n); + }; + /** combine each phrase into a new data-structure */ + // exports.reduce = function(fn, h) { + // let list = this.list.reduce((_h, ts) => { + // let doc = this.buildFrom([ts]) + // doc.from = null //it's not a child/parent + // return fn(_h, doc) + // }, h) + // return this.buildFrom(list) + // } + + + var _05Loops = { + map: map, + forEach: forEach, + filter: filter, + find: find, + some: some, + random: random + }; + + // const tokenize = require('../../01-tokenizer/02-words') + var tokenize = function tokenize(str) { + return str.split(/[ -]/g); + }; // take a list of strings + // look them up in the document + + + var buildTree = function buildTree(termList) { + var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var root = {}; // parse our input + + termList.forEach(function (str, i) { + var val = true; + + if (values[i] !== undefined) { + val = values[i]; + } // some rough normalization + + + str = (str || '').toLowerCase(); + str = str.replace(/[,;.!?]+$/, ''); + var arr = tokenize(str).map(function (s) { + return s.trim(); + }); + root[arr[0]] = root[arr[0]] || {}; + + if (arr.length === 1) { + root[arr[0]].value = val; + } else { + root[arr[0]].more = root[arr[0]].more || []; + root[arr[0]].more.push({ + rest: arr.slice(1), + value: val + }); + } + }); // sort by longest-first? + // console.log(JSON.stringify(root, null, 2)) + + return root; + }; + + var fastLookup = function fastLookup(termList, values, doc) { + var root = buildTree(termList, values); + var found = []; // each phrase + + var _loop = function _loop(i) { + var p = doc.list[i]; + var terms = p.terms(); + var words = terms.map(function (t) { + return t.reduced; + }); // each word + + var _loop2 = function _loop2(w) { + if (root[words[w]] !== undefined) { + // is it a multi-word match? + if (root[words[w]].more !== undefined) { + root[words[w]].more.forEach(function (more) { + // is it too-long? + if (words[w + more.rest.length] === undefined) { + return; + } // compare each subsequent term + + + var everyTerm = more.rest.every(function (word, r) { + return word === words[w + r + 1]; + }); + + if (everyTerm === true) { + found.push({ + id: p.terms()[w].id, + value: more.value, + length: more.rest.length + 1 + }); + } + }); + } // is it a single-word match? + + + if (root[words[w]].value !== undefined) { + found.push({ + id: p.terms()[w].id, + value: root[words[w]].value, + length: 1 + }); + } + } + }; + + for (var w = 0; w < words.length; w++) { + _loop2(w); + } + }; + + for (var i = 0; i < doc.list.length; i++) { + _loop(i); + } + + return found; + }; + + var _lookup = fastLookup; + + var _06Lookup = createCommonjsModule(function (module, exports) { + // compare one term and one match + // const doesMatch = function(term, str) { + // if (str === '') { + // return false + // } + // return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str + // } + var isObject = function isObject(obj) { + return obj && Object.prototype.toString.call(obj) === '[object Object]'; + }; + /** lookup an array of words or phrases */ + + + exports.lookup = function (arr) { + var _this = this; + + var values = []; //is it a {key:val} object? + + var isObj = isObject(arr); + + if (isObj === true) { + arr = Object.keys(arr).map(function (k) { + values.push(arr[k]); + return k; + }); + } // support .lookup('foo') + + + if (typeof arr === 'string') { + arr = [arr]; + } //make sure we go fast. + + + if (this._cache.set !== true) { + this.cache(); + } + + var found = _lookup(arr, values, this); + var p = this.list[0]; // make object response + + if (isObj === true) { + var byVal = {}; + found.forEach(function (o) { + byVal[o.value] = byVal[o.value] || []; + byVal[o.value].push(p.buildFrom(o.id, o.length)); + }); + Object.keys(byVal).forEach(function (k) { + byVal[k] = _this.buildFrom(byVal[k]); + }); + return byVal; + } // otherwise, make array response: + + + found = found.map(function (o) { + return p.buildFrom(o.id, o.length); + }); + return this.buildFrom(found); + }; + + exports.lookUp = exports.lookup; + }); + var _06Lookup_1 = _06Lookup.lookup; + var _06Lookup_2 = _06Lookup.lookUp; + + /** freeze the current state of the document, for speed-purposes*/ + var cache = function cache(options) { + var _this = this; + + options = options || {}; + var words = {}; + var tags = {}; + this._cache.words = words; + this._cache.tags = tags; + this._cache.set = true; + this.list.forEach(function (p, i) { + p.cache = p.cache || {}; //p.terms get cached automatically + + var terms = p.terms(); // cache all the terms + + terms.forEach(function (t) { + if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) { + return; //skip prototype words + } + + words[t.reduced] = words[t.reduced] || []; + words[t.reduced].push(i); + Object.keys(t.tags).forEach(function (tag) { + tags[tag] = tags[tag] || []; + tags[tag].push(i); + }); // cache root-form on Term, too + + if (options.root) { + t.setRoot(_this.world); + words[t.root] = true; + } + }); + }); + return this; + }; + /** un-freezes the current state of the document, so it may be transformed */ + + + var uncache = function uncache() { + this._cache = {}; + this.list.forEach(function (p) { + p.cache = {}; + }); // do parents too? + + this.parents().forEach(function (doc) { + doc._cache = {}; + doc.list.forEach(function (p) { + p.cache = {}; + }); + }); + return this; + }; + + var _07Cache = { + cache: cache, + uncache: uncache + }; + + var titleCase$3 = function titleCase(str) { + return str.charAt(0).toUpperCase() + str.substr(1); + }; + /** substitute-in new content */ + + + var replaceWith = function replaceWith(replace) { + var _this = this; + + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (!replace) { + return this["delete"](); + } //support old-style params + + + if (options === true) { + options = { + keepTags: true + }; + } + + if (options === false) { + options = { + keepTags: false + }; + } + + options = options || {}; // clear the cache + + this.uncache(); // return this + + this.list.forEach(function (p) { + var input = replace; // accept a function for replace + + if (typeof replace === 'function') { + input = replace(p); + } + + var newPhrases; // accept a Doc object to replace + + if (input && _typeof(input) === 'object' && input.isA === 'Doc') { + newPhrases = input.list; + + _this.pool().merge(input.pool()); + } else if (typeof input === 'string') { + //input is a string + if (options.keepCase !== false && p.terms(0).isTitleCase()) { + input = titleCase$3(input); + } + + newPhrases = _01Tokenizer(input, _this.world, _this.pool()); //tag the new phrases + + var tmpDoc = _this.buildFrom(newPhrases); + + tmpDoc.tagger(); + } else { + return; //don't even bother + } // try to keep its old tags, if appropriate + + + if (options.keepTags === true) { + var oldTags = p.json({ + terms: { + tags: true + } + }).terms; + newPhrases[0].terms().forEach(function (t, i) { + if (oldTags[i]) { + t.tagSafe(oldTags[i].tags, 'keptTag', _this.world); + } + }); + } + + p.replace(newPhrases[0], _this); //Oneday: support multi-sentence replacements + }); + return this; + }; + /** search and replace match with new content */ + + + var replace$1 = function replace(match, _replace, options) { + // if there's no 2nd param, use replaceWith + if (_replace === undefined) { + return this.replaceWith(match, options); + } + + this.match(match).replaceWith(_replace, options); + return this; + }; + + var _01Replace = { + replaceWith: replaceWith, + replace: replace$1 + }; + + var _02Insert = createCommonjsModule(function (module, exports) { + /** add these new terms to the end*/ + exports.append = function (str) { + var _this = this; + + if (!str) { + return this; + } // clear the cache + + + this.uncache(); //add it to end of every phrase + + this.list.forEach(function (p) { + //build it + var phrase = _01Tokenizer(str, _this.world, _this.pool())[0]; //assume it's one sentence, for now + //tag it + + var tmpDoc = _this.buildFrom([phrase]); + + tmpDoc.tagger(); // push it onto the end + + p.append(phrase, _this); + }); + return this; + }; + + exports.insertAfter = exports.append; + exports.insertAt = exports.append; + /** add these new terms to the front*/ + + exports.prepend = function (str) { + var _this2 = this; + + if (!str) { + return this; + } // clear the cache + + + this.uncache(); //add it to start of every phrase + + this.list.forEach(function (p) { + //build it + var phrase = _01Tokenizer(str, _this2.world, _this2.pool())[0]; //assume it's one sentence, for now + //tag it + + var tmpDoc = _this2.buildFrom([phrase]); + + tmpDoc.tagger(); // add it to the start + + p.prepend(phrase, _this2); + }); + return this; + }; + + exports.insertBefore = exports.prepend; + /** add these new things to the end*/ + + exports.concat = function () { + // clear the cache + this.uncache(); + var list = this.list.slice(0); //repeat for any number of params + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; //support a fresh string + + if (typeof arg === 'string') { + var arr = _01Tokenizer(arg, this.world); //TODO: phrase.tagger()? + + list = list.concat(arr); + } else if (arg.isA === 'Doc') { + list = list.concat(arg.list); + } else if (arg.isA === 'Phrase') { + list.push(arg); + } + } + + return this.buildFrom(list); + }; + /** fully remove these terms from the document */ + + + exports["delete"] = function (match) { + var _this3 = this; + + // clear the cache + this.uncache(); + var toRemove = this; + + if (match) { + toRemove = this.match(match); + } + + toRemove.list.forEach(function (phrase) { + return phrase["delete"](_this3); + }); + return this; + }; // aliases + + + exports.remove = exports["delete"]; + }); + var _02Insert_1 = _02Insert.append; + var _02Insert_2 = _02Insert.insertAfter; + var _02Insert_3 = _02Insert.insertAt; + var _02Insert_4 = _02Insert.prepend; + var _02Insert_5 = _02Insert.insertBefore; + var _02Insert_6 = _02Insert.concat; + var _02Insert_7 = _02Insert.remove; + + var shouldTrim = { + clean: true, + reduced: true, + root: true + }; + /** return the document as text */ + + var text$1 = function text(options) { + var _this = this; + + options = options || {}; //are we showing every phrase? + + var showFull = false; + + if (this.parents().length === 0) { + showFull = true; + } // cache roots, if necessary + + + if (options === 'root' || _typeof(options) === 'object' && options.root) { + this.list.forEach(function (p) { + p.terms().forEach(function (t) { + if (t.root === null) { + t.setRoot(_this.world); + } + }); + }); + } + + var txt = this.list.reduce(function (str, p, i) { + var trimPre = !showFull && i === 0; + var trimPost = !showFull && i === _this.list.length - 1; + return str + p.text(options, trimPre, trimPost); + }, ''); // clumsy final trim of leading/trailing whitespace + + if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) { + txt = txt.trim(); + } + + return txt; + }; + + var _01Text = { + text: text$1 + }; + + // get all character startings in doc + var termOffsets = function termOffsets(doc) { + var elapsed = 0; + var index = 0; + var offsets = {}; + doc.termList().forEach(function (term) { + offsets[term.id] = { + index: index, + start: elapsed + term.pre.length, + length: term.text.length + }; + elapsed += term.pre.length + term.text.length + term.post.length; + index += 1; + }); + return offsets; + }; + + var calcOffset = function calcOffset(doc, result, options) { + // calculate offsets for each term + var offsets = termOffsets(doc.all()); // add index values + + if (options.terms.index || options.index) { + result.forEach(function (o) { + o.terms.forEach(function (t) { + t.index = offsets[t.id].index; + }); + o.index = o.terms[0].index; + }); + } // add offset values + + + if (options.terms.offset || options.offset) { + result.forEach(function (o) { + o.terms.forEach(function (t) { + t.offset = offsets[t.id] || {}; + }); // let len = o.terms.reduce((n, t, i) => { + // n += t.offset.length || 0 + // //add whitespace, too + // console.log(t.post) + // return n + // }, 0) + + o.offset = o.terms[0].offset; + o.offset.length = o.text.length; + }); + } + }; + + var _offset = calcOffset; + + var _02Json = createCommonjsModule(function (module, exports) { + var jsonDefaults = { + text: true, + terms: true, + trim: true + }; //some options have dependents + + var setOptions = function setOptions(options) { + options = Object.assign({}, jsonDefaults, options); + + if (options.unique) { + options.reduced = true; + } //offset calculation requires these options to be on + + + if (options.offset) { + options.text = true; + + if (!options.terms || options.terms === true) { + options.terms = {}; + } + + options.terms.offset = true; + } + + if (options.index || options.terms.index) { + options.terms = options.terms === true ? {} : options.terms; + options.terms.id = true; + } + + return options; + }; + /** pull out desired metadata from the document */ + + + exports.json = function () { + var _this = this; + + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + //support json(3) format + if (typeof options === 'number' && this.list[options]) { + return this.list[options].json(jsonDefaults); + } + + options = setOptions(options); // cache root strings beforehand, if necessary + + if (options.root === true) { + this.list.forEach(function (p) { + p.terms().forEach(function (t) { + if (t.root === null) { + t.setRoot(_this.world); + } + }); + }); + } + + var result = this.list.map(function (p) { + return p.json(options, _this.world); + }); // add offset and index data for each term + + if (options.terms.offset || options.offset || options.terms.index || options.index) { + _offset(this, result, options); + } // add frequency #s + + + if (options.frequency || options.freq || options.count) { + var obj = {}; + this.list.forEach(function (p) { + var str = p.text('reduced'); + obj[str] = obj[str] || 0; + obj[str] += 1; + }); + this.list.forEach(function (p, i) { + result[i].count = obj[p.text('reduced')]; + }); + } // remove duplicates + + + if (options.unique) { + var already = {}; + result = result.filter(function (o) { + if (already[o.reduced] === true) { + return false; + } + + already[o.reduced] = true; + return true; + }); + } + + return result; + }; //aliases + + + exports.data = exports.json; + }); + var _02Json_1 = _02Json.json; + var _02Json_2 = _02Json.data; + + var _debug = createCommonjsModule(function (module) { + // https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color + var reset = '\x1b[0m'; + + var padEnd = function padEnd(str, width) { + str = str.toString(); + + while (str.length < width) { + str += ' '; + } + + return str; + }; + + function isClientSide() { + return typeof window !== 'undefined' && window.document; + } // some nice colors for client-side debug + + + var css = { + green: '#7f9c6c', + red: '#914045', + blue: '#6699cc', + magenta: '#6D5685', + cyan: '#2D85A8', + yellow: '#e6d7b3', + black: '#303b50' + }; + + var logClientSide = function logClientSide(doc) { + var tagset = doc.world.tags; + doc.list.forEach(function (p) { + console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;'); + var terms = p.terms(); + terms.forEach(function (t) { + var tags = Object.keys(t.tags); + var text = t.text || '-'; + + if (t.implicit) { + text = '[' + t.implicit + ']'; + } + + var word = "'" + text + "'"; + word = padEnd(word, 8); + var found = tags.find(function (tag) { + return tagset[tag] && tagset[tag].color; + }); + var color = 'steelblue'; + + if (tagset[found]) { + color = tagset[found].color; + color = css[color]; + } + + console.log(" ".concat(word, " - %c").concat(tags.join(', ')), "color: ".concat(color || 'steelblue', ";")); + }); + }); + }; //cheaper than requiring chalk + + + var cli = { + green: function green(str) { + return '\x1b[32m' + str + reset; + }, + red: function red(str) { + return '\x1b[31m' + str + reset; + }, + blue: function blue(str) { + return '\x1b[34m' + str + reset; + }, + magenta: function magenta(str) { + return '\x1b[35m' + str + reset; + }, + cyan: function cyan(str) { + return '\x1b[36m' + str + reset; + }, + yellow: function yellow(str) { + return '\x1b[33m' + str + reset; + }, + black: function black(str) { + return '\x1b[30m' + str + reset; + } + }; + + var tagString = function tagString(tags, world) { + tags = tags.map(function (tag) { + if (!world.tags.hasOwnProperty(tag)) { + return tag; + } + + var c = world.tags[tag].color || 'blue'; + return cli[c](tag); + }); + return tags.join(', '); + }; //output some helpful stuff to the console + + + var debug = function debug(doc) { + if (isClientSide()) { + logClientSide(doc); + return doc; + } + + console.log(cli.blue('=====')); + doc.list.forEach(function (p) { + console.log(cli.blue(' -----')); + var terms = p.terms(); + terms.forEach(function (t) { + var tags = Object.keys(t.tags); + var text = t.text || '-'; + + if (t.implicit) { + text = '[' + t.implicit + ']'; + } + + { + text = cli.yellow(text); + } + + var word = "'" + text + "'"; + word = padEnd(word, 18); + var str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world); + console.log(str); + }); + }); + console.log(''); + return doc; + }; + + module.exports = debug; + }); + + var topk = function topk(doc) { + var list = doc.json({ + text: false, + terms: false, + reduced: true + }); // combine them + + var obj = {}; + list.forEach(function (o) { + if (!obj[o.reduced]) { + o.count = 0; + obj[o.reduced] = o; + } + + obj[o.reduced].count += 1; + }); + var arr = Object.keys(obj).map(function (k) { + return obj[k]; + }); // sort them + + arr.sort(function (a, b) { + if (a.count > b.count) { + return -1; + } else if (a.count < b.count) { + return 1; + } + + return 0; + }); + return arr; + }; + + var _topk = topk; + + /** pretty-print the current document and its tags */ + + var debug_1 = function debug_1() { + _debug(this); + return this; + }; + /** some named output formats */ + + + var out = function out(method) { + if (method === 'text') { + return this.text(); + } + + if (method === 'normal') { + return this.text('normal'); + } + + if (method === 'json') { + return this.json(); + } + + if (method === 'offset' || method === 'offsets') { + return this.json({ + offset: true + }); + } + + if (method === 'array') { + return this.json({ + terms: false + }).map(function (obj) { + return obj.text; + }); + } + + if (method === 'freq' || method === 'frequency') { + return _topk(this); + } + + if (method === 'terms') { + var list = []; + this.json({ + text: false, + terms: { + text: true + } + }).forEach(function (obj) { + var terms = obj.terms.map(function (t) { + return t.text; + }); + terms = terms.filter(function (t) { + return t; + }); + list = list.concat(terms); + }); + return list; + } + + if (method === 'tags') { + return this.list.map(function (p) { + return p.terms().reduce(function (h, t) { + h[t.clean || t.implicit] = Object.keys(t.tags); + return h; + }, {}); + }); + } + + if (method === 'debug') { + _debug(this); + return this; + } + + return this.text(); + }; + + var _03Out = { + debug: debug_1, + out: out + }; + + var methods$2 = { + /** alphabetical order */ + alpha: function alpha(a, b) { + var left = a.text('clean'); + var right = b.text('clean'); + + if (left < right) { + return -1; + } + + if (left > right) { + return 1; + } + + return 0; + }, + + /** count the # of characters of each match */ + length: function length(a, b) { + var left = a.text().trim().length; + var right = b.text().trim().length; + + if (left < right) { + return 1; + } + + if (left > right) { + return -1; + } + + return 0; + }, + + /** count the # of terms in each match */ + wordCount: function wordCount(a, b) { + var left = a.wordCount(); + var right = b.wordCount(); + + if (left < right) { + return 1; + } + + if (left > right) { + return -1; + } + + return 0; + } + }; + /** sort by # of duplicates in the document*/ + + var byFreq = function byFreq(doc) { + var counts = {}; + var options = { + "case": true, + punctuation: false, + whitespace: true, + unicode: true + }; + doc.list.forEach(function (p) { + var str = p.text(options); + counts[str] = counts[str] || 0; + counts[str] += 1; + }); // sort by freq + + doc.list.sort(function (a, b) { + var left = counts[a.text(options)]; + var right = counts[b.text(options)]; + + if (left < right) { + return 1; + } + + if (left > right) { + return -1; + } + + return 0; + }); + return doc; + }; // order results 'chronologically', or document-order + + + var sortSequential = function sortSequential(doc) { + var order = {}; + doc.json({ + terms: { + offset: true + } + }).forEach(function (o) { + order[o.terms[0].id] = o.terms[0].offset.start; + }); + doc.list = doc.list.sort(function (a, b) { + if (order[a.start] > order[b.start]) { + return 1; + } else if (order[a.start] < order[b.start]) { + return -1; + } + + return 0; + }); + return doc; + }; //aliases + + + methods$2.alphabetical = methods$2.alpha; + methods$2.wordcount = methods$2.wordCount; // aliases for sequential ordering + + var seqNames = { + index: true, + sequence: true, + seq: true, + sequential: true, + chron: true, + chronological: true + }; + /** re-arrange the order of the matches (in place) */ + + var sort = function sort(input) { + input = input || 'alpha'; //do this one up-front + + if (input === 'freq' || input === 'frequency' || input === 'topk') { + return byFreq(this); + } + + if (seqNames.hasOwnProperty(input)) { + return sortSequential(this); + } + + input = methods$2[input] || input; // apply sort method on each phrase + + if (typeof input === 'function') { + this.list = this.list.sort(input); + return this; + } + + return this; + }; + /** reverse the order of the matches, but not the words */ + + + var reverse = function reverse() { + var list = [].concat(this.list); + list = list.reverse(); + return this.buildFrom(list); + }; + /** remove any duplicate matches */ + + + var unique$4 = function unique() { + var list = [].concat(this.list); + var obj = {}; + list = list.filter(function (p) { + var str = p.text('reduced').trim(); + + if (obj.hasOwnProperty(str) === true) { + return false; + } + + obj[str] = true; + return true; + }); + return this.buildFrom(list); + }; + + var _01Sort = { + sort: sort, + reverse: reverse, + unique: unique$4 + }; + + var isPunct = /[\[\]{}⟨⟩:,،、‒–—―…‹›«»‐\-;\/⁄·*\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g; + var quotes = /['‘’“”"′″‴]+/g; + var methods$3 = { + // cleanup newlines and extra spaces + whitespace: function whitespace(doc) { + var termArr = doc.list.map(function (ts) { + return ts.terms(); + }); + termArr.forEach(function (terms, o) { + terms.forEach(function (t, i) { + // keep dashes between words + if (t.hasDash() === true) { + t.post = ' - '; + return; + } // remove existing spaces + + + t.pre = t.pre.replace(/\s/g, ''); + t.post = t.post.replace(/\s/g, ''); //last word? ensure there's a next sentence. + + if (terms.length - 1 === i && !termArr[o + 1]) { + return; + } // no extra spaces for contractions + + + if (t.implicit && Boolean(t.text) === true) { + return; + } // no extra spaces for hyphenated words + + + if (t.hasHyphen() === true) { + return; + } + + t.post += ' '; + }); + }); + }, + punctuation: function punctuation(termList) { + termList.forEach(function (t) { + // space between hyphenated words + if (t.hasHyphen() === true) { + t.post = ' '; + } + + t.pre = t.pre.replace(isPunct, ''); + t.post = t.post.replace(isPunct, ''); // elipses + + t.post = t.post.replace(/\.\.\./, ''); // only allow one exclamation + + if (/!/.test(t.post) === true) { + t.post = t.post.replace(/!/g, ''); + t.post = '!' + t.post; + } // only allow one question mark + + + if (/\?/.test(t.post) === true) { + t.post = t.post.replace(/[\?!]*/, ''); + t.post = '?' + t.post; + } + }); + }, + unicode: function unicode(termList) { + termList.forEach(function (t) { + if (t.isImplicit() === true) { + return; + } + + t.text = unicode_1(t.text); + }); + }, + quotations: function quotations(termList) { + termList.forEach(function (t) { + t.post = t.post.replace(quotes, ''); + t.pre = t.pre.replace(quotes, ''); + }); + }, + adverbs: function adverbs(doc) { + doc.match('#Adverb').not('(not|nary|seldom|never|barely|almost|basically|so)').remove(); + }, + // remove the '.' from 'Mrs.' (safely) + abbreviations: function abbreviations(doc) { + doc.list.forEach(function (ts) { + var terms = ts.terms(); + terms.forEach(function (t, i) { + if (t.tags.Abbreviation === true && terms[i + 1]) { + t.post = t.post.replace(/^\./, ''); + } + }); + }); + } + }; + var _methods = methods$3; + + var defaults = { + // light + whitespace: true, + unicode: true, + punctuation: true, + emoji: true, + acronyms: true, + abbreviations: true, + // medium + "case": false, + contractions: false, + parentheses: false, + quotations: false, + adverbs: false, + // heavy (loose legibility) + possessives: false, + verbs: false, + nouns: false, + honorifics: false // pronouns: true, + + }; + var mapping = { + light: {}, + medium: { + "case": true, + contractions: true, + parentheses: true, + quotations: true, + adverbs: true + } + }; + mapping.heavy = Object.assign({}, mapping.medium, { + possessives: true, + verbs: true, + nouns: true, + honorifics: true + }); + /** common ways to clean-up the document, and reduce noise */ + + var normalize = function normalize(options) { + options = options || {}; // support named forms + + if (typeof options === 'string') { + options = mapping[options] || {}; + } // set defaults + + + options = Object.assign({}, defaults, options); // clear the cache + + this.uncache(); + var termList = this.termList(); // lowercase things + + if (options["case"]) { + this.toLowerCase(); + } //whitespace + + + if (options.whitespace) { + _methods.whitespace(this); + } // unicode: é -> e + + + if (options.unicode) { + _methods.unicode(termList); + } //punctuation - keep sentence punctation, quotes, parenths + + + if (options.punctuation) { + _methods.punctuation(termList); + } // remove ':)' + + + if (options.emoji) { + this.remove('(#Emoji|#Emoticon)'); + } // 'f.b.i.' -> 'FBI' + + + if (options.acronyms) { + this.acronyms().strip(); // .toUpperCase() + } // remove period from abbreviations + + + if (options.abbreviations) { + _methods.abbreviations(this); + } // --Medium methods-- + // `isn't` -> 'is not' + + + if (options.contraction || options.contractions) { + this.contractions().expand(); + } // '(word)' -> 'word' + + + if (options.parentheses) { + this.parentheses().unwrap(); + } // remove "" punctuation + + + if (options.quotations || options.quotes) { + _methods.quotations(termList); + } // remove any un-necessary adverbs + + + if (options.adverbs) { + _methods.adverbs(this); + } // --Heavy methods-- + // `cory hart's -> cory hart' + + + if (options.possessive || options.possessives) { + this.possessives().strip(); + } // 'he walked' -> 'he walk' + + + if (options.verbs) { + this.verbs().toInfinitive(); + } // 'three dogs' -> 'three dog' + + + if (options.nouns || options.plurals) { + this.nouns().toSingular(); + } // remove 'Mr.' from 'Mr John Smith' + + + if (options.honorifics) { + this.remove('#Honorific'); + } + + return this; + }; + + var _02Normalize = { + normalize: normalize + }; + + var _03Split = createCommonjsModule(function (module, exports) { + /** return a Document with three parts for every match + * seperate everything before the word, as a new phrase + */ + exports.splitOn = function (reg) { + // if there's no match, split parent, instead + if (!reg) { + var parent = this.parent(); + return parent.splitOn(this); + } //start looking for a match.. + + + var regs = syntax_1(reg); + var matches = []; + this.list.forEach(function (p) { + var foundEm = p.match(regs); //no match here, add full sentence + + if (foundEm.length === 0) { + matches.push(p); + return; + } // we found something here. + + + var carry = p; + foundEm.forEach(function (found) { + var parts = carry.splitOn(found); // add em in + + if (parts.before) { + matches.push(parts.before); + } + + if (parts.match) { + matches.push(parts.match); + } // start matching now on the end + + + carry = parts.after; + }); // add that last part + + if (carry) { + matches.push(carry); + } + }); + return this.buildFrom(matches); + }; + /** return a Document with two parts for every match + * seperate everything after the word, as a new phrase + */ + + + exports.splitAfter = function (reg) { + // if there's no match, split parent, instead + if (!reg) { + var parent = this.parent(); + return parent.splitAfter(this); + } // start looking for our matches + + + var regs = syntax_1(reg); + var matches = []; + this.list.forEach(function (p) { + var foundEm = p.match(regs); //no match here, add full sentence + + if (foundEm.length === 0) { + matches.push(p); + return; + } // we found something here. + + + var carry = p; + foundEm.forEach(function (found) { + var parts = carry.splitOn(found); // add em in + + if (parts.before && parts.match) { + // merge these two together + parts.before.length += parts.match.length; + matches.push(parts.before); + } else if (parts.match) { + matches.push(parts.match); + } // start matching now on the end + + + carry = parts.after; + }); // add that last part + + if (carry) { + matches.push(carry); + } + }); + return this.buildFrom(matches); + }; + + exports.split = exports.splitAfter; //i guess? + + /** return a Document with two parts for every match */ + + exports.splitBefore = function (reg) { + // if there's no match, split parent, instead + if (!reg) { + var parent = this.parent(); + return parent.splitBefore(this); + } //start looking for a match.. + + + var regs = syntax_1(reg); + var matches = []; + this.list.forEach(function (p) { + var foundEm = p.match(regs); //no match here, add full sentence + + if (foundEm.length === 0) { + matches.push(p); + return; + } // we found something here. + + + var carry = p; + foundEm.forEach(function (found) { + var parts = carry.splitOn(found); // add before part in + + if (parts.before) { + matches.push(parts.before); + } // merge match+after + + + if (parts.match && parts.after) { + parts.match.length += parts.after.length; + } // start matching now on the end + + + carry = parts.match; + }); // add that last part + + if (carry) { + matches.push(carry); + } + }); + return this.buildFrom(matches); + }; + /** split a document into labeled sections */ + + + exports.segment = function (regs, options) { + regs = regs || {}; + options = options || { + text: true + }; + var doc = this; + var keys = Object.keys(regs); // split em + + keys.forEach(function (k) { + doc = doc.splitOn(k); + }); //add labels for each section + + doc.list.forEach(function (p) { + for (var i = 0; i < keys.length; i += 1) { + if (p.has(keys[i])) { + p.segment = regs[keys[i]]; + return; + } + } + }); + return doc.list.map(function (p) { + var res = p.json(options); + res.segment = p.segment || null; + return res; + }); + }; + }); + var _03Split_1 = _03Split.splitOn; + var _03Split_2 = _03Split.splitAfter; + var _03Split_3 = _03Split.split; + var _03Split_4 = _03Split.splitBefore; + var _03Split_5 = _03Split.segment; + + var eachTerm = function eachTerm(doc, fn) { + var world = doc.world; + doc.list.forEach(function (p) { + p.terms().forEach(function (t) { + return t[fn](world); + }); + }); + return doc; + }; + /** turn every letter of every term to lower-cse */ + + + var toLowerCase = function toLowerCase() { + return eachTerm(this, 'toLowerCase'); + }; + /** turn every letter of every term to upper case */ + + + var toUpperCase = function toUpperCase() { + return eachTerm(this, 'toUpperCase'); + }; + /** upper-case the first letter of each term */ + + + var toTitleCase = function toTitleCase() { + return eachTerm(this, 'toTitleCase'); + }; + /** remove whitespace and title-case each term */ + + + var toCamelCase = function toCamelCase() { + this.list.forEach(function (p) { + //remove whitespace + var terms = p.terms(); + terms.forEach(function (t, i) { + if (i !== 0) { + t.toTitleCase(); + } + + if (i !== terms.length - 1) { + t.post = ''; + } + }); + }); // this.tag('#CamelCase', 'toCamelCase') + + return this; + }; + + var _04Case = { + toLowerCase: toLowerCase, + toUpperCase: toUpperCase, + toTitleCase: toTitleCase, + toCamelCase: toCamelCase + }; + + var _05Whitespace = createCommonjsModule(function (module, exports) { + /** add this punctuation or whitespace before each match: */ + exports.pre = function (str, concat) { + if (str === undefined) { + return this.list[0].terms(0).pre; + } + + this.list.forEach(function (p) { + var term = p.terms(0); + + if (concat === true) { + term.pre += str; + } else { + term.pre = str; + } + }); + return this; + }; + /** add this punctuation or whitespace after each match: */ + + + exports.post = function (str, concat) { + // return array of post strings + if (str === undefined) { + return this.list.map(function (p) { + var terms = p.terms(); + var term = terms[terms.length - 1]; + return term.post; + }); + } // set post string on all ends + + + this.list.forEach(function (p) { + var terms = p.terms(); + var term = terms[terms.length - 1]; + + if (concat === true) { + term.post += str; + } else { + term.post = str; + } + }); + return this; + }; + /** remove start and end whitespace */ + + + exports.trim = function () { + this.list = this.list.map(function (p) { + return p.trim(); + }); + return this; + }; + /** connect words with hyphen, and remove whitespace */ + + + exports.hyphenate = function () { + this.list.forEach(function (p) { + var terms = p.terms(); //remove whitespace + + terms.forEach(function (t, i) { + if (i !== 0) { + t.pre = ''; + } + + if (terms[i + 1]) { + t.post = '-'; + } + }); + }); + return this; + }; + /** remove hyphens between words, and set whitespace */ + + + exports.dehyphenate = function () { + var hasHyphen = /(-|–|—)/; + this.list.forEach(function (p) { + var terms = p.terms(); //remove whitespace + + terms.forEach(function (t) { + if (hasHyphen.test(t.post)) { + t.post = ' '; + } + }); + }); + return this; + }; + + exports.deHyphenate = exports.dehyphenate; + /** add quotations around these matches */ + + exports.toQuotations = function (start, end) { + start = start || "\""; + end = end || "\""; + this.list.forEach(function (p) { + var terms = p.terms(); + terms[0].pre = start + terms[0].pre; + var last = terms[terms.length - 1]; + last.post = end + last.post; + }); + return this; + }; + + exports.toQuotation = exports.toQuotations; + /** add brackets around these matches */ + + exports.toParentheses = function (start, end) { + start = start || "("; + end = end || ")"; + this.list.forEach(function (p) { + var terms = p.terms(); + terms[0].pre = start + terms[0].pre; + var last = terms[terms.length - 1]; + last.post = end + last.post; + }); + return this; + }; + }); + var _05Whitespace_1 = _05Whitespace.pre; + var _05Whitespace_2 = _05Whitespace.post; + var _05Whitespace_3 = _05Whitespace.trim; + var _05Whitespace_4 = _05Whitespace.hyphenate; + var _05Whitespace_5 = _05Whitespace.dehyphenate; + var _05Whitespace_6 = _05Whitespace.deHyphenate; + var _05Whitespace_7 = _05Whitespace.toQuotations; + var _05Whitespace_8 = _05Whitespace.toQuotation; + var _05Whitespace_9 = _05Whitespace.toParentheses; + + /** make all phrases into one phrase */ + var join = function join(str) { + // clear the cache + this.uncache(); // make one large phrase - 'main' + + var main = this.list[0]; + var before = main.length; + var removed = {}; + + for (var i = 1; i < this.list.length; i++) { + var p = this.list[i]; + removed[p.start] = true; + var term = main.lastTerm(); // add whitespace between them + + if (str) { + term.post += str; + } // main -> p + + + term.next = p.start; // main <- p + + p.terms(0).prev = term.id; + main.length += p.length; + main.cache = {}; + } // parents are bigger than than their children. + // when we increase a child, we increase their parent too. + + + var increase = main.length - before; + this.parents().forEach(function (doc) { + // increase length on each effected phrase + doc.list.forEach(function (p) { + var terms = p.terms(); + + for (var _i = 0; _i < terms.length; _i++) { + if (terms[_i].id === main.start) { + p.length += increase; + break; + } + } + + p.cache = {}; + }); // remove redundant phrases now + + doc.list = doc.list.filter(function (p) { + return removed[p.start] !== true; + }); + }); // return one major phrase + + return this.buildFrom([main]); + }; + + var _06Join = { + join: join + }; + + var postPunct = /[,\)"';:\-–—\.…]/; // const irregulars = { + // 'will not': `won't`, + // 'i am': `i'm`, + // } + + var setContraction = function setContraction(m, suffix) { + if (!m.found) { + return; + } + + var terms = m.termList(); //avoid any problematic punctuation + + for (var i = 0; i < terms.length - 1; i++) { + var t = terms[i]; + + if (postPunct.test(t.post)) { + return; + } + } // set them as implict + + + terms.forEach(function (t) { + t.implicit = t.clean; + }); // perform the contraction + + terms[0].text += suffix; // clean-up the others + + terms.slice(1).forEach(function (t) { + t.text = ''; + }); + + for (var _i = 0; _i < terms.length - 1; _i++) { + var _t = terms[_i]; + _t.post = _t.post.replace(/ /, ''); + } + }; + /** turn 'i am' into i'm */ + + + var contract = function contract() { + var doc = this.not('@hasContraction'); // we are -> we're + + var m = doc.match('(we|they|you) are'); + setContraction(m, "'re"); // they will -> they'll + + m = doc.match('(he|she|they|it|we|you) will'); + setContraction(m, "'ll"); // she is -> she's + + m = doc.match('(he|she|they|it|we) is'); + setContraction(m, "'s"); // spencer is -> spencer's + + m = doc.match('#Person is'); + setContraction(m, "'s"); // spencer would -> spencer'd + + m = doc.match('#Person would'); + setContraction(m, "'d"); // would not -> wouldn't + + m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not'); + setContraction(m, "n't"); // i have -> i've + + m = doc.match('(i|we|they) have'); + setContraction(m, "'ve"); // would have -> would've + + m = doc.match('(would|should|could) have'); + setContraction(m, "'ve"); // i am -> i'm + + m = doc.match('i am'); + setContraction(m, "'m"); // going to -> gonna + + m = doc.match('going to'); + return this; + }; + + var _07Contract = { + contract: contract + }; + + var methods$4 = Object.assign({}, _01Utils$1, _02Accessors, _03Match, _04Tag, _05Loops, _06Lookup, _07Cache, _01Replace, _02Insert, _01Text, _02Json, _03Out, _01Sort, _02Normalize, _03Split, _04Case, _05Whitespace, _06Join, _07Contract); + + var methods$5 = {}; // allow helper methods like .adjectives() and .adverbs() + + var arr = [['terms', '.'], ['hyphenated', '@hasHyphen .'], ['adjectives', '#Adjective'], ['hashTags', '#HashTag'], ['emails', '#Email'], ['emoji', '#Emoji'], ['emoticons', '#Emoticon'], ['atMentions', '#AtMention'], ['urls', '#Url'], ['adverbs', '#Adverb'], ['pronouns', '#Pronoun'], ['conjunctions', '#Conjunction'], ['prepositions', '#Preposition']]; + arr.forEach(function (a) { + methods$5[a[0]] = function (n) { + var m = this.match(a[1]); + + if (typeof n === 'number') { + m = m.get(n); + } + + return m; + }; + }); // aliases + + methods$5.emojis = methods$5.emoji; + methods$5.atmentions = methods$5.atMentions; + methods$5.words = methods$5.terms; + /** return anything tagged as a phone number */ + + methods$5.phoneNumbers = function (n) { + var m = this.splitAfter('@hasComma'); + m = m.match('#PhoneNumber+'); + + if (typeof n === 'number') { + m = m.get(n); + } + + return m; + }; + /** Deprecated: please use compromise-numbers plugin */ + + + methods$5.money = function (n) { + var m = this.match('#Money #Currency?'); + + if (typeof n === 'number') { + m = m.get(n); + } + + return m; + }; + /** return all cities, countries, addresses, and regions */ + + + methods$5.places = function (n) { + // don't split 'paris, france' + var keep = this.match('(#City && @hasComma) (#Region|#Country)'); // but split the other commas + + var m = this.not(keep).splitAfter('@hasComma'); // combine them back together + + m = m.concat(keep); + m.sort('index'); + m = m.match('#Place+'); + + if (typeof n === 'number') { + m = m.get(n); + } + + return m; + }; + /** return all schools, businesses and institutions */ + + + methods$5.organizations = function (n) { + var m = this.clauses(); + m = m.match('#Organization+'); + + if (typeof n === 'number') { + m = m.get(n); + } + + return m; + }; //combine them with .topics() method + + + methods$5.entities = function (n) { + var r = this.clauses(); // Find people, places, and organizations + + var yup = r.people(); + yup = yup.concat(r.places()); + yup = yup.concat(r.organizations()); + var ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']; + yup = yup.not(ignore); //return them to normal ordering + + yup.sort('sequence'); // yup.unique() //? not sure + + if (typeof n === 'number') { + yup = yup.get(n); + } + + return yup; + }; //aliases + + + methods$5.things = methods$5.entities; + methods$5.topics = methods$5.entities; + var _simple = methods$5; + + var underOver = /^(under|over)-?/; + /** match a word-sequence, like 'super bowl' in the lexicon */ + + var tryMultiple = function tryMultiple(terms, t, world) { + var lex = world.words; //try a two-word version + + var txt = terms[t].reduced + ' ' + terms[t + 1].reduced; + + if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { + terms[t].tag(lex[txt], 'lexicon-two', world); + terms[t + 1].tag(lex[txt], 'lexicon-two', world); + return 1; + } //try a three-word version? + + + if (t + 2 < terms.length) { + txt += ' ' + terms[t + 2].reduced; + + if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { + terms[t].tag(lex[txt], 'lexicon-three', world); + terms[t + 1].tag(lex[txt], 'lexicon-three', world); + terms[t + 2].tag(lex[txt], 'lexicon-three', world); + return 2; + } + } //try a four-word version? + + + if (t + 3 < terms.length) { + txt += ' ' + terms[t + 3].reduced; + + if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { + terms[t].tag(lex[txt], 'lexicon-four', world); + terms[t + 1].tag(lex[txt], 'lexicon-four', world); + terms[t + 2].tag(lex[txt], 'lexicon-four', world); + terms[t + 3].tag(lex[txt], 'lexicon-four', world); + return 3; + } + } + + return 0; + }; + /** look at each word in our list of known-words */ + + + var checkLexicon = function checkLexicon(terms, world) { + var lex = world.words; + var hasCompound = world.hasCompound; // use reduced? + //go through each term, and check the lexicon + + for (var t = 0; t < terms.length; t += 1) { + var str = terms[t].clean; //is it the start of a compound word, like 'super bowl'? + + if (hasCompound[str] === true && t + 1 < terms.length) { + var foundWords = tryMultiple(terms, t, world); + + if (foundWords > 0) { + t += foundWords; //skip any already-found words + + continue; + } + } //try one-word lexicon + + + if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) { + terms[t].tag(lex[str], 'lexicon', world); + continue; + } // look at reduced version of term, too + + + if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) { + terms[t].tag(lex[terms[t].reduced], 'lexicon', world); + continue; + } // prefix strip: try to match 'take' for 'undertake' + + + if (underOver.test(str) === true) { + var noPrefix = str.replace(underOver, ''); + + if (lex.hasOwnProperty(noPrefix) === true) { + terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world); + } + } + } + + return terms; + }; + + var _01Lexicon = checkLexicon; + + var smallTagger = function smallTagger(doc) { + var terms = doc.termList(); + _01Lexicon(terms, doc.world); + return doc; + }; + + var tiny = smallTagger; + + var addMethod = function addMethod(Doc) { + /** */ + var Abbreviations = + /*#__PURE__*/ + function (_Doc) { + _inherits(Abbreviations, _Doc); + + function Abbreviations() { + _classCallCheck(this, Abbreviations); + + return _possibleConstructorReturn(this, _getPrototypeOf(Abbreviations).apply(this, arguments)); + } + + _createClass(Abbreviations, [{ + key: "stripPeriods", + value: function stripPeriods() { + this.termList().forEach(function (t) { + if (t.tags.Abbreviation === true && t.next) { + t.post = t.post.replace(/^\./, ''); + } + + var str = t.text.replace(/\./, ''); + t.set(str); + }); + return this; + } + }, { + key: "addPeriods", + value: function addPeriods() { + this.termList().forEach(function (t) { + t.post = t.post.replace(/^\./, ''); + t.post = '.' + t.post; + }); + return this; + } + }]); + + return Abbreviations; + }(Doc); + + Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods; + + Doc.prototype.abbreviations = function (n) { + var match = this.match('#Abbreviation'); + + if (typeof n === 'number') { + match = match.get(n); + } + + return new Abbreviations(match.list, this, this.world); + }; + + return Doc; + }; + + var Abbreviations = addMethod; + + var hasPeriod = /\./; + + var addMethod$1 = function addMethod(Doc) { + /** */ + var Acronyms = + /*#__PURE__*/ + function (_Doc) { + _inherits(Acronyms, _Doc); + + function Acronyms() { + _classCallCheck(this, Acronyms); + + return _possibleConstructorReturn(this, _getPrototypeOf(Acronyms).apply(this, arguments)); + } + + _createClass(Acronyms, [{ + key: "stripPeriods", + value: function stripPeriods() { + this.termList().forEach(function (t) { + var str = t.text.replace(/\./g, ''); + t.set(str); + }); + return this; + } + }, { + key: "addPeriods", + value: function addPeriods() { + this.termList().forEach(function (t) { + var str = t.text.replace(/\./g, ''); + str = str.split('').join('.'); // don't add a end-period if there's a sentence-end one + + if (hasPeriod.test(t.post) === false) { + str += '.'; + } + + t.set(str); + }); + return this; + } + }]); + + return Acronyms; + }(Doc); + + Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods; + Acronyms.prototype.strip = Acronyms.prototype.stripPeriods; + + Doc.prototype.acronyms = function (n) { + var match = this.match('#Acronym'); + + if (typeof n === 'number') { + match = match.get(n); + } + + return new Acronyms(match.list, this, this.world); + }; + + return Doc; + }; + + var Acronyms = addMethod$1; + + var addMethod$2 = function addMethod(Doc) { + /** split into approximate sub-sentence phrases */ + Doc.prototype.clauses = function (n) { + // an awkward way to disambiguate a comma use + var commas = this["if"]('@hasComma').notIf('@hasComma @hasComma') //fun, cool... + .notIf('@hasComma . .? (and|or) .') //cool, and fun + .notIf('(#City && @hasComma) #Country') //'toronto, canada' + .notIf('(#Date && @hasComma) #Year') //'july 6, 1992' + .notIf('@hasComma (too|also)$') //at end of sentence + .match('@hasComma'); + var found = this.splitAfter(commas); + var quotes = found.quotations(); + found = found.splitOn(quotes); + var parentheses = found.parentheses(); + found = found.splitOn(parentheses); // it is cool and it is .. + + var conjunctions = found["if"]('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction'); + found = found.splitBefore(conjunctions); // if it is this then that + + var condition = found["if"]('if .{2,9} then .').match('then'); + found = found.splitBefore(condition); // misc clause partitions + + found = found.splitBefore('as well as .'); + found = found.splitBefore('such as .'); + found = found.splitBefore('in addition to .'); // semicolons, dashes + + found = found.splitAfter('@hasSemicolon'); + found = found.splitAfter('@hasDash'); // passive voice verb - '.. which was robbed is empty' + // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // //which the boy robbed + // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?') + // if (passive.found) { + // found = found.splitAfter(passive) + // } + // does there appear to have relative/subordinate clause still? + + var tooLong = found.filter(function (d) { + return d.wordCount() > 5 && d.match('#Verb+').length >= 2; + }); + + if (tooLong.found) { + var m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+'); + found = found.splitOn(m.eq(0)); + } + + if (typeof n === 'number') { + found = found.get(n); + } + + return new Doc(found.list, this, this.world); + }; + + return Doc; + }; + + var Clauses = addMethod$2; + + var addMethod$3 = function addMethod(Doc) { + /** */ + var Contractions = + /*#__PURE__*/ + function (_Doc) { + _inherits(Contractions, _Doc); + + function Contractions(list, from, world) { + var _this; + + _classCallCheck(this, Contractions); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Contractions).call(this, list, from, world)); + _this.contracted = null; + return _this; + } + /** turn didn't into 'did not' */ + + + _createClass(Contractions, [{ + key: "expand", + value: function expand() { + this.list.forEach(function (p) { + var terms = p.terms(); //change the case? + + var isTitlecase = terms[0].isTitleCase(); + terms.forEach(function (t, i) { + //use the implicit text + t.set(t.implicit || t.text); + t.implicit = undefined; //add whitespace + + if (i < terms.length - 1 && t.post === '') { + t.post += ' '; + } + }); //set titlecase + + if (isTitlecase) { + terms[0].toTitleCase(); + } + }); + return this; + } + }]); + + return Contractions; + }(Doc); //find contractable, expanded-contractions + // const findExpanded = r => { + // let remain = r.not('#Contraction') + // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)') + // m.concat(remain.match('(they|we|you|i) have')) + // m.concat(remain.match('i am')) + // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not')) + // return m + // } + + + Doc.prototype.contractions = function (n) { + //find currently-contracted + var found = this.match('@hasContraction+'); //(may want to split these up) + //todo: split consecutive contractions + + if (typeof n === 'number') { + found = found.get(n); + } + + return new Contractions(found.list, this, this.world); + }; //aliases + + + Doc.prototype.expanded = Doc.prototype.isExpanded; + Doc.prototype.contracted = Doc.prototype.isContracted; + return Doc; + }; + + var Contractions = addMethod$3; + + var addMethod$4 = function addMethod(Doc) { + //pull it apart.. + var parse = function parse(doc) { + var things = doc.splitAfter('@hasComma').splitOn('(and|or) not?').not('(and|or) not?'); + var beforeLast = doc.match('[.] (and|or)', 0); + return { + things: things, + conjunction: doc.match('(and|or) not?'), + beforeLast: beforeLast, + hasOxford: beforeLast.has('@hasComma') + }; + }; + /** cool, fun, and nice */ + + + var Lists = + /*#__PURE__*/ + function (_Doc) { + _inherits(Lists, _Doc); + + function Lists() { + _classCallCheck(this, Lists); + + return _possibleConstructorReturn(this, _getPrototypeOf(Lists).apply(this, arguments)); + } + + _createClass(Lists, [{ + key: "conjunctions", + + /** coordinating conjunction */ + value: function conjunctions() { + return this.match('(and|or)'); + } + /** split-up by list object */ + + }, { + key: "parts", + value: function parts() { + return this.splitAfter('@hasComma').splitOn('(and|or) not?'); + } + /** remove the conjunction */ + + }, { + key: "items", + value: function items() { + return parse(this).things; + } + /** add a new unit to the list */ + + }, { + key: "add", + value: function add(str) { + this.forEach(function (p) { + var beforeLast = parse(p).beforeLast; + beforeLast.append(str); //add a comma to it + + beforeLast.termList(0).addPunctuation(','); + }); + return this; + } + /** remove any matching unit from the list */ + + }, { + key: "remove", + value: function remove(match) { + return this.items()["if"](match).remove(); + } + /** return only lists that use a serial comma */ + + }, { + key: "hasOxfordComma", + value: function hasOxfordComma() { + return this.filter(function (doc) { + return parse(doc).hasOxford; + }); + } + }, { + key: "addOxfordComma", + value: function addOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === false) { + needsComma.post(', '); + } + + return this; + } + }, { + key: "removeOxfordComma", + value: function removeOxfordComma() { + var items = this.items(); + var needsComma = items.eq(items.length - 2); + + if (needsComma.found && needsComma.has('@hasComma') === true) { + needsComma.post(' '); + } + + return this; + } + }]); + + return Lists; + }(Doc); // aliases + + + Lists.prototype.things = Lists.prototype.items; + + Doc.prototype.lists = function (n) { + var m = this["if"]('@hasComma+ .? (and|or) not? .'); // person-list + + var nounList = m.match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')["if"]('#Noun'); + var adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+'); + var verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+'); + var result = nounList.concat(adjList); + result = result.concat(verbList); + result = result["if"]('@hasComma'); + + if (typeof n === 'number') { + result = m.get(n); + } + + return new Lists(result.list, this, this.world); + }; + + return Doc; + }; + + var Lists = addMethod$4; + + var noPlural = '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'; //certain words can't be plural, like 'peace' + + var hasPlural = function hasPlural(doc) { + if (doc.has('#Plural') === true) { + return true; + } // these can't be plural + + + if (doc.has(noPlural) === true) { + return false; + } + + return true; + }; + + var hasPlural_1 = hasPlural; + + var irregulars$1 = { + hour: 'an', + heir: 'an', + heirloom: 'an', + honest: 'an', + honour: 'an', + honor: 'an', + uber: 'an' //german u + + }; //pronounced letters of acronyms that get a 'an' + + var an_acronyms = { + a: true, + e: true, + f: true, + h: true, + i: true, + l: true, + m: true, + n: true, + o: true, + r: true, + s: true, + x: true + }; //'a' regexes + + var a_regexs = [/^onc?e/i, //'wu' sound of 'o' + /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u' + /^eul/i]; + + var makeArticle = function makeArticle(doc) { + //no 'the john smith', but 'a london hotel' + if (doc.has('#Person') || doc.has('#Place')) { + return ''; + } //no a/an if it's plural + + + if (doc.has('#Plural')) { + return 'the'; + } + + var str = doc.text('normal').trim(); //explicit irregular forms + + if (irregulars$1.hasOwnProperty(str)) { + return irregulars$1[str]; + } //spelled-out acronyms + + + var firstLetter = str.substr(0, 1); + + if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) { + return 'an'; + } //'a' regexes + + + for (var i = 0; i < a_regexs.length; i++) { + if (a_regexs[i].test(str)) { + return 'a'; + } + } //basic vowel-startings + + + if (/^[aeiou]/i.test(str)) { + return 'an'; + } + + return 'a'; + }; + + var getArticle = makeArticle; + + //similar to plural/singularize rules, but not the same + var isPlural = [/(antenn|formul|nebul|vertebr|vit)ae$/i, /(octop|vir|radi|nucle|fung|cact|stimul)i$/i, /men$/i, /.tia$/i, /(m|l)ice$/i]; //similar to plural/singularize rules, but not the same + + var isSingular = [/(ax|test)is$/i, /(octop|vir|radi|nucle|fung|cact|stimul)us$/i, /(octop|vir)i$/i, /(rl)f$/i, /(alias|status)$/i, /(bu)s$/i, /(al|ad|at|er|et|ed|ad)o$/i, /(ti)um$/i, /(ti)a$/i, /sis$/i, /(?:(^f)fe|(lr)f)$/i, /hive$/i, /(^aeiouy|qu)y$/i, /(x|ch|ss|sh|z)$/i, /(matr|vert|ind|cort)(ix|ex)$/i, /(m|l)ouse$/i, /(m|l)ice$/i, /(antenn|formul|nebul|vertebr|vit)a$/i, /.sis$/i, /^(?!talis|.*hu)(.*)man$/i]; + var _rules = { + isSingular: isSingular, + isPlural: isPlural + }; + + var endS = /s$/; // double-check this term, if it is not plural, or singular. + // (this is a partial copy of ./tagger/fallbacks/plural) + // fallback plural if it ends in an 's'. + + var isPlural$1 = function isPlural(str) { + // isSingular suffix rules + if (_rules.isSingular.find(function (reg) { + return reg.test(str); + })) { + return false; + } // does it end in an s? + + + if (endS.test(str) === true) { + return true; + } // is it a plural like 'fungi'? + + + if (_rules.isPlural.find(function (reg) { + return reg.test(str); + })) { + return true; + } + + return null; + }; + + var isPlural_1 = isPlural$1; + + var exceptions = { + he: 'his', + she: 'hers', + they: 'theirs', + we: 'ours', + i: 'mine', + you: 'yours', + her: 'hers', + their: 'theirs', + our: 'ours', + my: 'mine', + your: 'yours' + }; // turn "David" to "David's" + + var toPossessive = function toPossessive(doc) { + var str = doc.text('text').trim(); // exceptions + + if (exceptions.hasOwnProperty(str)) { + doc.replaceWith(exceptions[str], true); + doc.tag('Possessive', 'toPossessive'); + return; + } // flanders' + + + if (/s$/.test(str)) { + str += "'"; + doc.replaceWith(str, true); + doc.tag('Possessive', 'toPossessive'); + return; + } //normal form: + + + str += "'s"; + doc.replaceWith(str, true); + doc.tag('Possessive', 'toPossessive'); + return; + }; + + var toPossessive_1 = toPossessive; + + // .nouns() supports some noun-phrase-ish groupings + // pull these apart, if necessary + var parse$1 = function parse(doc) { + var res = { + main: doc + }; //support 'mayor of chicago' as one noun-phrase + + if (doc.has('#Noun (of|by|for) .')) { + var m = doc.splitAfter('[#Noun+]', 0); + res.main = m.eq(0); + res.post = m.eq(1); + } + + return res; + }; + + var parse_1 = parse$1; + + var methods$6 = { + /** overload the original json with noun information */ + json: function json(options) { + var n = null; + + if (typeof options === 'number') { + n = options; + options = null; + } + + options = options || { + text: true, + normal: true, + trim: true, + terms: true + }; + var res = []; + this.forEach(function (doc) { + var json = doc.json(options)[0]; + json.article = getArticle(doc); + res.push(json); + }); + + if (n !== null) { + return res[n]; + } + + return res; + }, + + /** get all adjectives describing this noun*/ + adjectives: function adjectives() { + var list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+'); + list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')); + list = list.match('#Adjective'); + return list.sort('index'); + }, + isPlural: function isPlural() { + return this["if"]('#Plural'); //assume tagger has run? + }, + hasPlural: function hasPlural() { + return this.filter(function (d) { + return hasPlural_1(d); + }); + }, + toPlural: function toPlural(agree) { + var _this = this; + + var toPlural = this.world.transforms.toPlural; + this.forEach(function (doc) { + if (doc.has('#Plural') || hasPlural_1(doc) === false) { + return; + } // double-check it isn't an un-tagged plural + + + var main = parse_1(doc).main; + var str = main.text('reduced'); + + if (!main.has('#Singular') && isPlural_1(str) === true) { + return; + } + + str = toPlural(str, _this.world); + main.replace(str).tag('#Plural'); // 'an apple' -> 'apples' + + if (agree) { + var an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective'); + + if (an.found === true) { + an.remove(); + } + } + }); + return this; + }, + toSingular: function toSingular(agree) { + var _this2 = this; + + var toSingular = this.world.transforms.toSingular; + this.forEach(function (doc) { + if (doc.has('^#Singular+$') || hasPlural_1(doc) === false) { + return; + } // double-check it isn't an un-tagged plural + + + var main = parse_1(doc).main; + var str = main.text('reduced'); + + if (!main.has('#Plural') && isPlural_1(str) !== true) { + return; + } + + str = toSingular(str, _this2.world); + main.replace(str).tag('#Singular'); // add an article + + if (agree) { + // 'apples' -> 'an apple' + var start = doc; + var adj = doc.lookBefore('#Adjective'); + + if (adj.found) { + start = adj; + } + + var article = getArticle(start); + start.insertBefore(article); + } + }); + return this; + }, + toPossessive: function toPossessive() { + this.forEach(function (d) { + toPossessive_1(d); + }); + return this; + } + }; + var methods_1 = methods$6; + + var addMethod$5 = function addMethod(Doc) { + /** */ + var Nouns = + /*#__PURE__*/ + function (_Doc) { + _inherits(Nouns, _Doc); + + function Nouns() { + _classCallCheck(this, Nouns); + + return _possibleConstructorReturn(this, _getPrototypeOf(Nouns).apply(this, arguments)); + } + + return Nouns; + }(Doc); // add-in our methods + + + Object.assign(Nouns.prototype, methods_1); + + Doc.prototype.nouns = function (n) { + // don't split 'paris, france' + var keep = this.match('(#City && @hasComma) (#Region|#Country)'); // but split the other commas + + var m = this.not(keep).splitAfter('@hasComma'); // combine them back together + + m = m.concat(keep); + m = m.match('#Noun+ (of|by)? the? #Noun+?'); //nouns that we don't want in these results, for weird reasons + + m = m.not('#Pronoun'); + m = m.not('(there|these)'); + m = m.not('(#Month|#WeekDay)'); //allow Durations, Holidays + // //allow possessives like "spencer's", but not generic ones like, + + m = m.not('(my|our|your|their|her|his)'); + m = m.not('(of|for|by|the)$'); + + if (typeof n === 'number') { + m = m.get(n); + } + + return new Nouns(m.list, this, this.world); + }; + + return Doc; + }; + + var Nouns = addMethod$5; + + var open = /\(/; + var close = /\)/; + + var addMethod$6 = function addMethod(Doc) { + /** anything between (these things) */ + var Parentheses = + /*#__PURE__*/ + function (_Doc) { + _inherits(Parentheses, _Doc); + + function Parentheses() { + _classCallCheck(this, Parentheses); + + return _possibleConstructorReturn(this, _getPrototypeOf(Parentheses).apply(this, arguments)); + } + + _createClass(Parentheses, [{ + key: "unwrap", + + /** remove the parentheses characters */ + value: function unwrap() { + this.list.forEach(function (p) { + var first = p.terms(0); + first.pre = first.pre.replace(open, ''); + var last = p.lastTerm(); + last.post = last.post.replace(close, ''); + }); + return this; + } + }]); + + return Parentheses; + }(Doc); + + Doc.prototype.parentheses = function (n) { + var list = []; + this.list.forEach(function (p) { + var terms = p.terms(); //look for opening brackets + + for (var i = 0; i < terms.length; i += 1) { + var t = terms[i]; + + if (open.test(t.pre)) { + //look for the closing bracket.. + for (var o = i; o < terms.length; o += 1) { + if (close.test(terms[o].post)) { + var len = o - i + 1; + list.push(p.buildFrom(t.id, len)); + i = o; + break; + } + } + } + } + }); //support nth result + + if (typeof n === 'number') { + if (list[n]) { + list = [list[n]]; + } else { + list = []; + } + + return new Parentheses(list, this, this.world); + } + + return new Parentheses(list, this, this.world); + }; + + return Doc; + }; + + var Parentheses = addMethod$6; + + var addMethod$7 = function addMethod(Doc) { + /** */ + var Possessives = + /*#__PURE__*/ + function (_Doc) { + _inherits(Possessives, _Doc); + + function Possessives(list, from, world) { + var _this; + + _classCallCheck(this, Possessives); + + _this = _possibleConstructorReturn(this, _getPrototypeOf(Possessives).call(this, list, from, world)); + _this.contracted = null; + return _this; + } + /** turn didn't into 'did not' */ + + + _createClass(Possessives, [{ + key: "strip", + value: function strip() { + this.list.forEach(function (p) { + var terms = p.terms(); + terms.forEach(function (t) { + var str = t.text.replace(/'s$/, ''); + t.set(str || t.text); + }); + }); + return this; + } + }]); + + return Possessives; + }(Doc); //find contractable, expanded-contractions + // const findExpanded = r => { + // let remain = r.not('#Contraction') + // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)') + // m.concat(remain.match('(they|we|you|i) have')) + // m.concat(remain.match('i am')) + // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not')) + // return m + // } + + + Doc.prototype.possessives = function (n) { + //find currently-contracted + var found = this.match('#Noun+? #Possessive'); //todo: split consecutive contractions + + if (typeof n === 'number') { + found = found.get(n); + } + + return new Possessives(found.list, this, this.world); + }; + + return Doc; + }; + + var Possessives = addMethod$7; + + var pairs = { + "\"": "\"", + // 'StraightDoubleQuotes' + "\uFF02": "\uFF02", + // 'StraightDoubleQuotesWide' + "'": "'", + // 'StraightSingleQuotes' + "\u201C": "\u201D", + // 'CommaDoubleQuotes' + "\u2018": "\u2019", + // 'CommaSingleQuotes' + "\u201F": "\u201D", + // 'CurlyDoubleQuotesReversed' + "\u201B": "\u2019", + // 'CurlySingleQuotesReversed' + "\u201E": "\u201D", + // 'LowCurlyDoubleQuotes' + "\u2E42": "\u201D", + // 'LowCurlyDoubleQuotesReversed' + "\u201A": "\u2019", + // 'LowCurlySingleQuotes' + "\xAB": "\xBB", + // 'AngleDoubleQuotes' + "\u2039": "\u203A", + // 'AngleSingleQuotes' + // Prime 'non quotation' + "\u2035": "\u2032", + // 'PrimeSingleQuotes' + "\u2036": "\u2033", + // 'PrimeDoubleQuotes' + "\u2037": "\u2034", + // 'PrimeTripleQuotes' + // Prime 'quotation' variation + "\u301D": "\u301E", + // 'PrimeDoubleQuotes' + "`": "\xB4", + // 'PrimeSingleQuotes' + "\u301F": "\u301E" // 'LowPrimeDoubleQuotesReversed' + + }; + var hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')'); + + var addMethod$8 = function addMethod(Doc) { + /** "these things" */ + var Quotations = + /*#__PURE__*/ + function (_Doc) { + _inherits(Quotations, _Doc); + + function Quotations() { + _classCallCheck(this, Quotations); + + return _possibleConstructorReturn(this, _getPrototypeOf(Quotations).apply(this, arguments)); + } + + _createClass(Quotations, [{ + key: "unwrap", + + /** remove the quote characters */ + value: function unwrap() { + return this; + } + }]); + + return Quotations; + }(Doc); + + Doc.prototype.quotations = function (n) { + var list = []; + this.list.forEach(function (p) { + var terms = p.terms(); //look for opening quotes + + for (var i = 0; i < terms.length; i += 1) { + var t = terms[i]; + + if (hasOpen.test(t.pre)) { + var _char = (t.pre.match(hasOpen) || [])[0]; + var want = pairs[_char]; // if (!want) { + // console.warn('missing quote char ' + char) + // } + //look for the closing bracket.. + + for (var o = i; o < terms.length; o += 1) { + if (terms[o].post.indexOf(want) !== -1) { + var len = o - i + 1; + list.push(p.buildFrom(t.id, len)); + i = o; + break; + } + } + } + } + }); //support nth result + + if (typeof n === 'number') { + if (list[n]) { + list = [list[n]]; + } else { + list = []; + } + + return new Quotations(list, this, this.world); + } + + return new Quotations(list, this, this.world); + }; // alias + + + Doc.prototype.quotes = Doc.prototype.quotations; + return Doc; + }; + + var Quotations = addMethod$8; + + // walked => walk - turn a verb into it's root form + var toInfinitive = function toInfinitive(parsed, world) { + var verb = parsed.verb; //1. if it's already infinitive + + var str = verb.text('normal'); + + if (verb.has('#Infinitive')) { + return str; + } // 2. world transform does the heavy-lifting + + + var tense = null; + + if (verb.has('#PastTense')) { + tense = 'PastTense'; + } else if (verb.has('#Gerund')) { + tense = 'Gerund'; + } else if (verb.has('#PresentTense')) { + tense = 'PresentTense'; + } else if (verb.has('#Participle')) { + tense = 'Participle'; + } else if (verb.has('#Actor')) { + tense = 'Actor'; + } + + return world.transforms.toInfinitive(str, world, tense); + }; + + var toInfinitive_1 = toInfinitive; + + // spencer walks -> singular + // we walk -> plural + // the most-recent noun-phrase, before this verb. + var findNoun = function findNoun(vb) { + var noun = vb.lookBehind('#Noun+').last(); + return noun; + }; //sometimes you can tell if a verb is plural/singular, just by the verb + // i am / we were + // othertimes you need its subject 'we walk' vs 'i walk' + + + var isPlural$2 = function isPlural(parsed) { + var vb = parsed.verb; + + if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) { + return true; + } + + if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) { + return false; + } //consider its prior noun + + + var noun = findNoun(vb); + + if (noun.has('(we|they|you)')) { + return true; + } + + if (noun.has('#Plural')) { + return true; + } + + if (noun.has('#Singular')) { + return false; + } + + return null; + }; + + var isPlural_1$1 = isPlural$2; + + // #Copula : is -> 'is not' + // #PastTense : walked -> did not walk + // #PresentTense : walks -> does not walk + // #Gerund : walking: -> not walking + // #Infinitive : walk -> do not walk + + var toNegative = function toNegative(parsed, world) { + var vb = parsed.verb; // if it's already negative... + + if (parsed.negative.found) { + return; + } // would walk -> would not walk + + + if (parsed.auxiliary.found) { + parsed.auxiliary.eq(0).append('not'); + return; + } // is walking -> is not walking + + + if (vb.has('(#Copula|will|has|had|do)')) { + vb.append('not'); + return; + } // walked -> did not walk + + + if (vb.has('#PastTense')) { + var inf = toInfinitive_1(parsed, world); + vb.replaceWith(inf, true); + vb.prepend('did not'); + return; + } // walks -> does not walk + + + if (vb.has('#PresentTense')) { + var _inf = toInfinitive_1(parsed, world); + + vb.replaceWith(_inf, true); + + if (isPlural_1$1(parsed)) { + vb.prepend('do not'); + } else { + vb.prepend('does not'); + } + + return; + } //walking -> not walking + + + if (vb.has('#Gerund')) { + var _inf2 = toInfinitive_1(parsed, world); + + vb.replaceWith(_inf2, true); + vb.prepend('not'); + return; + } //fallback 1: walk -> does not walk + + + if (isPlural_1$1(parsed)) { + vb.prepend('does not'); + return; + } //fallback 2: walk -> do not walk + + + vb.prepend('do not'); + return; + }; + + var toNegative_1 = toNegative; + + // turn 'would not really walk up' into parts + var parseVerb = function parseVerb(vb) { + var parsed = { + adverb: vb.match('#Adverb+'), + // 'really' + negative: vb.match('#Negative'), + // 'not' + auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), + // 'will' of 'will go' + particle: vb.match('#Particle'), + // 'up' of 'pull up' + verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)') + }; // fallback, if no verb found + + if (!parsed.verb.found) { + // blank-everything + Object.keys(parsed).forEach(function (k) { + parsed[k] = parsed[k].not('.'); + }); // it's all the verb + + parsed.verb = vb; + return parsed; + } // + + + if (parsed.adverb && parsed.adverb.found) { + var match = parsed.adverb.text('reduced') + '$'; + + if (vb.has(match)) { + parsed.adverbAfter = true; + } + } + + return parsed; + }; + + var parse$2 = parseVerb; + + /** too many special cases for is/was/will be*/ + + var toBe = function toBe(parsed) { + var isI = false; + var plural = isPlural_1$1(parsed); + var isNegative = parsed.negative.found; //account for 'i is' -> 'i am' irregular + // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) { + // isI = true; + // } + // 'i look', not 'i looks' + + if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) { + isI = true; + } + + var obj = { + PastTense: 'was', + PresentTense: 'is', + FutureTense: 'will be', + Infinitive: 'is', + Gerund: 'being', + Actor: '', + PerfectTense: 'been', + Pluperfect: 'been' + }; //"i is" -> "i am" + + if (isI === true) { + obj.PresentTense = 'am'; + obj.Infinitive = 'am'; + } + + if (plural) { + obj.PastTense = 'were'; + obj.PresentTense = 'are'; + obj.Infinitive = 'are'; + } + + if (isNegative) { + obj.PastTense += ' not'; + obj.PresentTense += ' not'; + obj.FutureTense = 'will not be'; + obj.Infinitive += ' not'; + obj.PerfectTense = 'not ' + obj.PerfectTense; + obj.Pluperfect = 'not ' + obj.Pluperfect; + obj.Gerund = 'not ' + obj.Gerund; + } + + return obj; + }; + + var toBe_1 = toBe; + + var conjugate = function conjugate(parsed, world) { + var verb = parsed.verb; //special handling of 'is', 'will be', etc. + + if (verb.has('#Copula') || verb.out('normal') === 'be' && parsed.auxiliary.has('will')) { + return toBe_1(parsed); + } + + var hasHyphen = parsed.verb.termList(0).hasHyphen(); + var infinitive = toInfinitive_1(parsed, world); + + if (!infinitive) { + return {}; + } + + var forms = world.transforms.conjugate(infinitive, world); + forms.Infinitive = infinitive; // add particle to phrasal verbs ('fall over') + + if (parsed.particle.found) { + var particle = parsed.particle.text(); + var space = hasHyphen === true ? '-' : ' '; + Object.keys(forms).forEach(function (k) { + return forms[k] += space + particle; + }); + } //put the adverb at the end? + + + if (parsed.adverb.found) { + var adverb = parsed.adverb.text(); + + var _space = hasHyphen === true ? '-' : ' '; + + if (parsed.adverbAfter === true) { + Object.keys(forms).forEach(function (k) { + return forms[k] += _space + adverb; + }); + } else { + Object.keys(forms).forEach(function (k) { + return forms[k] = adverb + _space + forms[k]; + }); + } + } //apply negative + + + var isNegative = parsed.negative.found; + + if (isNegative) { + forms.PastTense = 'did not ' + forms.Infinitive; + forms.PresentTense = 'does not ' + forms.Infinitive; + forms.Gerund = 'not ' + forms.Gerund; + } //future Tense is pretty straightforward + + + if (!forms.FutureTense) { + if (isNegative) { + forms.FutureTense = 'will not ' + forms.Infinitive; + } else { + forms.FutureTense = 'will ' + forms.Infinitive; + } + } + + if (isNegative) { + forms.Infinitive = 'not ' + forms.Infinitive; + } + + return forms; + }; + + var conjugate_1 = conjugate; + + var methods$7 = { + /** overload the original json with verb information */ + json: function json(options) { + var _this = this; + + var n = null; + + if (typeof options === 'number') { + n = options; + options = null; + } + + options = options || { + text: true, + normal: true, + trim: true, + terms: true + }; + var res = []; + this.forEach(function (p) { + var json = p.json(options)[0]; + var parsed = parse$2(p); + json.parts = {}; + Object.keys(parsed).forEach(function (k) { + if (parsed[k] && parsed[k].isA === 'Doc') { + json.parts[k] = parsed[k].text('normal'); + } else { + json.parts[k] = parsed[k]; + } + }); + json.isNegative = p.has('#Negative'); + json.conjugations = conjugate_1(parsed, _this.world); + res.push(json); + }); + + if (n !== null) { + return res[n]; + } + + return res; + }, + + /** grab the adverbs describing these verbs */ + adverbs: function adverbs() { + var list = []; // look at internal adverbs + + this.forEach(function (vb) { + var advb = parse$2(vb).adverb; + + if (advb.found) { + list = list.concat(advb.list); + } + }); // look for leading adverbs + + var m = this.lookBehind('#Adverb+$'); + + if (m.found) { + list = m.list.concat(list); + } // look for trailing adverbs + + + m = this.lookAhead('^#Adverb+'); + + if (m.found) { + list = list.concat(m.list); + } + + return this.buildFrom(list); + }, + + /**return verbs like 'we walk' and not 'spencer walks' */ + isPlural: function isPlural() { + var _this2 = this; + + var list = []; + this.forEach(function (vb) { + var parsed = parse$2(vb); + + if (isPlural_1$1(parsed, _this2.world) === true) { + list.push(vb.list[0]); + } + }); + return this.buildFrom(list); + }, + + /** return verbs like 'spencer walks' and not 'we walk' */ + isSingular: function isSingular() { + var _this3 = this; + + var list = []; + this.forEach(function (vb) { + var parsed = parse$2(vb); + + if (isPlural_1$1(parsed, _this3.world) === false) { + list.push(vb.list[0]); + } + }); + return this.buildFrom(list); + }, + + /** */ + conjugate: function conjugate() { + var _this4 = this; + + var result = []; + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var forms = conjugate_1(parsed, _this4.world); + + result.push(forms); + }); + return result; + }, + + /** */ + toPastTense: function toPastTense() { + var _this5 = this; + + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var str = conjugate_1(parsed, _this5.world).PastTense; + + if (str) { + vb.replaceWith(str, false); // vb.tag('PastTense') + } + }); + return this; + }, + + /** */ + toPresentTense: function toPresentTense() { + var _this6 = this; + + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var obj = conjugate_1(parsed, _this6.world); + + var str = obj.PresentTense; // 'i look', not 'i looks' + + if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) { + str = obj.Infinitive; + } + + if (str) { + vb.replaceWith(str, false); + vb.tag('PresentTense'); + } + }); + return this; + }, + + /** */ + toFutureTense: function toFutureTense() { + var _this7 = this; + + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var str = conjugate_1(parsed, _this7.world).FutureTense; + + if (str) { + vb.replaceWith(str, false); + vb.tag('FutureTense'); + } + }); + return this; + }, + + /** */ + toInfinitive: function toInfinitive() { + var _this8 = this; + + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var str = conjugate_1(parsed, _this8.world).Infinitive; + + if (str) { + vb.replaceWith(str, false); + vb.tag('Infinitive'); + } + }); + return this; + }, + + /** */ + toGerund: function toGerund() { + var _this9 = this; + + this.forEach(function (vb) { + var parsed = parse$2(vb); + + var str = conjugate_1(parsed, _this9.world).Gerund; + + if (str) { + vb.replaceWith(str, false); + vb.tag('Gerund'); + } + }); + return this; + }, + + /** return only verbs with 'not'*/ + isNegative: function isNegative() { + return this["if"]('#Negative'); + }, + + /** return only verbs without 'not'*/ + isPositive: function isPositive() { + return this.ifNo('#Negative'); + }, + + /** add a 'not' to these verbs */ + toNegative: function toNegative() { + var _this10 = this; + + this.list.forEach(function (p) { + var doc = _this10.buildFrom([p]); + + var parsed = parse$2(doc); + + toNegative_1(parsed, doc.world); + }); + return this; + }, + + /** remove 'not' from these verbs */ + toPositive: function toPositive() { + var m = this.match('do not #Verb'); + + if (m.found) { + m.remove('do not'); + } + + return this.remove('#Negative'); + } + }; + + var addMethod$9 = function addMethod(Doc) { + /** */ + var Verbs = + /*#__PURE__*/ + function (_Doc) { + _inherits(Verbs, _Doc); + + function Verbs() { + _classCallCheck(this, Verbs); + + return _possibleConstructorReturn(this, _getPrototypeOf(Verbs).apply(this, arguments)); + } + + return Verbs; + }(Doc); // add-in our methods + + + Object.assign(Verbs.prototype, methods$7); // aliases + + Verbs.prototype.negate = Verbs.prototype.toNegative; + + Doc.prototype.verbs = function (n) { + var match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+'); // try to ignore leading and trailing adverbs + + match = match.not('^#Adverb+'); + match = match.not('#Adverb+$'); // handle commas: + // don't split 'really, really' + + var keep = match.match('(#Adverb && @hasComma) #Adverb'); // // but split the other commas + + var m = match.not(keep).splitAfter('@hasComma'); // // combine them back together + + m = m.concat(keep); + m.sort('index'); //handle slashes? + //ensure there's actually a verb + + m = m["if"]('#Verb'); //grab (n)th result + + if (typeof n === 'number') { + m = m.get(n); + } + + var vb = new Verbs(m.list, this, this.world); + return vb; + }; + + return Doc; + }; + + var Verbs = addMethod$9; + + var addMethod$a = function addMethod(Doc) { + /** */ + var People = + /*#__PURE__*/ + function (_Doc) { + _inherits(People, _Doc); + + function People() { + _classCallCheck(this, People); + + return _possibleConstructorReturn(this, _getPrototypeOf(People).apply(this, arguments)); + } + + return People; + }(Doc); + + Doc.prototype.people = function (n) { + var match = this.splitAfter('@hasComma'); + match = match.match('#Person+'); //grab (n)th result + + if (typeof n === 'number') { + match = match.get(n); + } + + return new People(match.list, this, this.world); + }; + + return Doc; + }; + + var People = addMethod$a; + + var subclass = [Abbreviations, Acronyms, Clauses, Contractions, Lists, Nouns, Parentheses, Possessives, Quotations, Verbs, People]; + + var extend = function extend(Doc) { + // add basic methods + Object.keys(_simple).forEach(function (k) { + return Doc.prototype[k] = _simple[k]; + }); // add subclassed methods + + subclass.forEach(function (addFn) { + return addFn(Doc); + }); + return Doc; + }; + + var Subset = extend; + + var methods$8 = { + misc: methods$4, + selections: _simple + }; + /** a parsed text object */ + + var Doc = + /*#__PURE__*/ + function () { + function Doc(list, from, world) { + var _this = this; + + _classCallCheck(this, Doc); + + this.list = list; //quiet these properties in console.logs + + Object.defineProperty(this, 'from', { + enumerable: false, + value: from, + writable: true + }); //borrow some missing data from parent + + if (world === undefined && from !== undefined) { + world = from.world; + } //'world' getter + + + Object.defineProperty(this, 'world', { + enumerable: false, + value: world, + writable: true + }); //fast-scans for our data + + Object.defineProperty(this, '_cache', { + enumerable: false, + writable: true, + value: {} + }); //'found' getter + + Object.defineProperty(this, 'found', { + get: function get() { + return _this.list.length > 0; + } + }); //'length' getter + + Object.defineProperty(this, 'length', { + get: function get() { + return _this.list.length; + } + }); // this is way easier than .constructor.name... + + Object.defineProperty(this, 'isA', { + get: function get() { + return 'Doc'; + } + }); + } + /** run part-of-speech tagger on all results*/ + + + _createClass(Doc, [{ + key: "tagger", + value: function tagger() { + return tiny(this); + } + /** pool is stored on phrase objects */ + + }, { + key: "pool", + value: function pool() { + if (this.list.length > 0) { + return this.list[0].pool; + } + + return this.all().list[0].pool; + } + }]); + + return Doc; + }(); + /** create a new Document object */ + + + Doc.prototype.buildFrom = function (list) { + list = list.map(function (p) { + return p.clone(true); + }); // new this.constructor() + + var doc = new Doc(list, this, this.world); + return doc; + }; + /** create a new Document from plaintext. */ + + + Doc.prototype.fromText = function (str) { + var list = _01Tokenizer(str, this.world, this.pool()); + return this.buildFrom(list); + }; + + Object.assign(Doc.prototype, methods$8.misc); + Object.assign(Doc.prototype, methods$8.selections); //add sub-classes + + Subset(Doc); //aliases + + var aliases$1 = { + untag: 'unTag', + and: 'match', + notIf: 'ifNo', + only: 'if', + onlyIf: 'if' + }; + Object.keys(aliases$1).forEach(function (k) { + return Doc.prototype[k] = Doc.prototype[aliases$1[k]]; + }); + var Doc_1 = Doc; + + function instance(worldInstance) { + //blast-out our word-lists, just once + var world = worldInstance; + /** parse and tag text into a compromise object */ + + var nlp = function nlp() { + var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var lexicon = arguments.length > 1 ? arguments[1] : undefined; + + if (lexicon) { + world.addWords(lexicon); + } + + var list = _01Tokenizer(text, world); + var doc = new Doc_1(list, null, world); + doc.tagger(); + return doc; + }; + /** parse text into a compromise object, without running POS-tagging */ + + + nlp.tokenize = function () { + var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var lexicon = arguments.length > 1 ? arguments[1] : undefined; + var w = world; + + if (lexicon) { + w = w.clone(); + w.words = {}; + w.addWords(lexicon); + } + + var list = _01Tokenizer(text, w); + var doc = new Doc_1(list, null, w); + + if (lexicon) { + tiny(doc); + } + + return doc; + }; + /** mix in a compromise-plugin */ + + + nlp.extend = function (fn) { + fn(Doc_1, world, this, Phrase_1, Term_1, Pool_1); + return this; + }; + /** create a compromise Doc object from .json() results */ + + + nlp.fromJSON = function (json) { + var list = fromJSON_1(json, world); + return new Doc_1(list, null, world); + }; + /** make a deep-copy of the library state */ + + + nlp.clone = function () { + return instance(world.clone()); + }; + /** log our decision-making for debugging */ + + + nlp.verbose = function () { + var bool = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + world.verbose(bool); + return this; + }; + /** grab currently-used World object */ + + + nlp.world = function () { + return world; + }; + /** current version of the library */ + + + nlp.version = _version; // alias + + nlp["import"] = nlp.load; + return nlp; + } + + var src = instance(new World_1()); + + return src; + +}))); diff --git a/changelog.md b/changelog.md index 2ecf4dfaa..ba7d4c943 100644 --- a/changelog.md +++ b/changelog.md @@ -17,8 +17,11 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - add `.world()` method to constructor - add more abbreviations - fix regex backtracking #739 -- remove conjugation and inflection data from tokenize build -- remove sourcemaps from build +- tokenize build: +- - remove conjugation and inflection data +- - remove conjugation and inflection functions +- remove sourcemap from build process (too big) +- improvements to `.numbers().units()` #### 13.1.1 diff --git a/plugins/numbers/src/index.js b/plugins/numbers/src/index.js index a4a89048d..96474f8b2 100644 --- a/plugins/numbers/src/index.js +++ b/plugins/numbers/src/index.js @@ -4,7 +4,7 @@ const tagger = require('./tagger') const tags = require('./tags') /** adds .numbers() method */ -const plugin = function(Doc, world) { +const plugin = function (Doc, world) { // add tags to our tagset world.addTags(tags) @@ -21,24 +21,24 @@ const plugin = function(Doc, world) { const docMethods = { /** find all numbers and values */ - numbers: function(n) { + numbers: function (n) { let m = findNumbers(this, n) return new Numbers(m.list, this, this.world) }, /** numbers that are percentages*/ - percentages: function(n) { + percentages: function (n) { let m = findNumbers(this, n) m = m.if('/%$/') return new Numbers(m.list, this, this.world) }, /** number + currency pair */ - money: function(n) { - let nums = findNumbers(this, n) - let m = nums.if('#Money') //$5.75 - m = m.concat(nums.hasAfter('#Currency')) //'5 dollars' + money: function (n) { + // let nums = findNumbers(this, n) + let m = this.match('#Money+ #Currency?') + // m = m.concat(nums.hasAfter('#Currency')) //'5 dollars' return new Money(m.list, this, this.world) }, - fractions: function(n) { + fractions: function (n) { let nums = findNumbers(this, n) let m = nums.if('#Fraction') //2/3 return new Fraction(m.list, this, this.world) diff --git a/plugins/numbers/src/methods.js b/plugins/numbers/src/methods.js index 10eea1b75..17346e81b 100644 --- a/plugins/numbers/src/methods.js +++ b/plugins/numbers/src/methods.js @@ -5,7 +5,7 @@ const toNumber = require('./convert/toNumber') let methods = { /** overloaded json method with additional number information */ - json: function(options) { + json: function (options) { let n = null if (typeof options === 'number') { n = options @@ -13,7 +13,7 @@ let methods = { } options = options || { text: true, normal: true, trim: true, terms: true } let res = [] - this.forEach(doc => { + this.forEach((doc) => { let json = doc.json(options)[0] let obj = parseNumber(doc) json.prefix = obj.prefix @@ -31,20 +31,23 @@ let methods = { return res }, /** two of what? */ - units: function() { - return this.lookAhead('(#Unit|#Noun)') + units: function () { + let m = this.lookAhead('(#Unit|#Noun)+') + m = m.splitAfter('@hasComma').first() + m = m.not('#Pronoun') + return m.first() }, /** return only ordinal numbers */ - isOrdinal: function() { + isOrdinal: function () { return this.if('#Ordinal') }, /** return only cardinal numbers*/ - isCardinal: function() { + isCardinal: function () { return this.if('#Cardinal') }, /** convert to numeric form like '8' or '8th' */ - toNumber: function() { - this.forEach(val => { + toNumber: function () { + this.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { return @@ -56,8 +59,8 @@ let methods = { return this }, /** add commas, or nicer formatting for numbers */ - toLocaleString: function() { - this.forEach(val => { + toLocaleString: function () { + this.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { return @@ -69,8 +72,8 @@ let methods = { return this }, /** convert to text form - like 'eight' or 'eigth'*/ - toText: function() { - this.forEach(val => { + toText: function () { + this.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { return @@ -82,9 +85,9 @@ let methods = { return this }, /** convert to cardinal form, like 'eight', or '8' */ - toCardinal: function(agree) { + toCardinal: function (agree) { let m = this.if('#Ordinal') - m.forEach(val => { + m.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { return @@ -98,9 +101,9 @@ let methods = { return this }, /** convert to ordinal form, like 'eighth', or '8th' */ - toOrdinal: function() { + toOrdinal: function () { let m = this.if('#Cardinal') - m.forEach(val => { + m.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { return @@ -117,42 +120,42 @@ let methods = { return this }, /** return only numbers that are == n */ - isEqual: function(n) { - return this.filter(val => { + isEqual: function (n) { + return this.filter((val) => { let num = parseNumber(val).num return num === n }) }, /** return only numbers that are > n*/ - greaterThan: function(n) { - return this.filter(val => { + greaterThan: function (n) { + return this.filter((val) => { let num = parseNumber(val).num return num > n }) }, /** return only numbers that are < n*/ - lessThan: function(n) { - return this.filter(val => { + lessThan: function (n) { + return this.filter((val) => { let num = parseNumber(val).num return num < n }) }, /** return only numbers > min and < max */ - between: function(min, max) { - return this.filter(val => { + between: function (min, max) { + return this.filter((val) => { let num = parseNumber(val).num return num > min && num < max }) }, /** set these number to n */ - set: function(n, agree) { + set: function (n, agree) { if (n === undefined) { return this // don't bother } if (typeof n === 'string') { n = toNumber(n) } - this.forEach(val => { + this.forEach((val) => { let obj = parseNumber(val) obj.num = n if (obj.num === null) { @@ -165,14 +168,14 @@ let methods = { }) return this }, - add: function(n, agree) { + add: function (n, agree) { if (!n) { return this // don't bother } if (typeof n === 'string') { n = toNumber(n) } - this.forEach(val => { + this.forEach((val) => { let obj = parseNumber(val) if (obj.num === null) { @@ -187,16 +190,16 @@ let methods = { return this }, /** decrease each number by n*/ - subtract: function(n, agree) { + subtract: function (n, agree) { return this.add(n * -1, agree) }, /** increase each number by 1 */ - increment: function(agree) { + increment: function (agree) { this.add(1, agree) return this }, /** decrease each number by 1 */ - decrement: function(agree) { + decrement: function (agree) { this.add(-1, agree) return this }, @@ -213,7 +216,7 @@ let methods = { // }, /** return things like CCXX*/ - romanNumerals: function(n) { + romanNumerals: function (n) { let m = this.match('#RomanNumeral').numbers() if (typeof n === 'number') { m = m.get(n) @@ -222,15 +225,16 @@ let methods = { }, /** return things like $4.50*/ - money: function(n) { - let m = this.splitOn('@hasComma') - m = m.match('#Money+ #Currency?') - m = m.numbers() - if (typeof n === 'number') { - m = m.get(n) - } - return m - }, + // money: function (n) { + // console.log('hello') + // let m = this.splitOn('@hasComma') + // m = m.match('#Money+ #Currency?') + // // m.debug() + // if (typeof n === 'number') { + // m = m.get(n) + // } + // return m + // }, } // aliases methods.toNice = methods.toLocaleString diff --git a/scratch.js b/scratch.js index 3ad86dd42..5f073fd6d 100644 --- a/scratch.js +++ b/scratch.js @@ -1,7 +1,7 @@ const nlp = require('./src/index') -nlp.verbose(true) +// nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') -// nlp.extend(require('./plugins/numbers/src')) +nlp.extend(require('./plugins/numbers/src')) // nlp.extend(require('./plugins/dates/src')) /* @@ -17,6 +17,9 @@ nlp.verbose(true) `rhythm and blues singer-songwriters` */ -let doc = nlp('based in Creston British Columbia') -doc.nouns().toSingular() -doc.debug() +// let doc = nlp('will go foobar') +// doc.replace('will', "before i'm") +// console.log(doc.text()) + +let doc = nlp('i paid 5 USD for the thing, and got $2.50 back.') +let m = doc.numbers().debug() From 81c19a88ef6f6ffb1a59f9fce68f9fb04233cefe Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Wed, 22 Apr 2020 10:45:39 -0400 Subject: [PATCH 17/24] fix issues with money and units, tests passing --- plugins/numbers/src/methods.js | 26 ++------------------------ plugins/numbers/src/tagger.js | 4 ++-- plugins/numbers/tests/money.test.js | 24 ++++++++++++------------ scratch.js | 9 +++------ 4 files changed, 19 insertions(+), 44 deletions(-) diff --git a/plugins/numbers/src/methods.js b/plugins/numbers/src/methods.js index 17346e81b..03d0b6cd6 100644 --- a/plugins/numbers/src/methods.js +++ b/plugins/numbers/src/methods.js @@ -162,6 +162,7 @@ let methods = { return } let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal')) + val = val.not('#Currency') val.replaceWith(str, true) // handle plural/singular unit agreeUnits(agree, val, obj) @@ -183,6 +184,7 @@ let methods = { } obj.num += n let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal')) + val = val.not('#Currency') val.replaceWith(str, true) // handle plural/singular unit agreeUnits(agree, val, obj) @@ -203,18 +205,6 @@ let methods = { this.add(-1, agree) return this }, - - /// ---- - - // /** return things like 1/3rd */ - // fractions: function(n) { - // let m = this.match('#Fraction') - // if (typeof n === 'number') { - // m = m.get(n) - // } - // return m - // }, - /** return things like CCXX*/ romanNumerals: function (n) { let m = this.match('#RomanNumeral').numbers() @@ -223,18 +213,6 @@ let methods = { } return m }, - - /** return things like $4.50*/ - // money: function (n) { - // console.log('hello') - // let m = this.splitOn('@hasComma') - // m = m.match('#Money+ #Currency?') - // // m.debug() - // if (typeof n === 'number') { - // m = m.get(n) - // } - // return m - // }, } // aliases methods.toNice = methods.toLocaleString diff --git a/plugins/numbers/src/tagger.js b/plugins/numbers/src/tagger.js index ebb40053e..8650d7286 100644 --- a/plugins/numbers/src/tagger.js +++ b/plugins/numbers/src/tagger.js @@ -2,7 +2,7 @@ const multiples = '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)' // improved tagging for numbers -const tagger = function(doc) { +const tagger = function (doc) { doc.match(multiples).tag('#Multiple') // in the 400s doc.match('the [/[0-9]+s$/]').tag('#Plural') @@ -12,7 +12,7 @@ const tagger = function(doc) { doc.match('#Value and a (half|quarter)').tag('Value', 'value-and-a-half') //one hundred and seven dollars doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money') - + // doc.debug() // $5.032 is invalid money doc .match('#Money') diff --git a/plugins/numbers/tests/money.test.js b/plugins/numbers/tests/money.test.js index a7740be15..6e9cbd218 100644 --- a/plugins/numbers/tests/money.test.js +++ b/plugins/numbers/tests/money.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('money tests', function(t) { +test('money tests', function (t) { let doc = nlp('i paid 5 USD for the thing, and got $2.50 back.') let m = doc.money() t.equal(m.length, 2, 'both money forms') @@ -16,31 +16,31 @@ test('money tests', function(t) { t.end() }) -test('money-basic:', function(t) { +test('money-basic:', function (t) { let r = nlp('it is $70.23') - let m = r.match('#Money') + let m = r.money() t.equal(m.out('normal'), '$70.23', 'match-$70.23') r = nlp('it is $703') - m = r.match('#Money+') + m = r.money() t.equal(m.out('normal'), '$703', 'match-$703') r = nlp('it is five euros') - m = r.match('#Money+') + m = r.money() t.equal(m.out('normal'), 'five euros', 'match-five-euros') r = nlp('i said five times, you should pay 12 dollars') - m = r.match('#Money+') + m = r.money() t.equal(m.out('normal'), '12 dollars', 'match-12 dollars') - r = nlp('you should pay sixty five dollars and four cents USD') - m = r.match('#Money+') - t.equal(m.out('normal'), 'sixty five dollars and four cents usd', 'match-long-usd') + // r = nlp('you should pay sixty five dollars and four cents USD') + // m = r.money() + // t.equal(m.out('normal'), 'sixty five dollars and four cents usd', 'match-long-usd') t.end() }) -test('money-transform:', function(t) { +test('money-transform:', function (t) { let doc = nlp('i paid $5.32 for a pizza slice') doc.money().add(1) t.equal(doc.text(), 'i paid $6.32 for a pizza slice', 'money-add-one') @@ -51,7 +51,7 @@ test('money-transform:', function(t) { t.end() }) -test('money-has:', function(t) { +test('money-has:', function (t) { let tests = [ ['$7', true], ['$7.0', true], @@ -70,7 +70,7 @@ test('money-has:', function(t) { ['sixty pence', true], ['sixty USD', true], ] - tests.forEach(function(a) { + tests.forEach(function (a) { let r = nlp(a[0]) let m = r.match('#Money') t.equal(m.found, a[1], "money-has: '" + a[0] + "'") diff --git a/scratch.js b/scratch.js index 5f073fd6d..bce3b21bb 100644 --- a/scratch.js +++ b/scratch.js @@ -17,9 +17,6 @@ nlp.extend(require('./plugins/numbers/src')) `rhythm and blues singer-songwriters` */ -// let doc = nlp('will go foobar') -// doc.replace('will', "before i'm") -// console.log(doc.text()) - -let doc = nlp('i paid 5 USD for the thing, and got $2.50 back.') -let m = doc.numbers().debug() +let doc = nlp('i paid fifty eight dollars') +doc.money().set(1) +doc.debug() From b627b38a1296507a0d86b1c59ebd1af4083b9e5b Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:07:40 -0400 Subject: [PATCH 18/24] fix for #744 --- hmm.md | 245 --------------------------- package.json | 3 +- scratch.js | 34 ++-- src/Doc/methods/insert/01-replace.js | 5 +- tests/misc.test.js | 23 ++- 5 files changed, 40 insertions(+), 270 deletions(-) delete mode 100644 hmm.md diff --git a/hmm.md b/hmm.md deleted file mode 100644 index e37b5015d..000000000 --- a/hmm.md +++ /dev/null @@ -1,245 +0,0 @@ -### Unit/Currency - -- `5 km` -- `5 k/s` -- `5 books` -- `5 euros` - ---- - -```js -//greedy match issue -nlp(`wayne's world, party time`) - .match('#Noun+? wayne') - .debug() - -nlp('Toronto Ontario foo') - .match('(him|her|it|#Person|#Place|#Organization)+ .') - .debug() -``` - -dangling child replace.... - -```js -let doc = nlp("springfield, springfield, it's a hell of a town.") -// keep a 'dangling' child document -let a = doc.match('a hell of a town') -// transform the parent document -doc.replace('hell of a', 'reasonable') -//dangling document is updated? -return a.text() -``` - -empty split() parent - -```js -let doc = nlp(`i have two questions for Homer - 'Why lie?' and 'Lies, why?'`) -doc - .quotations() - .split() - .out('array') -doc.clauses().split() -``` - -ngram collisions - -```js -let doc = nlp('he fished and caught two fish') -doc.normalize('heavy') -console.log(doc.ngram()) -``` - -syllables issues - -```js -let doc = nlp(`Andreas Johnsson, Auston Matthews, and Zach Hyman.`) -let names = doc.clauses().split() -let json = names.syllables() -``` - -possessive, sentence period - -```js -nlp(`Wayne's World, party-time, excellent!! `).text('reduced') -nlp(`Wayne's World, party-time, excellent!! `).text('root') -``` - -```js -var doc = nlp('we get it, you vape.') -doc.verbs().toNegative() -console.log(doc.text()) -``` - -```js -let nlpA = nlp.clone() -nlp.extend(require('compromise-dates')) -return { - before: nlpA('quarter to nine').json(), - after: nlp('quarter to nine').json(), -} -``` - -```js -console.log(doc.normalize('heavy').text()) -``` - -```js -let doc = nlp('I’m lookin’ for Amanda').debug() -``` - -did/would contractions - -```js -let doc = nlp(`what’d be good`).debug() -``` - -text-replace - -```js -let doc = nlp('i worked at the F.B.I') -doc = doc.match('(#Acronym|#Abbreviation)').replaceWith(d => { - return d -}) -doc.debug() -``` - -### Jan 5 - -```js -nlp(' we like Roy! we like Roy!! ') - .trim() - .text() -``` - -```js -nlp(`why can't i have no kids and three money?`) - .contractions() - .expand() - .text() -``` - -```js -nlp('Garth, I’m going to be frank.') - .verbs() - .toFutureTense() - .all() - .text() - -nlp('WE’RE NOT WORTHY! WE’RE NOT WORTHY!') - .verbs() - .toFutureTense() - .all() - .text() - -nlp('All my life I’ve had one dream, to accomplish my many goals.') - .verbs() - .toGerund() - .all() - .text() - -nlp(`powerful like a gorilla, yet soft and yielding like a nerf ball`) - .nouns() - .toPlural() - .all() - .text() - -nlp(`I'm not going to jail for you, or ANYBODY.`) - .nouns() - .toPlural() - .all() - .text() - -nlp(`hey pal, did you get a load of the nerd?`) - .nouns() - .toPlural() - .all() - .text() -``` - -### Jan 15 - -match cached numbers? - -```js -nlp('four').match('4') -``` - -### Jan 21 - -```js -let doc = nlp('pack a lunch for sam sunday morning') -``` - -### Jan 23 - -```js -let arr = [ - // *explicit-dates**, - // `march 2nd`, - // `2 march`, - // `tues march 2`, - `march the second`, - // `on the 2nd`, - // // *numerical-dates**, - // `1999/03/02`, - // `1999-03-02`, - // `03-02-1999`, - // `03/02`, - // `2015.08.13`, - // // *named-dates**, - // `today`, - // `easter`, - // `q1`, - // `tomorrow`, - // // *time:**, - // `2pm`, - // `2:12pm`, - // `2:12`, - // `02:12:00`, - // `2 oclock`, - // `before 1`, - // `noon`, - // `at night`, - // `in the morning`, - // `tomorrow evening`, - // // *timezone:**, - // `eastern time`, - // `est`, - // `peru time`, - // `GMT+9`, - // // *relative duration**, - // `this march`, - // `this week`, - // `this sunday`, - // `next april`, - // `this past year`, - // `second week of march`, - // `last weekend of march`, - // `last spring`, - // `the saturday after next`, - // // *punt**, - // `two days after tomorrow`, - // `in seven weeks`, - // `2 weeks from now`, - // `2 weeks after`, - // `2 years 4 months 5 days ago`, - // `a week friday`, - // `a week and a half before`, - // `on the 1st`, - // // *start/end**, - // `end of the week`, - // `start of next year`, - // `start of next year`, - // `middle of q2 last year`, -] - -// let json = doc.dates({}).json() -// console.log(json) -``` - -### lookup duplicates - -```js -let doc = nlp('spencer kelly is working here') -let res = doc.lookup(['spencer kelly', 'spencer']) -``` diff --git a/package.json b/package.json index 07afd80a4..2ab761f73 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "tabWidth": 2, "semi": false, "singleQuote": true, - "printWidth": 120 + "printWidth": 120, + "arrowParens": "avoid" }, "dependencies": { "efrt-unpack": "2.2.0" diff --git a/scratch.js b/scratch.js index bce3b21bb..444aa76fd 100644 --- a/scratch.js +++ b/scratch.js @@ -1,22 +1,24 @@ const nlp = require('./src/index') // nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') -nlp.extend(require('./plugins/numbers/src')) -// nlp.extend(require('./plugins/dates/src')) +// nlp.extend(require('./plugins/numbers/src')) -/* +/** add spaces at the end */ +const padEnd = function (str, width) { + str = str.toString() + while (str.length < width) { + str += ' ' + } + return str +} -### article issues -`'20th-century American' - .article() -> a` -`sports people` -`` -`` -`The Football clubs in Morocco` -`Defunct tennis tournaments in the United States` -`The Expatriate football managers in Georgia ` -`rhythm and blues singer-songwriters` -*/ +let doc = nlp('a b c d') +doc.replace('b', "added i'm") +console.log('\n\n-----') -let doc = nlp('i paid fifty eight dollars') -doc.money().set(1) -doc.debug() +let arr = [] +doc.list[0].terms().map((t) => { + arr.push(' ' + padEnd(t.reduced, 10) + t.next) +}) + +console.log(arr.join('\n')) diff --git a/src/Doc/methods/insert/01-replace.js b/src/Doc/methods/insert/01-replace.js index 33f8a45f5..4801ddc92 100644 --- a/src/Doc/methods/insert/01-replace.js +++ b/src/Doc/methods/insert/01-replace.js @@ -5,7 +5,7 @@ const titleCase = str => { } /** substitute-in new content */ -exports.replaceWith = function(replace, options = {}) { +exports.replaceWith = function (replace, options = {}) { if (!replace) { return this.delete() } @@ -41,6 +41,7 @@ exports.replaceWith = function(replace, options = {}) { //tag the new phrases let tmpDoc = this.buildFrom(newPhrases) tmpDoc.tagger() + newPhrases = tmpDoc.list } else { return //don't even bother } @@ -60,7 +61,7 @@ exports.replaceWith = function(replace, options = {}) { } /** search and replace match with new content */ -exports.replace = function(match, replace, options) { +exports.replace = function (match, replace, options) { // if there's no 2nd param, use replaceWith if (replace === undefined) { return this.replaceWith(match, options) diff --git a/tests/misc.test.js b/tests/misc.test.js index 690fc864b..5aeaebb8f 100644 --- a/tests/misc.test.js +++ b/tests/misc.test.js @@ -1,7 +1,7 @@ const test = require('tape') const nlp = require('./_lib') -test('tag-multiples:', function(t) { +test('tag-multiples:', function (t) { const r = nlp('twas brillig in the doofgafoof.') r.match('brillig').tag(['Foo', 'Barr']) t.ok(r.match('#Foo').found, 'tagged-foo') @@ -11,11 +11,9 @@ test('tag-multiples:', function(t) { // ----- -test('root-text vs match-text', function(t) { +test('root-text vs match-text', function (t) { let str = ` paper, scissors, rock. I run with scissors.` - let doc = nlp(str) - .match('*') - .all() + let doc = nlp(str).match('*').all() t.equal(doc.text(), str, 'perfect-root-text') let m = doc.match('scissors') @@ -23,7 +21,7 @@ test('root-text vs match-text', function(t) { t.end() }) -test('barely a term', function(t) { +test('barely a term', function (t) { let str = '.(' let doc = nlp(str) t.equal(doc.out(), str, 'barely-term-no-space') @@ -32,3 +30,16 @@ test('barely a term', function(t) { t.equal(doc.out(), str, 'barely-term-with-space') t.end() }) + +test('replacement with a contraction', function (t) { + let doc = nlp('a b c d') + t.equal(doc.text(), 'a b c d', 'before replace') + doc.replace('b', "added i'm") + t.equal(doc.text(), "a added i'm c d", 'after replace') + + doc = nlp("The only reason he doesn't continue is because of how tired he feels.", { reason: 'Noun' }) + doc.verbs().toPastTense() + t.equal(doc.text(), "The only reason he didn't continue is because of how tired he felt.", 'conjugate-contraction') + + t.end() +}) From ec61359e6a5b5854e49ab1829021ea7f33ef6003 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:12:32 -0400 Subject: [PATCH 19/24] support the only reason --- scratch.js | 24 ++++--------------- .../04-correction/matches/03-noun.js | 2 ++ 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/scratch.js b/scratch.js index 444aa76fd..7e82a3fce 100644 --- a/scratch.js +++ b/scratch.js @@ -1,24 +1,8 @@ const nlp = require('./src/index') -// nlp.verbose(true) +nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') // nlp.extend(require('./plugins/numbers/src')) -/** add spaces at the end */ -const padEnd = function (str, width) { - str = str.toString() - while (str.length < width) { - str += ' ' - } - return str -} - -let doc = nlp('a b c d') -doc.replace('b', "added i'm") -console.log('\n\n-----') - -let arr = [] -doc.list[0].terms().map((t) => { - arr.push(' ' + padEnd(t.reduced, 10) + t.next) -}) - -console.log(arr.join('\n')) +// nlp(`the only reason`).debug() +nlp(`They cite a lack of imbalances that provide early warning signals of a downturn.`).debug() +// nlp(`he doesn't continue is because`).verbs().toPastTense().debug() diff --git a/src/02-tagger/04-correction/matches/03-noun.js b/src/02-tagger/04-correction/matches/03-noun.js index fdcc8d7e7..105ebfe82 100644 --- a/src/02-tagger/04-correction/matches/03-noun.js +++ b/src/02-tagger/04-correction/matches/03-noun.js @@ -32,6 +32,8 @@ module.exports = [ //running-a-show { match: '#Gerund #Determiner [#Infinitive]', group: 0, tag: 'Noun', reason: 'running-a-show' }, + //the-only-reason + { match: '#Determiner #Adverb [#Infinitive]', group: 0, tag: 'Noun', reason: 'the-reason' }, //the nice swim { match: '(the|this|those|these) #Adjective [#Verb]', group: 0, tag: 'Noun', reason: 'the-adj-verb' }, // the truly nice swim From 44d6e00fc3db0530b49916beca20fb7d05e09c00 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:31:55 -0400 Subject: [PATCH 20/24] update deps, 13.2.0 rc --- builds/compromise-tokenize.js | 8797 +---------------- builds/compromise.js | 183 +- builds/compromise.min.js | 2 +- builds/compromise.mjs | 182 +- changelog.md | 7 +- package-lock.json | 1528 +-- package.json | 26 +- rollup.config.js | 2 +- scratch.js | 6 +- .../04-correction/matches/03-noun.js | 2 +- src/Subset/Verbs/index.js | 9 +- src/_version.js | 2 +- tests/misc.test.js | 3 +- 13 files changed, 1034 insertions(+), 9715 deletions(-) diff --git a/builds/compromise-tokenize.js b/builds/compromise-tokenize.js index 8c67c8ef5..8d31d7739 100644 --- a/builds/compromise-tokenize.js +++ b/builds/compromise-tokenize.js @@ -1,8796 +1 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global = global || self, global.nlp = factory()); -}(this, (function () { 'use strict'; - - function _typeof(obj) { - "@babel/helpers - typeof"; - - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); - } - - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); - } - - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); - } - - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArrayLimit(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - //this is a not-well-thought-out way to reduce our dependence on `object===object` stuff - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'.split(''); //generates a unique id for this term - - function makeId(str) { - str = str || '_'; - var text = str + '-'; - - for (var i = 0; i < 7; i++) { - text += chars[Math.floor(Math.random() * chars.length)]; - } - - return text; - } - - var _id = makeId; - - //a hugely-ignorant, and widely subjective transliteration of latin, cryllic, greek unicode characters to english ascii. - //approximate visual (not semantic or phonetic) relationship between unicode and ascii characters - //http://en.wikipedia.org/wiki/List_of_Unicode_characters - //https://docs.google.com/spreadsheet/ccc?key=0Ah46z755j7cVdFRDM1A2YVpwa1ZYWlpJM2pQZ003M0E - var compact = { - '!': '¡', - '?': '¿Ɂ', - '"': '“”"❝❞', - "'": '‘‛❛❜', - '-': '—–', - a: 'ªÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻȀȁȂȃȦȧȺΆΑΔΛάαλАадѦѧӐӑӒӓƛɅæ', - b: 'ßþƀƁƂƃƄƅɃΒβϐϦБВЪЬвъьѢѣҌҍ', - c: '¢©ÇçĆćĈĉĊċČčƆƇƈȻȼͻͼͽϲϹϽϾСсєҀҁҪҫ', - d: 'ÐĎďĐđƉƊȡƋƌǷ', - e: 'ÈÉÊËèéêëĒēĔĕĖėĘęĚěƎƏƐǝȄȅȆȇȨȩɆɇΈΕΞΣέεξϱϵ϶ЀЁЕЭеѐёҼҽҾҿӖӗӘәӚӛӬӭ', - f: 'ƑƒϜϝӺӻҒғſ', - g: 'ĜĝĞğĠġĢģƓǤǥǦǧǴǵ', - h: 'ĤĥĦħƕǶȞȟΉΗЂЊЋНнђћҢңҤҥҺһӉӊ', - I: 'ÌÍÎÏ', - i: 'ìíîïĨĩĪīĬĭĮįİıƖƗȈȉȊȋΊΐΪίιϊІЇії', - j: 'ĴĵǰȷɈɉϳЈј', - k: 'ĶķĸƘƙǨǩΚκЌЖКжкќҚқҜҝҞҟҠҡ', - l: 'ĹĺĻļĽľĿŀŁłƚƪǀǏǐȴȽΙӀӏ', - m: 'ΜϺϻМмӍӎ', - n: 'ÑñŃńŅņŇňʼnŊŋƝƞǸǹȠȵΝΠήηϞЍИЙЛПийлпѝҊҋӅӆӢӣӤӥπ', - o: 'ÒÓÔÕÖØðòóôõöøŌōŎŏŐőƟƠơǑǒǪǫǬǭǾǿȌȍȎȏȪȫȬȭȮȯȰȱΌΘΟθοσόϕϘϙϬϭϴОФоѲѳӦӧӨөӪӫ', - p: 'ƤƿΡρϷϸϼРрҎҏÞ', - q: 'Ɋɋ', - r: 'ŔŕŖŗŘřƦȐȑȒȓɌɍЃГЯгяѓҐґ', - s: 'ŚśŜŝŞşŠšƧƨȘșȿЅѕ', - t: 'ŢţŤťŦŧƫƬƭƮȚțȶȾΓΤτϮТт', - u: 'µÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưƱƲǓǔǕǖǗǘǙǚǛǜȔȕȖȗɄΰμυϋύ', - v: 'νѴѵѶѷ', - w: 'ŴŵƜωώϖϢϣШЩшщѡѿ', - x: '×ΧχϗϰХхҲҳӼӽӾӿ', - y: 'ÝýÿŶŷŸƳƴȲȳɎɏΎΥΫγψϒϓϔЎУучўѰѱҮүҰұӮӯӰӱӲӳ', - z: 'ŹźŻżŽžƩƵƶȤȥɀΖζ' - }; //decompress data into two hashes - - var unicode = {}; - Object.keys(compact).forEach(function (k) { - compact[k].split('').forEach(function (s) { - unicode[s] = k; - }); - }); - - var killUnicode = function killUnicode(str) { - var chars = str.split(''); - chars.forEach(function (s, i) { - if (unicode[s]) { - chars[i] = unicode[s]; - } - }); - return chars.join(''); - }; - - var unicode_1 = killUnicode; // console.log(killUnicode('bjŏȒk—Ɏó')); - - var periodAcronym = /([A-Z]\.)+[A-Z]?,?$/; - var oneLetterAcronym = /^[A-Z]\.,?$/; - var noPeriodAcronym = /[A-Z]{2,}('s|,)?$/; - var lowerCaseAcronym = /([a-z]\.){2,}[a-z]\.?$/; - - var isAcronym = function isAcronym(str) { - //like N.D.A - if (periodAcronym.test(str) === true) { - return true; - } //like c.e.o - - - if (lowerCaseAcronym.test(str) === true) { - return true; - } //like 'F.' - - - if (oneLetterAcronym.test(str) === true) { - return true; - } //like NDA - - - if (noPeriodAcronym.test(str) === true) { - return true; - } - - return false; - }; - - var isAcronym_1 = isAcronym; - - var hasSlash = /[a-z\u00C0-\u00FF] ?\/ ?[a-z\u00C0-\u00FF]/; - /** some basic operations on a string to reduce noise */ - - var clean = function clean(str) { - str = str || ''; - str = str.toLowerCase(); - str = str.trim(); - var original = str; //(very) rough ASCII transliteration - bjŏrk -> bjork - - str = unicode_1(str); //rough handling of slashes - 'see/saw' - - if (hasSlash.test(str) === true) { - str = str.replace(/\/.*/, ''); - } //#tags, @mentions - - - str = str.replace(/^[#@]/, ''); //punctuation - - str = str.replace(/[,;.!?]+$/, ''); // coerce single curly quotes - - str = str.replace(/[\u0027\u0060\u00B4\u2018\u2019\u201A\u201B\u2032\u2035\u2039\u203A]+/g, "'"); // coerce double curly quotes - - str = str.replace(/[\u0022\u00AB\u00BB\u201C\u201D\u201E\u201F\u2033\u2034\u2036\u2037\u2E42\u301D\u301E\u301F\uFF02]+/g, '"'); //coerce Unicode ellipses - - str = str.replace(/\u2026/g, '...'); //en-dash - - str = str.replace(/\u2013/g, '-'); //lookin'->looking (make it easier for conjugation) - - str = str.replace(/([aeiou][ktrp])in$/, '$1ing'); //turn re-enactment to reenactment - - if (/^(re|un)-?[^aeiou]./.test(str) === true) { - str = str.replace('-', ''); - } //strip leading & trailing grammatical punctuation - - - if (/^[:;]/.test(str) === false) { - str = str.replace(/\.{3,}$/g, ''); - str = str.replace(/[",\.!:;\?\)]+$/g, ''); - str = str.replace(/^['"\(]+/g, ''); - } //do this again.. - - - str = str.trim(); //oh shucks, - - if (str === '') { - str = original; - } //compact acronyms - - - if (isAcronym_1(str)) { - str = str.replace(/\./g, ''); - } //nice-numbers - - - str = str.replace(/([0-9]),([0-9])/g, '$1$2'); - return str; - }; - - var clean_1 = clean; // console.log(normalize('Dr. V Cooper')); - - /** reduced is one step further than clean */ - var reduced = function reduced(str) { - // remove apostrophes - str = str.replace(/['’]s$/, ''); - str = str.replace(/s['’]$/, 's'); - return str; - }; - - var reduce = reduced; - - //all punctuation marks, from https://en.wikipedia.org/wiki/Punctuation - //we have slightly different rules for start/end - like #hashtags. - - var startings = /^[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*•^†‡°¡¿※№÷׺ª%‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F]+/; - var endings = /[ \n\t\.’'\[\](){}⟨⟩:,،、‒–—―…!.‹›«»‐\-?‘’;\/⁄·&*@•^†‡°¡¿※#№÷׺ª‰+−=‱¶′″‴§~|‖¦©℗®℠™¤₳฿\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E]+$/; //money = ₵¢₡₢$₫₯֏₠€ƒ₣₲₴₭₺₾ℳ₥₦₧₱₰£៛₽₹₨₪৳₸₮₩¥ - - var hasSlash$1 = /\//; - var hasApostrophe = /['’]/; - var hasAcronym = /^[a-z]\.([a-z]\.)+/i; - var minusNumber = /^[-+\.][0-9]/; - /** turn given text into a parsed-up object - * seperate the 'meat' of the word from the whitespace+punctuation - */ - - var parseTerm = function parseTerm(str) { - var original = str; - var pre = ''; - var post = ''; - str = str.replace(startings, function (found) { - pre = found; // support '-40' - - if ((pre === '-' || pre === '+' || pre === '.') && minusNumber.test(str)) { - pre = ''; - return found; - } - - return ''; - }); - str = str.replace(endings, function (found) { - post = found; // keep s-apostrophe - "flanders'" or "chillin'" - - if (hasApostrophe.test(found) && /[sn]['’]$/.test(original) && hasApostrophe.test(pre) === false) { - post = post.replace(hasApostrophe, ''); - return "'"; - } //keep end-period in acronym - - - if (hasAcronym.test(str) === true) { - post = post.replace(/\./, ''); - return '.'; - } - - return ''; - }); //we went too far.. - - if (str === '') { - // do a very mild parse, and hope for the best. - original = original.replace(/ *$/, function (after) { - post = after || ''; - return ''; - }); - str = original; - pre = ''; - post = post; - } // create the various forms of our text, - - - var clean = clean_1(str); - var parsed = { - text: str, - clean: clean, - reduced: reduce(clean), - pre: pre, - post: post - }; // support aliases for slashes - - if (hasSlash$1.test(str)) { - str.split(hasSlash$1).forEach(function (word) { - parsed.alias = parsed.alias || {}; - parsed.alias[word.trim()] = true; - }); - } - - return parsed; - }; - - var parse = parseTerm; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var _01Case = createCommonjsModule(function (module, exports) { - var titleCase = /^[A-Z][a-z'\u00C0-\u00FF]/; - var upperCase = /^[A-Z]+s?$/; - /** convert all text to uppercase */ - - exports.toUpperCase = function () { - this.text = this.text.toUpperCase(); - return this; - }; - /** convert all text to lowercase */ - - - exports.toLowerCase = function () { - this.text = this.text.toLowerCase(); - return this; - }; - /** only set the first letter to uppercase - * leave any existing uppercase alone - */ - - - exports.toTitleCase = function () { - this.text = this.text.replace(/^ *[a-z\u00C0-\u00FF]/, function (x) { - return x.toUpperCase(); - }); //support unicode? - - return this; - }; - /** if all letters are uppercase */ - - - exports.isUpperCase = function () { - return upperCase.test(this.text); - }; - /** if the first letter is uppercase, and the rest are lowercase */ - - - exports.isTitleCase = function () { - return titleCase.test(this.text); - }; - - exports.titleCase = exports.isTitleCase; - }); - var _01Case_1 = _01Case.toUpperCase; - var _01Case_2 = _01Case.toLowerCase; - var _01Case_3 = _01Case.toTitleCase; - var _01Case_4 = _01Case.isUpperCase; - var _01Case_5 = _01Case.isTitleCase; - var _01Case_6 = _01Case.titleCase; - - var _02Punctuation = createCommonjsModule(function (module, exports) { - // these methods are called with '@hasComma' in the match syntax - // various unicode quotation-mark formats - var startQuote = /(\u0022|\uFF02|\u0027|\u201C|\u2018|\u201F|\u201B|\u201E|\u2E42|\u201A|\u00AB|\u2039|\u2035|\u2036|\u2037|\u301D|\u0060|\u301F)/; - var endQuote = /(\u0022|\uFF02|\u0027|\u201D|\u2019|\u201D|\u2019|\u201D|\u201D|\u2019|\u00BB|\u203A|\u2032|\u2033|\u2034|\u301E|\u00B4|\u301E)/; - /** search the term's 'post' punctuation */ - - exports.hasPost = function (punct) { - return this.post.indexOf(punct) !== -1; - }; - /** search the term's 'pre' punctuation */ - - - exports.hasPre = function (punct) { - return this.pre.indexOf(punct) !== -1; - }; - /** does it have a quotation symbol? */ - - - exports.hasQuote = function () { - return startQuote.test(this.pre) || endQuote.test(this.post); - }; - - exports.hasQuotation = exports.hasQuote; - /** does it have a comma? */ - - exports.hasComma = function () { - return this.hasPost(','); - }; - /** does it end in a period? */ - - - exports.hasPeriod = function () { - return this.hasPost('.') === true && this.hasPost('...') === false; - }; - /** does it end in an exclamation */ - - - exports.hasExclamation = function () { - return this.hasPost('!'); - }; - /** does it end with a question mark? */ - - - exports.hasQuestionMark = function () { - return this.hasPost('?') || this.hasPost('¿'); - }; - /** is there a ... at the end? */ - - - exports.hasEllipses = function () { - return this.hasPost('..') || this.hasPost('…') || this.hasPre('..') || this.hasPre('…'); - }; - /** is there a semicolon after this word? */ - - - exports.hasSemicolon = function () { - return this.hasPost(';'); - }; - /** is there a slash '/' in this word? */ - - - exports.hasSlash = function () { - return /\//.test(this.text); - }; - /** a hyphen connects two words like-this */ - - - exports.hasHyphen = function () { - var hyphen = /(-|–|—)/; - return hyphen.test(this.post) || hyphen.test(this.pre); - }; - /** a dash separates words - like that */ - - - exports.hasDash = function () { - var hyphen = / (-|–|—) /; - return hyphen.test(this.post) || hyphen.test(this.pre); - }; - /** is it multiple words combinded */ - - - exports.hasContraction = function () { - return Boolean(this.implicit); - }; - /** try to sensibly put this punctuation mark into the term */ - - - exports.addPunctuation = function (punct) { - // dont add doubles - if (punct === ',' || punct === ';') { - this.post = this.post.replace(punct, ''); - } - - this.post = punct + this.post; - return this; - }; - }); - var _02Punctuation_1 = _02Punctuation.hasPost; - var _02Punctuation_2 = _02Punctuation.hasPre; - var _02Punctuation_3 = _02Punctuation.hasQuote; - var _02Punctuation_4 = _02Punctuation.hasQuotation; - var _02Punctuation_5 = _02Punctuation.hasComma; - var _02Punctuation_6 = _02Punctuation.hasPeriod; - var _02Punctuation_7 = _02Punctuation.hasExclamation; - var _02Punctuation_8 = _02Punctuation.hasQuestionMark; - var _02Punctuation_9 = _02Punctuation.hasEllipses; - var _02Punctuation_10 = _02Punctuation.hasSemicolon; - var _02Punctuation_11 = _02Punctuation.hasSlash; - var _02Punctuation_12 = _02Punctuation.hasHyphen; - var _02Punctuation_13 = _02Punctuation.hasDash; - var _02Punctuation_14 = _02Punctuation.hasContraction; - var _02Punctuation_15 = _02Punctuation.addPunctuation; - - //declare it up here - var wrapMatch = function wrapMatch() {}; - /** ignore optional/greedy logic, straight-up term match*/ - - - var doesMatch = function doesMatch(t, reg, index, length) { - // support id matches - if (reg.id === t.id) { - return true; - } // support '.' - - - if (reg.anything === true) { - return true; - } // support '^' (in parentheses) - - - if (reg.start === true && index !== 0) { - return false; - } // support '$' (in parentheses) - - - if (reg.end === true && index !== length - 1) { - return false; - } //support a text match - - - if (reg.word !== undefined) { - //match contractions - if (t.implicit !== null && t.implicit === reg.word) { - return true; - } // term aliases for slashes and things - - - if (t.alias !== undefined && t.alias.hasOwnProperty(reg.word)) { - return true; - } // support ~ match - - - if (reg.soft === true && reg.word === t.root) { - return true; - } //match either .clean or .text - - - return reg.word === t.clean || reg.word === t.text || reg.word === t.reduced; - } //support #Tag - - - if (reg.tag !== undefined) { - return t.tags[reg.tag] === true; - } //support @method - - - if (reg.method !== undefined) { - if (typeof t[reg.method] === 'function' && t[reg.method]() === true) { - return true; - } - - return false; - } //support /reg/ - - - if (reg.regex !== undefined) { - return reg.regex.test(t.clean); - } // support optimized (one|two) - - - if (reg.oneOf !== undefined) { - return reg.oneOf.hasOwnProperty(t.reduced) || reg.oneOf.hasOwnProperty(t.text); - } //support (one|two) - - - if (reg.choices !== undefined) { - // try to support && operator - if (reg.operator === 'and') { - // must match them all - return reg.choices.every(function (r) { - return wrapMatch(t, r, index, length); - }); - } // or must match one - - - return reg.choices.some(function (r) { - return wrapMatch(t, r, index, length); - }); - } - - return false; - }; // wrap result for !negative match logic - - - wrapMatch = function wrapMatch(t, reg, index, length) { - var result = doesMatch(t, reg, index, length); - - if (reg.negative === true) { - return !result; - } - - return result; - }; - - var _doesMatch = wrapMatch; - - var boring = {}; - /** check a match object against this term */ - - var doesMatch_1 = function doesMatch_1(reg, index, length) { - return _doesMatch(this, reg, index, length); - }; - /** does this term look like an acronym? */ - - - var isAcronym_1$1 = function isAcronym_1$1() { - return isAcronym_1(this.text); - }; - /** is this term implied by a contraction? */ - - - var isImplicit = function isImplicit() { - return this.text === '' && Boolean(this.implicit); - }; - /** does the term have at least one good tag? */ - - - var isKnown = function isKnown() { - return Object.keys(this.tags).some(function (t) { - return boring[t] !== true; - }); - }; - /** cache the root property of the term */ - - - var setRoot = function setRoot(world) { - var transform = world.transforms; - var str = this.implicit || this.clean; - - if (this.tags.Plural) { - str = transform.toSingular(str, world); - } - - if (this.tags.Verb && !this.tags.Negative && !this.tags.Infinitive) { - var tense = null; - - if (this.tags.PastTense) { - tense = 'PastTense'; - } else if (this.tags.Gerund) { - tense = 'Gerund'; - } else if (this.tags.PresentTense) { - tense = 'PresentTense'; - } else if (this.tags.Participle) { - tense = 'Participle'; - } else if (this.tags.Actor) { - tense = 'Actor'; - } - - str = transform.toInfinitive(str, world, tense); - } - - this.root = str; - }; - - var _03Misc = { - doesMatch: doesMatch_1, - isAcronym: isAcronym_1$1, - isImplicit: isImplicit, - isKnown: isKnown, - setRoot: setRoot - }; - - var hasSpace = /[\s-]/; - var isUpperCase = /^[A-Z-]+$/; // const titleCase = str => { - // return str.charAt(0).toUpperCase() + str.substr(1) - // } - - /** return various text formats of this term */ - - var textOut = function textOut(options, showPre, showPost) { - options = options || {}; - var word = this.text; - var before = this.pre; - var after = this.post; // -word- - - if (options.reduced === true) { - word = this.reduced || ''; - } - - if (options.root === true) { - word = this.root || ''; - } - - if (options.implicit === true && this.implicit) { - word = this.implicit || ''; - } - - if (options.normal === true) { - word = this.clean || this.text || ''; - } - - if (options.root === true) { - word = this.root || this.reduced || ''; - } - - if (options.unicode === true) { - word = unicode_1(word); - } // cleanup case - - - if (options.titlecase === true) { - if (this.tags.ProperNoun && !this.titleCase()) ; else if (this.tags.Acronym) { - word = word.toUpperCase(); //uppercase acronyms - } else if (isUpperCase.test(word) && !this.tags.Acronym) { - // lowercase everything else - word = word.toLowerCase(); - } - } - - if (options.lowercase === true) { - word = word.toLowerCase(); - } // remove the '.'s from 'F.B.I.' (safely) - - - if (options.acronyms === true && this.tags.Acronym) { - word = word.replace(/\./g, ''); - } // -before/after- - - - if (options.whitespace === true || options.root === true) { - before = ''; - after = ' '; - - if ((hasSpace.test(this.post) === false || options.last) && !this.implicit) { - after = ''; - } - } - - if (options.punctuation === true && !options.root) { - //normalized end punctuation - if (this.hasPost('.') === true) { - after = '.' + after; - } else if (this.hasPost('?') === true) { - after = '?' + after; - } else if (this.hasPost('!') === true) { - after = '!' + after; - } else if (this.hasPost(',') === true) { - after = ',' + after; - } else if (this.hasEllipses() === true) { - after = '...' + after; - } - } - - if (showPre !== true) { - before = ''; - } - - if (showPost !== true) { - // let keep = after.match(/\)/) || '' - after = ''; //keep //after.replace(/[ .?!,]+/, '') - } // remove the '.' from 'Mrs.' (safely) - - - if (options.abbreviations === true && this.tags.Abbreviation) { - after = after.replace(/^\./, ''); - } - - return before + word + after; - }; - - var _04Text = { - textOut: textOut - }; - - var boringTags = { - Auxiliary: 1, - Possessive: 1 - }; - /** a subjective ranking of tags kinda tfidf-based */ - - var rankTags = function rankTags(term, world) { - var tags = Object.keys(term.tags); - var tagSet = world.tags; - tags = tags.sort(function (a, b) { - //bury the tags we dont want - if (boringTags[b] || !tagSet[b]) { - return -1; - } // unknown tags are interesting - - - if (!tagSet[b]) { - return 1; - } - - if (!tagSet[a]) { - return 0; - } // then sort by #of parent tags (most-specific tags first) - - - if (tagSet[a].lineage.length > tagSet[b].lineage.length) { - return 1; - } - - if (tagSet[a].isA.length > tagSet[b].isA.length) { - return -1; - } - - return 0; - }); - return tags; - }; - - var _bestTag = rankTags; - - var jsonDefault = { - text: true, - tags: true, - implicit: true, - whitespace: true, - clean: false, - id: false, - index: false, - offset: false, - bestTag: false - }; - /** return various metadata for this term */ - - var json = function json(options, world) { - options = options || {}; - options = Object.assign({}, jsonDefault, options); - var result = {}; // default on - - if (options.text) { - result.text = this.text; - } - - if (options.normal) { - result.normal = this.normal; - } - - if (options.tags) { - result.tags = Object.keys(this.tags); - } // default off - - - if (options.clean) { - result.clean = this.clean; - } - - if (options.id || options.offset) { - result.id = this.id; - } - - if (options.implicit && this.implicit !== null) { - result.implicit = this.implicit; - } - - if (options.whitespace) { - result.pre = this.pre; - result.post = this.post; - } - - if (options.bestTag) { - result.bestTag = _bestTag(this, world)[0]; - } - - return result; - }; - - var _05Json = { - json: json - }; - - var methods = Object.assign({}, _01Case, _02Punctuation, _03Misc, _04Text, _05Json); - - function isClientSide() { - return typeof window !== 'undefined' && window.document; - } - /** add spaces at the end */ - - - var padEnd = function padEnd(str, width) { - str = str.toString(); - - while (str.length < width) { - str += ' '; - } - - return str; - }; - /** output for verbose-mode */ - - - var logTag = function logTag(t, tag, reason) { - if (isClientSide()) { - console.log('%c' + padEnd(t.clean, 3) + ' + ' + tag + ' ', 'color: #6accb2;'); - return; - } //server-side - - - var log = '\x1b[33m' + padEnd(t.clean, 15) + '\x1b[0m + \x1b[32m' + tag + '\x1b[0m '; - - if (reason) { - log = padEnd(log, 35) + ' ' + reason + ''; - } - - console.log(log); - }; - /** output for verbose mode */ - - - var logUntag = function logUntag(t, tag, reason) { - if (isClientSide()) { - console.log('%c' + padEnd(t.clean, 3) + ' - ' + tag + ' ', 'color: #AB5850;'); - return; - } //server-side - - - var log = '\x1b[33m' + padEnd(t.clean, 3) + ' \x1b[31m - #' + tag + '\x1b[0m '; - - if (reason) { - log = padEnd(log, 35) + ' ' + reason; - } - - console.log(log); - }; - - var isArray = function isArray(arr) { - return Object.prototype.toString.call(arr) === '[object Array]'; - }; - - var titleCase = function titleCase(str) { - return str.charAt(0).toUpperCase() + str.substr(1); - }; - - var fns = { - logTag: logTag, - logUntag: logUntag, - isArray: isArray, - titleCase: titleCase - }; - - /** add a tag, and its descendents, to a term */ - - var addTag = function addTag(t, tag, reason, world) { - var tagset = world.tags; //support '.' or '-' notation for skipping the tag - - if (tag === '' || tag === '.' || tag === '-') { - return; - } - - if (tag[0] === '#') { - tag = tag.replace(/^#/, ''); - } - - tag = fns.titleCase(tag); //if we already got this one - - if (t.tags[tag] === true) { - return; - } // log it? - - - var isVerbose = world.isVerbose(); - - if (isVerbose === true) { - fns.logTag(t, tag, reason); - } //add tag - - - t.tags[tag] = true; //whee! - //check tagset for any additional things to do... - - if (tagset.hasOwnProperty(tag) === true) { - //add parent Tags - tagset[tag].isA.forEach(function (down) { - t.tags[down] = true; - - if (isVerbose === true) { - fns.logTag(t, '→ ' + down); - } - }); //remove any contrary tags - - t.unTag(tagset[tag].notA, '←', world); - } - }; - /** support an array of tags */ - - - var addTags = function addTags(term, tags, reason, world) { - if (typeof tags !== 'string') { - for (var i = 0; i < tags.length; i++) { - addTag(term, tags[i], reason, world); - } // tags.forEach(tag => addTag(term, tag, reason, world)) - - } else { - addTag(term, tags, reason, world); - } - }; - - var add = addTags; - - var lowerCase = /^[a-z]/; - - var titleCase$1 = function titleCase(str) { - return str.charAt(0).toUpperCase() + str.substr(1); - }; - /** remove this tag, and its descentents from the term */ - - - var unTag = function unTag(t, tag, reason, world) { - var isVerbose = world.isVerbose(); //support '*' for removing all tags - - if (tag === '*') { - t.tags = {}; - return t; - } - - tag = tag.replace(/^#/, ''); - - if (lowerCase.test(tag) === true) { - tag = titleCase$1(tag); - } // remove the tag - - - if (t.tags[tag] === true) { - delete t.tags[tag]; //log in verbose-mode - - if (isVerbose === true) { - fns.logUntag(t, tag, reason); - } - } //delete downstream tags too - - - var tagset = world.tags; - - if (tagset[tag]) { - var lineage = tagset[tag].lineage; - - for (var i = 0; i < lineage.length; i++) { - if (t.tags[lineage[i]] === true) { - delete t.tags[lineage[i]]; - - if (isVerbose === true) { - fns.logUntag(t, ' - ' + lineage[i]); - } - } - } - } - - return t; - }; //handle an array of tags - - - var untagAll = function untagAll(term, tags, reason, world) { - if (typeof tags !== 'string' && tags) { - for (var i = 0; i < tags.length; i++) { - unTag(term, tags[i], reason, world); - } - - return; - } - - unTag(term, tags, reason, world); - }; - - var unTag_1 = untagAll; - - var canBe = function canBe(term, tag, world) { - var tagset = world.tags; // cleanup tag - - if (tag[0] === '#') { - tag = tag.replace(/^#/, ''); - } //fail-fast - - - if (tagset[tag] === undefined) { - return true; - } //loop through tag's contradictory tags - - - var enemies = tagset[tag].notA || []; - - for (var i = 0; i < enemies.length; i++) { - if (term.tags[enemies[i]] === true) { - return false; - } - } - - if (tagset[tag].isA !== undefined) { - return canBe(term, tagset[tag].isA, world); //recursive - } - - return true; - }; - - var canBe_1 = canBe; - - /** add a tag or tags, and their descendents to this term - * @param {string | string[]} tags - a tag or tags - * @param {string?} [reason] a clue for debugging - */ - - var tag_1 = function tag_1(tags, reason, world) { - add(this, tags, reason, world); - return this; - }; - /** only tag this term if it's consistent with it's current tags */ - - - var tagSafe = function tagSafe(tags, reason, world) { - if (canBe_1(this, tags, world)) { - add(this, tags, reason, world); - } - - return this; - }; - /** remove a tag or tags, and their descendents from this term - * @param {string | string[]} tags - a tag or tags - * @param {string?} [reason] a clue for debugging - */ - - - var unTag_1$1 = function unTag_1$1(tags, reason, world) { - unTag_1(this, tags, reason, world); - return this; - }; - /** is this tag consistent with the word's current tags? - * @param {string | string[]} tags - a tag or tags - * @returns {boolean} - */ - - - var canBe_1$1 = function canBe_1$1(tags, world) { - return canBe_1(this, tags, world); - }; - - var tag = { - tag: tag_1, - tagSafe: tagSafe, - unTag: unTag_1$1, - canBe: canBe_1$1 - }; - - var Term = - /*#__PURE__*/ - function () { - function Term() { - var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - - _classCallCheck(this, Term); - - text = String(text); - var obj = parse(text); // the various forms of our text - - this.text = obj.text || ''; - this.clean = obj.clean; - this.reduced = obj.reduced; - this.root = null; - this.implicit = null; - this.pre = obj.pre || ''; - this.post = obj.post || ''; - this.tags = {}; - this.prev = null; - this.next = null; - this.id = _id(obj.clean); - this.isA = 'Term'; // easier than .constructor... - // support alternative matches - - if (obj.alias) { - this.alias = obj.alias; - } - } - /** set the text of the Term to something else*/ - - - _createClass(Term, [{ - key: "set", - value: function set(str) { - var obj = parse(str); - this.text = obj.text; - this.clean = obj.clean; - return this; - } - }]); - - return Term; - }(); - /** create a deep-copy of this term */ - - - Term.prototype.clone = function () { - var term = new Term(this.text); - term.pre = this.pre; - term.post = this.post; - term.tags = Object.assign({}, this.tags); //use the old id, so it can be matched with .match(doc) - // term.id = this.id - - return term; - }; - - Object.assign(Term.prototype, methods); - Object.assign(Term.prototype, tag); - var Term_1 = Term; - - /** return a flat array of Term objects */ - var terms = function terms(n) { - if (this.length === 0) { - return []; - } // use cache, if it exists - - - if (this.cache.terms) { - if (n !== undefined) { - return this.cache.terms[n]; - } - - return this.cache.terms; - } - - var terms = [this.pool.get(this.start)]; - - for (var i = 0; i < this.length - 1; i += 1) { - var id = terms[terms.length - 1].next; - - if (id === null) { - // throw new Error('linked-list broken') - console.error("Compromise error: Linked list broken in phrase '" + this.start + "'"); - break; - } - - var term = this.pool.get(id); - terms.push(term); //return this one? - - if (n !== undefined && n === i) { - return terms[n]; - } - } - - if (n === undefined) { - this.cache.terms = terms; - } - - if (n !== undefined) { - return terms[n]; - } - - return terms; - }; - /** return a shallow or deep copy of this phrase */ - - - var clone = function clone(isShallow) { - var _this = this; - - if (isShallow) { - var p = this.buildFrom(this.start, this.length); - p.cache = this.cache; - return p; - } //how do we clone part of the pool? - - - var terms = this.terms(); - var newTerms = terms.map(function (t) { - return t.clone(); - }); //connect these new ids up - - newTerms.forEach(function (t, i) { - //add it to the pool.. - _this.pool.add(t); - - if (newTerms[i + 1]) { - t.next = newTerms[i + 1].id; - } - - if (newTerms[i - 1]) { - t.prev = newTerms[i - 1].id; - } - }); - return this.buildFrom(newTerms[0].id, newTerms.length); - }; - /** return last term object */ - - - var lastTerm = function lastTerm() { - var terms = this.terms(); - return terms[terms.length - 1]; - }; - /** quick lookup for a term id */ - - - var hasId = function hasId(wantId) { - if (this.length === 0 || !wantId) { - return false; - } - - if (this.start === wantId) { - return true; - } // use cache, if available - - - if (this.cache.terms) { - var _terms = this.cache.terms; - - for (var i = 0; i < _terms.length; i++) { - if (_terms[i].id === wantId) { - return true; - } - } - - return false; - } // otherwise, go through each term - - - var lastId = this.start; - - for (var _i = 0; _i < this.length - 1; _i += 1) { - var term = this.pool.get(lastId); - - if (term === undefined) { - console.error("Compromise error: Linked list broken. Missing term '".concat(lastId, "' in phrase '").concat(this.start, "'\n")); // throw new Error('linked List error') - - return false; - } - - if (term.next === wantId) { - return true; - } - - lastId = term.next; - } - - return false; - }; - /** how many seperate, non-empty words is it? */ - - - var wordCount = function wordCount() { - return this.terms().filter(function (t) { - return t.text !== ''; - }).length; - }; - /** get the full-sentence this phrase belongs to */ - - - var fullSentence = function fullSentence() { - var t = this.terms(0); //find first term in sentence - - while (t.prev) { - t = this.pool.get(t.prev); - } - - var start = t.id; - var len = 1; //go to end of sentence - - while (t.next) { - t = this.pool.get(t.next); - len += 1; - } - - return this.buildFrom(start, len); - }; - - var _01Utils = { - terms: terms, - clone: clone, - lastTerm: lastTerm, - hasId: hasId, - wordCount: wordCount, - fullSentence: fullSentence - }; - - var trimEnd = function trimEnd(str) { - return str.replace(/ +$/, ''); - }; - /** produce output in the given format */ - - - var text = function text() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var isFirst = arguments.length > 1 ? arguments[1] : undefined; - var isLast = arguments.length > 2 ? arguments[2] : undefined; - - if (typeof options === 'string') { - if (options === 'normal') { - options = { - whitespace: true, - unicode: true, - lowercase: true, - punctuation: true, - acronyms: true, - abbreviations: true, - implicit: true, - normal: true - }; - } else if (options === 'clean') { - options = { - titlecase: false, - lowercase: true, - punctuation: true, - whitespace: true, - unicode: true, - implicit: true - }; - } else if (options === 'reduced') { - options = { - titlecase: false, - lowercase: true, - punctuation: false, - //FIXME: reversed? - whitespace: true, - unicode: true, - implicit: true, - reduced: true - }; - } else if (options === 'root') { - options = { - titlecase: false, - lowercase: true, - punctuation: true, - whitespace: true, - unicode: true, - implicit: true, - root: true - }; - } else { - options = {}; - } - } - - var terms = this.terms(); //this this phrase a complete sentence? - - var isFull = false; - - if (terms[0] && terms[0].prev === null && terms[terms.length - 1].next === null) { - isFull = true; - } - - var text = terms.reduce(function (str, t, i) { - options.last = isLast && i === terms.length - 1; - var showPre = true; - var showPost = true; - - if (isFull === false) { - // dont show beginning whitespace - if (i === 0 && isFirst) { - showPre = false; - } // dont show end-whitespace - - - if (i === terms.length - 1 && isLast) { - showPost = false; - } - } - - var txt = t.textOut(options, showPre, showPost); // if (options.titlecase && i === 0) { - // txt = titleCase(txt) - // } - - return str + txt; - }, ''); //full-phrases show punctuation, but not whitespace - - if (isFull === true && isLast) { - text = trimEnd(text); - } - - if (options.trim === true) { - text = text.trim(); - } - - return text; - }; - - var _02Text = { - text: text - }; - - /** remove start and end whitespace */ - var trim = function trim() { - var terms = this.terms(); - - if (terms.length > 0) { - //trim starting - terms[0].pre = terms[0].pre.replace(/^\s+/, ''); //trim ending - - var lastTerm = terms[terms.length - 1]; - lastTerm.post = lastTerm.post.replace(/\s+$/, ''); - } - - return this; - }; - - var _03Change = { - trim: trim - }; - - var endOfSentence = /[.?!]\s*$/; // replacing a 'word.' with a 'word!' - - var combinePost = function combinePost(before, after) { - //only transfer the whitespace - if (endOfSentence.test(after)) { - var whitespace = before.match(/\s*$/); - return after + whitespace; - } - - return before; - }; //add whitespace to the start of the second bit - - - var addWhitespace = function addWhitespace(beforeTerms, newTerms) { - // add any existing pre-whitespace to beginning - newTerms[0].pre = beforeTerms[0].pre; - var lastTerm = beforeTerms[beforeTerms.length - 1]; //add any existing punctuation to end of our new terms - - var newTerm = newTerms[newTerms.length - 1]; - newTerm.post = combinePost(lastTerm.post, newTerm.post); // remove existing punctuation - - lastTerm.post = ''; //before ←[space] - after - - if (lastTerm.post === '') { - lastTerm.post += ' '; - } - }; //insert this segment into the linked-list - - - var stitchIn = function stitchIn(beforeTerms, newTerms, pool) { - var lastBefore = beforeTerms[beforeTerms.length - 1]; - var lastNew = newTerms[newTerms.length - 1]; - var afterId = lastBefore.next; //connect ours in (main → newPhrase) - - lastBefore.next = newTerms[0].id; //stich the end in (newPhrase → after) - - lastNew.next = afterId; //do it backwards, too - - if (afterId) { - // newPhrase ← after - var afterTerm = pool.get(afterId); - afterTerm.prev = lastNew.id; - } // before ← newPhrase - - - var beforeId = beforeTerms[0].id; - - if (beforeId) { - var newTerm = newTerms[0]; - newTerm.prev = beforeId; - } - }; // avoid stretching a phrase twice. - - - var unique = function unique(list) { - return list.filter(function (o, i) { - return list.indexOf(o) === i; - }); - }; //append one phrase onto another. - - - var appendPhrase = function appendPhrase(before, newPhrase, doc) { - var beforeTerms = before.terms(); - var newTerms = newPhrase.terms(); //spruce-up the whitespace issues - - addWhitespace(beforeTerms, newTerms); //insert this segment into the linked-list - - stitchIn(beforeTerms, newTerms, before.pool); // stretch! - // make each effected phrase longer - - var toStretch = [before]; - var hasId = before.start; - var docs = [doc]; - docs = docs.concat(doc.parents()); // find them all! - - docs.forEach(function (parent) { - // only the phrases that should change - var shouldChange = parent.list.filter(function (p) { - return p.hasId(hasId); - }); - toStretch = toStretch.concat(shouldChange); - }); // don't double-count a phrase - - toStretch = unique(toStretch); - toStretch.forEach(function (p) { - p.length += newPhrase.length; - }); - before.cache = {}; - return before; - }; - - var append = appendPhrase; - - var hasSpace$1 = / /; //a new space needs to be added, either on the new phrase, or the old one - // '[new] [◻old]' -or- '[old] [◻new] [old]' - - var addWhitespace$1 = function addWhitespace(newTerms) { - //add a space before our new text? - // add a space after our text - var lastTerm = newTerms[newTerms.length - 1]; - - if (hasSpace$1.test(lastTerm.post) === false) { - lastTerm.post += ' '; - } - - return; - }; //insert this segment into the linked-list - - - var stitchIn$1 = function stitchIn(main, newPhrase, newTerms) { - // [newPhrase] → [main] - var lastTerm = newTerms[newTerms.length - 1]; - lastTerm.next = main.start; // [before] → [main] - - var pool = main.pool; - var start = pool.get(main.start); - - if (start.prev) { - var before = pool.get(start.prev); - before.next = newPhrase.start; - } //do it backwards, too - // before ← newPhrase - - - newTerms[0].prev = main.terms(0).prev; // newPhrase ← main - - main.terms(0).prev = lastTerm.id; - }; - - var unique$1 = function unique(list) { - return list.filter(function (o, i) { - return list.indexOf(o) === i; - }); - }; //append one phrase onto another - - - var joinPhrase = function joinPhrase(original, newPhrase, doc) { - var starterId = original.start; - var newTerms = newPhrase.terms(); //spruce-up the whitespace issues - - addWhitespace$1(newTerms); //insert this segment into the linked-list - - stitchIn$1(original, newPhrase, newTerms); //increase the length of our phrases - - var toStretch = [original]; - var docs = [doc]; - docs = docs.concat(doc.parents()); - docs.forEach(function (d) { - // only the phrases that should change - var shouldChange = d.list.filter(function (p) { - return p.hasId(starterId) || p.hasId(newPhrase.start); - }); - toStretch = toStretch.concat(shouldChange); - }); // don't double-count - - toStretch = unique$1(toStretch); // stretch these phrases - - toStretch.forEach(function (p) { - p.length += newPhrase.length; // change the start too, if necessary - - if (p.start === starterId) { - p.start = newPhrase.start; - } - - p.cache = {}; - }); - return original; - }; - - var prepend = joinPhrase; - - //recursively decrease the length of all the parent phrases - var shrinkAll = function shrinkAll(doc, id, deleteLength, after) { - var arr = doc.parents(); - arr.push(doc); - arr.forEach(function (d) { - //find our phrase to shrink - var phrase = d.list.find(function (p) { - return p.hasId(id); - }); - - if (!phrase) { - return; - } - - phrase.length -= deleteLength; // does it start with this soon-removed word? - - if (phrase.start === id) { - phrase.start = after.id; - } - - phrase.cache = {}; - }); // cleanup empty phrase objects - - doc.list = doc.list.filter(function (p) { - if (!p.start || !p.length) { - return false; - } - - return true; - }); - }; - /** wrap the linked-list around these terms - * so they don't appear any more - */ - - - var deletePhrase = function deletePhrase(phrase, doc) { - var pool = doc.pool(); - var terms = phrase.terms(); //grab both sides of the chain, - - var prev = pool.get(terms[0].prev) || {}; - var after = pool.get(terms[terms.length - 1].next) || {}; - - if (terms[0].implicit && prev.implicit) { - prev.set(prev.implicit); - prev.post += ' '; - } // //first, change phrase lengths - - - shrinkAll(doc, phrase.start, phrase.length, after); // connect [prev]->[after] - - if (prev) { - prev.next = after.id; - } // connect [prev]<-[after] - - - if (after) { - after.prev = prev.id; - } // lastly, actually delete the terms from the pool? - // for (let i = 0; i < terms.length; i++) { - // pool.remove(terms[i].id) - // } - - }; - - var _delete = deletePhrase; - - /** put this text at the end */ - - var append_1 = function append_1(newPhrase, doc) { - append(this, newPhrase, doc); - return this; - }; - /** add this text to the beginning */ - - - var prepend_1 = function prepend_1(newPhrase, doc) { - prepend(this, newPhrase, doc); - return this; - }; - - var delete_1 = function delete_1(doc) { - _delete(this, doc); - return this; - }; // stich-in newPhrase, stretch 'doc' + parents - - - var replace = function replace(newPhrase, doc) { - //add it do the end - var firstLength = this.length; - append(this, newPhrase, doc); //delete original terms - - var tmp = this.buildFrom(this.start, this.length); - tmp.length = firstLength; - _delete(tmp, doc); - }; - /** - * Turn this phrase object into 3 phrase objects - */ - - - var splitOn = function splitOn(p) { - var terms = this.terms(); - var result = { - before: null, - match: null, - after: null - }; - var index = terms.findIndex(function (t) { - return t.id === p.start; - }); - - if (index === -1) { - return result; - } //make all three sections into phrase-objects - - - var start = terms.slice(0, index); - - if (start.length > 0) { - result.before = this.buildFrom(start[0].id, start.length); - } - - var match = terms.slice(index, index + p.length); - - if (match.length > 0) { - result.match = this.buildFrom(match[0].id, match.length); - } - - var end = terms.slice(index + p.length, terms.length); - - if (end.length > 0) { - result.after = this.buildFrom(end[0].id, end.length, this.pool); - } - - return result; - }; - - var _04Insert = { - append: append_1, - prepend: prepend_1, - "delete": delete_1, - replace: replace, - splitOn: splitOn - }; - - /** return json metadata for this phrase */ - var json$1 = function json() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var world = arguments.length > 1 ? arguments[1] : undefined; - var res = {}; // text data - - if (options.text) { - res.text = this.text(); - } - - if (options.normal) { - res.normal = this.text('normal'); - } - - if (options.clean) { - res.clean = this.text('clean'); - } - - if (options.reduced) { - res.reduced = this.text('reduced'); - } - - if (options.root) { - res.root = this.text('root'); - } - - if (options.trim) { - if (res.text) { - res.text = res.text.trim(); - } - - if (res.normal) { - res.normal = res.normal.trim(); - } - - if (res.reduced) { - res.reduced = res.reduced.trim(); - } - } // terms data - - - if (options.terms) { - if (options.terms === true) { - options.terms = {}; - } - - res.terms = this.terms().map(function (t) { - return t.json(options.terms, world); - }); - } - - return res; - }; - - var _05Json$1 = { - json: json$1 - }; - - /** match any terms after this phrase */ - var lookAhead = function lookAhead(regs) { - // if empty match string, return everything after - if (!regs) { - regs = '.*'; - } - - var pool = this.pool; // get a list of all terms preceding our start - - var terms = []; - - var getAfter = function getAfter(id) { - var term = pool.get(id); - - if (!term) { - return; - } - - terms.push(term); - - if (term.prev) { - getAfter(term.next); //recursion - } - }; - - var all = this.terms(); - var lastTerm = all[all.length - 1]; - getAfter(lastTerm.next); - - if (terms.length === 0) { - return []; - } // got the terms, make a phrase from them - - - var p = this.buildFrom(terms[0].id, terms.length); - return p.match(regs); - }; - /** match any terms before this phrase */ - - - var lookBehind = function lookBehind(regs) { - // if empty match string, return everything before - if (!regs) { - regs = '.*'; - } - - var pool = this.pool; // get a list of all terms preceding our start - - var terms = []; - - var getBefore = function getBefore(id) { - var term = pool.get(id); - - if (!term) { - return; - } - - terms.push(term); - - if (term.prev) { - getBefore(term.prev); //recursion - } - }; - - var term = pool.get(this.start); - getBefore(term.prev); - - if (terms.length === 0) { - return []; - } // got the terms, make a phrase from them - - - var p = this.buildFrom(terms[terms.length - 1].id, terms.length); - return p.match(regs); - }; - - var _06Lookahead = { - lookAhead: lookAhead, - lookBehind: lookBehind - }; - - var methods$1 = Object.assign({}, _01Utils, _02Text, _03Change, _04Insert, _05Json$1, _06Lookahead); - - // try to avoid doing the match - var failFast = function failFast(p, regs) { - if (regs.length === 0) { - return true; - } - - for (var i = 0; i < regs.length; i += 1) { - var reg = regs[i]; //logical quick-ones - - if (reg.optional !== true && reg.negative !== true) { - //start/end impossibilites - if (reg.start === true && i > 0) { - return true; - } - } //this is not possible - - - if (reg.anything === true && reg.negative === true) { - return true; - } - } - - return false; - }; - - var _02FailFast = failFast; - - //found a match? it's greedy? keep going! - - var getGreedy = function getGreedy(terms, t, reg, until, index, length) { - var start = t; - - for (; t < terms.length; t += 1) { - //stop for next-reg match - if (until && terms[t].doesMatch(until, index + t, length)) { - return t; - } - - var count = t - start + 1; // is it max-length now? - - if (reg.max !== undefined && count === reg.max) { - return t; - } //stop here - - - if (terms[t].doesMatch(reg, index + t, length) === false) { - // is it too short? - if (reg.min !== undefined && count < reg.min) { - return null; - } - - return t; - } - } - - return t; - }; //'unspecific greedy' is a weird situation. - - - var greedyTo = function greedyTo(terms, t, nextReg, index, length) { - //if there's no next one, just go off the end! - if (!nextReg) { - return terms.length; - } //otherwise, we're looking for the next one - - - for (; t < terms.length; t += 1) { - if (terms[t].doesMatch(nextReg, index + t, length) === true) { - return t; - } - } //guess it doesn't exist, then. - - - return null; - }; // get or create named group - - - var getOrCreateGroup = function getOrCreateGroup(namedGroups, namedGroupId, terms, startIndex, group) { - var g = namedGroups[namedGroupId]; - - if (g) { - return g; - } - - var id = terms[startIndex].id; - namedGroups[namedGroupId] = { - group: String(group), - start: id, - length: 0 - }; - return namedGroups[namedGroupId]; - }; - /** tries to match a sequence of terms, starting from here */ - - - var tryHere = function tryHere(terms, regs, index, length) { - var namedGroups = {}; - var previousGroupId = null; - var t = 0; // we must satisfy each rule in 'regs' - - for (var r = 0; r < regs.length; r += 1) { - var reg = regs[r]; // Check if this reg has a named capture group - - var isNamedGroup = typeof reg.named === 'string' || typeof reg.named === 'number'; - var namedGroupId = null; // Reuse previous capture group if same - - if (isNamedGroup) { - var prev = regs[r - 1]; - - if (prev && prev.named === reg.named && previousGroupId) { - namedGroupId = previousGroupId; - } else { - namedGroupId = _id(reg.named); - previousGroupId = namedGroupId; - } - } //should we fail here? - - - if (!terms[t]) { - //are all remaining regs optional? - var hasNeeds = regs.slice(r).some(function (remain) { - return !remain.optional; - }); - - if (hasNeeds === false) { - break; - } // have unmet needs - - - return [false, null]; - } //support 'unspecific greedy' .* properly - - - if (reg.anything === true && reg.greedy === true) { - var skipto = greedyTo(terms, t, regs[r + 1], reg, index); // ensure it's long enough - - if (reg.min !== undefined && skipto - t < reg.min) { - return [false, null]; - } // reduce it back, if it's too long - - - if (reg.max !== undefined && skipto - t > reg.max) { - t = t + reg.max; - continue; - } - - if (skipto === null) { - return [false, null]; //couldn't find it - } // is it really this easy?.... - - - if (isNamedGroup) { - var g = getOrCreateGroup(namedGroups, namedGroupId, terms, t, reg.named); // Update group - - g.length = skipto - t; - } - - t = skipto; - continue; - } //if it looks like a match, continue - //we have a special case where an end-anchored greedy match may need to - //start matching before the actual end; we do this by (temporarily!) - //removing the "end" property from the matching token... since this is - //very situation-specific, we *only* do this when we really need to. - - - if (reg.anything === true || reg.end === true && reg.greedy === true && index + t < length - 1 && terms[t].doesMatch(Object.assign({}, reg, { - end: false - }), index + t, length) === true || terms[t].doesMatch(reg, index + t, length) === true) { - var startAt = t; // okay, it was a match, but if it optional too, - // we should check the next reg too, to skip it? - - if (reg.optional && regs[r + 1]) { - // does the next reg match it too? - if (terms[t].doesMatch(regs[r + 1], index + t, length) === true) { - // but does the next reg match the next term?? - // only skip if it doesn't - if (!terms[t + 1] || terms[t + 1].doesMatch(regs[r + 1], index + t, length) === false) { - r += 1; - } - } - } //advance to the next term! - - - t += 1; //check any ending '$' flags - - if (reg.end === true) { - //if this isn't the last term, refuse the match - if (t !== terms.length && reg.greedy !== true) { - return [false, null]; - } - } //try keep it going! - - - if (reg.greedy === true) { - // for greedy checking, we no longer care about the reg.start - // value, and leaving it can cause failures for anchored greedy - // matches. ditto for end-greedy matches: we need an earlier non- - // ending match to succceed until we get to the actual end. - t = getGreedy(terms, t, Object.assign({}, reg, { - start: false, - end: false - }), regs[r + 1], index, length); - - if (t === null) { - return [false, null]; //greedy was too short - } // if this was also an end-anchor match, check to see we really - // reached the end - - - if (reg.end === true && index + t !== length) { - return [false, null]; //greedy didn't reach the end - } - } - - if (isNamedGroup) { - // Get or create capture group - var _g = getOrCreateGroup(namedGroups, namedGroupId, terms, startAt, reg.named); // Update group - add greedy or increment length - - - if (t > 1 && reg.greedy) { - _g.length += t - startAt; - } else { - _g.length++; - } - } - - continue; - } //bah, who cares, keep going - - - if (reg.optional === true) { - continue; - } // should we skip-over an implicit word? - - - if (terms[t].isImplicit() && regs[r - 1] && terms[t + 1]) { - // does the next one match? - if (terms[t + 1].doesMatch(reg, index + t, length)) { - t += 2; - continue; - } - } // console.log(' ❌\n\n') - - - return [false, null]; - } //return our result - - - return [terms.slice(0, t), namedGroups]; - }; - - var _03TryMatch = tryHere; - - var postProcess = function postProcess(terms, regs, matches) { - if (!matches || matches.length === 0) { - return matches; - } // ensure end reg has the end term - - - var atEnd = regs.some(function (r) { - return r.end; - }); - - if (atEnd) { - var lastTerm = terms[terms.length - 1]; - matches = matches.filter(function (_ref) { - var arr = _ref.match; - return arr.indexOf(lastTerm) !== -1; - }); - } - - return matches; - }; - - var _04PostProcess = postProcess; - - /* break-down a match expression into this: - { - word:'', - tag:'', - regex:'', - - start:false, - end:false, - negative:false, - anything:false, - greedy:false, - optional:false, - - named:'', - choices:[], - } - */ - var hasMinMax = /\{([0-9]+,?[0-9]*)\}/; - var andSign = /&&/; - var captureName = new RegExp(/^<(\S+)>/); - - var titleCase$2 = function titleCase(str) { - return str.charAt(0).toUpperCase() + str.substr(1); - }; - - var end = function end(str) { - return str[str.length - 1]; - }; - - var start = function start(str) { - return str[0]; - }; - - var stripStart = function stripStart(str) { - return str.substr(1); - }; - - var stripEnd = function stripEnd(str) { - return str.substr(0, str.length - 1); - }; - - var stripBoth = function stripBoth(str) { - str = stripStart(str); - str = stripEnd(str); - return str; - }; // - - - var parseToken = function parseToken(w) { - var obj = {}; //collect any flags (do it twice) - - for (var i = 0; i < 2; i += 1) { - //end-flag - if (end(w) === '$') { - obj.end = true; - w = stripEnd(w); - } //front-flag - - - if (start(w) === '^') { - obj.start = true; - w = stripStart(w); - } //capture group (this one can span multiple-terms) - - - if (start(w) === '[' || end(w) === ']') { - obj.named = true; - - if (start(w) === '[') { - obj.groupType = end(w) === ']' ? 'single' : 'start'; - } else { - obj.groupType = 'end'; - } - - w = w.replace(/^\[/, ''); - w = w.replace(/\]$/, ''); // Use capture group name - - if (start(w) === '<') { - var res = captureName.exec(w); - - if (res.length >= 2) { - obj.named = res[1]; - w = w.replace(res[0], ''); - } - } - } //back-flags - - - if (end(w) === '+') { - obj.greedy = true; - w = stripEnd(w); - } - - if (w !== '*' && end(w) === '*' && w !== '\\*') { - obj.greedy = true; - w = stripEnd(w); - } - - if (end(w) === '?') { - obj.optional = true; - w = stripEnd(w); - } - - if (start(w) === '!') { - obj.negative = true; - w = stripStart(w); - } //wrapped-flags - - - if (start(w) === '(' && end(w) === ')') { - // support (one && two) - if (andSign.test(w)) { - obj.choices = w.split(andSign); - obj.operator = 'and'; - } else { - obj.choices = w.split('|'); - obj.operator = 'or'; - } //remove '(' and ')' - - - obj.choices[0] = stripStart(obj.choices[0]); - var last = obj.choices.length - 1; - obj.choices[last] = stripEnd(obj.choices[last]); // clean up the results - - obj.choices = obj.choices.map(function (s) { - return s.trim(); - }); - obj.choices = obj.choices.filter(function (s) { - return s; - }); //recursion alert! - - obj.choices = obj.choices.map(parseToken); - w = ''; - } //regex - - - if (start(w) === '/' && end(w) === '/') { - w = stripBoth(w); - obj.regex = new RegExp(w); //potential vuln - security/detect-non-literal-regexp - - return obj; - } //soft-match - - - if (start(w) === '~' && end(w) === '~') { - w = stripBoth(w); - obj.soft = true; - obj.word = w; - return obj; - } - } // support #Tag{0,9} - - - if (hasMinMax.test(w) === true) { - w = w.replace(hasMinMax, function (a, b) { - var arr = b.split(/,/g); - - if (arr.length === 1) { - // '{3}' Exactly three times - obj.min = Number(arr[0]); - obj.max = Number(arr[0]); - } else { - // '{2,4}' Two to four times - // '{3,}' Three or more times - obj.min = Number(arr[0]); - obj.max = Number(arr[1] || 999); - } - - obj.greedy = true; - return ''; - }); - } //do the actual token content - - - if (start(w) === '#') { - obj.tag = stripStart(w); - obj.tag = titleCase$2(obj.tag); - return obj; - } //dynamic function on a term object - - - if (start(w) === '@') { - obj.method = stripStart(w); - return obj; - } - - if (w === '.') { - obj.anything = true; - return obj; - } //support alone-astrix - - - if (w === '*') { - obj.anything = true; - obj.greedy = true; - obj.optional = true; - return obj; - } - - if (w) { - //somehow handle encoded-chars? - w = w.replace('\\*', '*'); - w = w.replace('\\.', '.'); - obj.word = w.toLowerCase(); - } - - return obj; - }; - - var parseToken_1 = parseToken; - - var isNamed = function isNamed(capture) { - return typeof capture === 'string' || typeof capture === 'number'; - }; - - var fillGroups = function fillGroups(tokens) { - var convert = false; - var index = -1; - var current; //'fill in' capture groups between start-end - - for (var i = 0; i < tokens.length; i++) { - var n = tokens[i]; // Give name to un-named single tokens - - if (n.groupType === 'single' && n.named === true) { - index += 1; - n.named = index; - continue; - } // Start converting tokens - - - if (n.groupType === 'start') { - convert = true; - - if (isNamed(n.named)) { - current = n.named; - } else { - index += 1; - current = index; - } - } // Ensure this token has the right name - - - if (convert) { - n.named = current; - } // Stop converting tokens - - - if (n.groupType === 'end') { - convert = false; - } - } - - return tokens; - }; - - var useOneOf = function useOneOf(tokens) { - return tokens.map(function (token) { - if (token.choices !== undefined) { - // are they all straight non-optional words? - var shouldPack = token.choices.every(function (c) { - return c.optional !== true && c.negative !== true && c.word !== undefined; - }); - - if (shouldPack === true) { - var oneOf = {}; - token.choices.forEach(function (c) { - return oneOf[c.word] = true; - }); - token.oneOf = oneOf; - delete token.choices; - } - } - - return token; - }); - }; - - var postProcess$1 = function postProcess(tokens) { - // ensure all capture groups are filled between start and end - // give all capture groups names - var count = tokens.filter(function (t) { - return t.groupType; - }).length; - - if (count > 0) { - tokens = fillGroups(tokens); - } // convert 'choices' format to 'oneOf' format - - - tokens = useOneOf(tokens); // console.log(tokens) - - return tokens; - }; - - var postProcess_1 = postProcess$1; - - var isArray$1 = function isArray(arr) { - return Object.prototype.toString.call(arr) === '[object Array]'; - }; //split-up by (these things) - - - var byParentheses = function byParentheses(str) { - var arr = str.split(/([\^\[\!]*(?:<\S+>)?\(.*?\)[?+*]*\]?\$?)/); - arr = arr.map(function (s) { - return s.trim(); - }); - return arr; - }; - - var byWords = function byWords(arr) { - var words = []; - arr.forEach(function (a) { - //keep brackets lumped together - if (/^[[^_/]?\(/.test(a[0])) { - words.push(a); - return; - } - - var list = a.split(' '); - list = list.filter(function (w) { - return w; - }); - words = words.concat(list); - }); - return words; - }; //turn an array into a 'choices' list - - - var byArray = function byArray(arr) { - return [{ - choices: arr.map(function (s) { - return { - word: s - }; - }) - }]; - }; - - var fromDoc = function fromDoc(doc) { - if (!doc || !doc.list || !doc.list[0]) { - return []; - } - - var ids = []; - doc.list.forEach(function (p) { - p.terms().forEach(function (t) { - ids.push({ - id: t.id - }); - }); - }); - return [{ - choices: ids, - greedy: true - }]; - }; - /** parse a match-syntax string into json */ - - - var syntax = function syntax(input) { - // fail-fast - if (input === null || input === undefined || input === '') { - return []; - } //try to support a ton of different formats: - - - if (_typeof(input) === 'object') { - if (isArray$1(input)) { - if (input.length === 0 || !input[0]) { - return []; - } //is it a pre-parsed reg-list? - - - if (_typeof(input[0]) === 'object') { - return input; - } //support a flat array of normalized words - - - if (typeof input[0] === 'string') { - return byArray(input); - } - } //support passing-in a compromise object as a match - - - if (input && input.isA === 'Doc') { - return fromDoc(input); - } - - return []; - } - - if (typeof input === 'number') { - input = String(input); //go for it? - } - - var tokens = byParentheses(input); - tokens = byWords(tokens); - tokens = tokens.map(parseToken_1); //clean up anything weird - - tokens = postProcess_1(tokens); // console.log(JSON.stringify(tokens, null, 2)) - - return tokens; - }; - - var syntax_1 = syntax; - - /** returns a simple array of arrays */ - - var matchAll = function matchAll(p, regs) { - var matchOne = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - //if we forgot to parse it.. - if (typeof regs === 'string') { - regs = syntax_1(regs); - } //try to dismiss it, at-once - - - if (_02FailFast(p, regs) === true) { - return []; - } //any match needs to be this long, at least - - - var minLength = regs.filter(function (r) { - return r.optional !== true; - }).length; - var terms = p.terms(); - var matches = []; //optimisation for '^' start logic - - if (regs[0].start === true) { - var _tryMatch = _03TryMatch(terms, regs, 0, terms.length), - _tryMatch2 = _slicedToArray(_tryMatch, 2), - match = _tryMatch2[0], - groups = _tryMatch2[1]; - - if (match !== false && match.length > 0) { - match = match.filter(function (m) { - return m; - }); - matches.push({ - match: match, - groups: groups - }); - } - - return _04PostProcess(terms, regs, matches); - } //try starting, from every term - - - for (var i = 0; i < terms.length; i += 1) { - // slice may be too short - if (i + minLength > terms.length) { - break; - } //try it! - - - var _tryMatch3 = _03TryMatch(terms.slice(i), regs, i, terms.length), - _tryMatch4 = _slicedToArray(_tryMatch3, 2), - _match = _tryMatch4[0], - _groups = _tryMatch4[1]; - - if (_match !== false && _match.length > 0) { - //zoom forward! - i += _match.length - 1; //[capture-groups] return some null responses - - _match = _match.filter(function (m) { - return m; - }); - matches.push({ - match: _match, - groups: _groups - }); //ok, maybe that's enough? - - if (matchOne === true) { - return _04PostProcess(terms, regs, matches); - } - } - } - - return _04PostProcess(terms, regs, matches); - }; - - var _01MatchAll = matchAll; - - /** return anything that doesn't match. - * returns a simple array of arrays - */ - - var notMatch = function notMatch(p, regs) { - var found = {}; - var arr = _01MatchAll(p, regs); - arr.forEach(function (_ref) { - var ts = _ref.match; - ts.forEach(function (t) { - found[t.id] = true; - }); - }); //return anything not found - - var terms = p.terms(); - var result = []; - var current = []; - terms.forEach(function (t) { - if (found[t.id] === true) { - if (current.length > 0) { - result.push(current); - current = []; - } - - return; - } - - current.push(t); - }); - - if (current.length > 0) { - result.push(current); - } - - return result; - }; - - var not = notMatch; - - /** return an array of matching phrases */ - - var match_1 = function match_1(regs) { - var _this = this; - - var justOne = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var matches = _01MatchAll(this, regs, justOne); //make them phrase objects - - matches = matches.map(function (_ref) { - var match = _ref.match, - groups = _ref.groups; - - var p = _this.buildFrom(match[0].id, match.length, groups); - - p.cache.terms = match; - return p; - }); - return matches; - }; - /** return boolean if one match is found */ - - - var has = function has(regs) { - var matches = _01MatchAll(this, regs, true); - return matches.length > 0; - }; - /** remove all matches from the result */ - - - var not$1 = function not$1(regs) { - var _this2 = this; - - var matches = not(this, regs); //make them phrase objects - - matches = matches.map(function (list) { - return _this2.buildFrom(list[0].id, list.length); - }); - return matches; - }; - /** return a list of phrases that can have this tag */ - - - var canBe$1 = function canBe(tag, world) { - var _this3 = this; - - var results = []; - var terms = this.terms(); - var previous = false; - - for (var i = 0; i < terms.length; i += 1) { - var can = terms[i].canBe(tag, world); - - if (can === true) { - if (previous === true) { - //add it to the end - results[results.length - 1].push(terms[i]); - } else { - results.push([terms[i]]); //make a new one - } - - previous = can; - } - } //turn them into Phrase objects - - - results = results.filter(function (a) { - return a.length > 0; - }).map(function (arr) { - return _this3.buildFrom(arr[0].id, arr.length); - }); - return results; - }; - - var match = { - match: match_1, - has: has, - not: not$1, - canBe: canBe$1 - }; - - var Phrase = function Phrase(id, length, pool) { - _classCallCheck(this, Phrase); - - this.start = id; - this.length = length; - this.isA = 'Phrase'; // easier than .constructor... - - Object.defineProperty(this, 'pool', { - enumerable: false, - writable: true, - value: pool - }); - Object.defineProperty(this, 'cache', { - enumerable: false, - writable: true, - value: {} - }); - Object.defineProperty(this, 'groups', { - enumerable: false, - writable: true, - value: {} - }); - }; - /** create a new Phrase object from an id and length */ - - - Phrase.prototype.buildFrom = function (id, length, groups) { - var p = new Phrase(id, length, this.pool); //copy-over or replace capture-groups too - - if (groups && Object.keys(groups).length > 0) { - p.groups = groups; - } else { - p.groups = this.groups; - } - - return p; - }; //apply methods - - - Object.assign(Phrase.prototype, match); - Object.assign(Phrase.prototype, methods$1); //apply aliases - - var aliases = { - term: 'terms' - }; - Object.keys(aliases).forEach(function (k) { - return Phrase.prototype[k] = Phrase.prototype[aliases[k]]; - }); - var Phrase_1 = Phrase; - - /** a key-value store of all terms in our Document */ - var Pool = - /*#__PURE__*/ - function () { - function Pool() { - var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Pool); - - //quiet this property in console.logs - Object.defineProperty(this, 'words', { - enumerable: false, - value: words - }); - } - /** throw a new term object in */ - - - _createClass(Pool, [{ - key: "add", - value: function add(term) { - this.words[term.id] = term; - return this; - } - /** find a term by it's id */ - - }, { - key: "get", - value: function get(id) { - return this.words[id]; - } - /** find a term by it's id */ - - }, { - key: "remove", - value: function remove(id) { - delete this.words[id]; - } - }, { - key: "merge", - value: function merge(pool) { - Object.assign(this.words, pool.words); - return this; - } - /** helper method */ - - }, { - key: "stats", - value: function stats() { - return { - words: Object.keys(this.words).length - }; - } - }]); - - return Pool; - }(); - /** make a deep-copy of all terms */ - - - Pool.prototype.clone = function () { - var _this = this; - - var keys = Object.keys(this.words); - var words = keys.reduce(function (h, k) { - var t = _this.words[k].clone(); - - h[t.id] = t; - return h; - }, {}); - return new Pool(words); - }; - - var Pool_1 = Pool; - - //add forward/backward 'linked-list' prev/next ids - var linkTerms = function linkTerms(terms) { - terms.forEach(function (term, i) { - if (i > 0) { - term.prev = terms[i - 1].id; - } - - if (terms[i + 1]) { - term.next = terms[i + 1].id; - } - }); - }; - - var _linkTerms = linkTerms; - - //(Rule-based sentence boundary segmentation) - chop given text into its proper sentences. - // Ignore periods/questions/exclamations used in acronyms/abbreviations/numbers, etc. - // @spencermountain 2017 MIT - //proper nouns with exclamation marks - // const blacklist = { - // yahoo: true, - // joomla: true, - // jeopardy: true, - // } - //regs- - var initSplit = /(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g; - var hasSomething = /\S/; - var isAcronym$1 = /[ .][A-Z]\.? *$/i; - var hasEllipse = /(?:\u2026|\.{2,}) *$/; - var newLine = /((?:\r?\n|\r)+)/; // Match different new-line formats - - var hasLetter = /[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i; - var startWhitespace = /^\s+/; // Start with a regex: - - var naiive_split = function naiive_split(text) { - var all = []; //first, split by newline - - var lines = text.split(newLine); - - for (var i = 0; i < lines.length; i++) { - //split by period, question-mark, and exclamation-mark - var arr = lines[i].split(initSplit); - - for (var o = 0; o < arr.length; o++) { - all.push(arr[o]); - } - } - - return all; - }; - /** does this look like a sentence? */ - - - var isSentence = function isSentence(str, abbrevs) { - // check for 'F.B.I.' - if (isAcronym$1.test(str) === true) { - return false; - } //check for '...' - - - if (hasEllipse.test(str) === true) { - return false; - } // must have a letter - - - if (hasLetter.test(str) === false) { - return false; - } - - var txt = str.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/, ''); - var words = txt.split(' '); - var lastWord = words[words.length - 1].toLowerCase(); // check for 'Mr.' - - if (abbrevs.hasOwnProperty(lastWord)) { - return false; - } // //check for jeopardy! - // if (blacklist.hasOwnProperty(lastWord)) { - // return false - // } - - - return true; - }; - - var splitSentences = function splitSentences(text, world) { - var abbrevs = world.cache.abbreviations; - text = text || ''; - text = String(text); - var sentences = []; // First do a greedy-split.. - - var chunks = []; // Ensure it 'smells like' a sentence - - if (!text || typeof text !== 'string' || hasSomething.test(text) === false) { - return sentences; - } // Start somewhere: - - - var splits = naiive_split(text); // Filter-out the crap ones - - for (var i = 0; i < splits.length; i++) { - var s = splits[i]; - - if (s === undefined || s === '') { - continue; - } //this is meaningful whitespace - - - if (hasSomething.test(s) === false) { - //add it to the last one - if (chunks[chunks.length - 1]) { - chunks[chunks.length - 1] += s; - continue; - } else if (splits[i + 1]) { - //add it to the next one - splits[i + 1] = s + splits[i + 1]; - continue; - } - } //else, only whitespace, no terms, no sentence - - - chunks.push(s); - } //detection of non-sentence chunks: - //loop through these chunks, and join the non-sentence chunks back together.. - - - for (var _i = 0; _i < chunks.length; _i++) { - var c = chunks[_i]; //should this chunk be combined with the next one? - - if (chunks[_i + 1] && isSentence(c, abbrevs) === false) { - chunks[_i + 1] = c + (chunks[_i + 1] || ''); - } else if (c && c.length > 0) { - //&& hasLetter.test(c) - //this chunk is a proper sentence.. - sentences.push(c); - chunks[_i] = ''; - } - } //if we never got a sentence, return the given text - - - if (sentences.length === 0) { - return [text]; - } //move whitespace to the ends of sentences, when possible - //['hello',' world'] -> ['hello ','world'] - - - for (var _i2 = 1; _i2 < sentences.length; _i2 += 1) { - var ws = sentences[_i2].match(startWhitespace); - - if (ws !== null) { - sentences[_i2 - 1] += ws[0]; - sentences[_i2] = sentences[_i2].replace(startWhitespace, ''); - } - } - - return sentences; - }; - - var _01Sentences = splitSentences; // console.log(sentence_parser('john f. kennedy')); - - var wordlike = /\S/; - var isBoundary = /^[!?.]+$/; - var naiiveSplit = /(\S+)/; - var isSlash = /[a-z] ?\/ ?[a-z]*$/; - var notWord = { - '.': true, - '-': true, - //dash - '–': true, - //en-dash - '—': true, - //em-dash - '--': true, - '...': true // '/': true, // 'one / two' - - }; - - var hasHyphen = function hasHyphen(str) { - //dont split 're-do' - if (/^(re|un)-?[^aeiou]./.test(str) === true) { - return false; - } //letter-number - - - var reg = /^([a-z\u00C0-\u00FF`"'/]+)(-|–|—)([a-z0-9\u00C0-\u00FF].*)/i; - - if (reg.test(str) === true) { - return true; - } //support weird number-emdash combo '2010–2011' - // let reg2 = /^([0-9]+)(–|—)([0-9].*)/i - // if (reg2.test(str)) { - // return true - // } - - - return false; - }; // 'he / she' should be one word - - - var combineSlashes = function combineSlashes(arr) { - for (var i = 1; i < arr.length - 1; i++) { - if (isSlash.test(arr[i])) { - arr[i - 1] += arr[i] + arr[i + 1]; - arr[i] = null; - arr[i + 1] = null; - } - } - - return arr; - }; - - var splitHyphens = function splitHyphens(word) { - var arr = []; //support multiple-hyphenated-terms - - var hyphens = word.split(/[-–—]/); - var whichDash = '-'; - var found = word.match(/[-–—]/); - - if (found && found[0]) { - whichDash = found; - } - - for (var o = 0; o < hyphens.length; o++) { - if (o === hyphens.length - 1) { - arr.push(hyphens[o]); - } else { - arr.push(hyphens[o] + whichDash); - } - } - - return arr; - }; //turn a string into an array of strings (naiive for now, lumped later) - - - var splitWords = function splitWords(str) { - var result = []; - var arr = []; //start with a naiive split - - str = str || ''; - - if (typeof str === 'number') { - str = String(str); - } - - var words = str.split(naiiveSplit); - - for (var i = 0; i < words.length; i++) { - //split 'one-two' - if (hasHyphen(words[i]) === true) { - arr = arr.concat(splitHyphens(words[i])); - continue; - } - - arr.push(words[i]); - } //greedy merge whitespace+arr to the right - - - var carry = ''; - - for (var _i = 0; _i < arr.length; _i++) { - var word = arr[_i]; //if it's more than a whitespace - - if (wordlike.test(word) === true && notWord.hasOwnProperty(word) === false && isBoundary.test(word) === false) { - //put whitespace on end of previous term, if possible - if (result.length > 0) { - result[result.length - 1] += carry; - result.push(word); - } else { - //otherwise, but whitespace before - result.push(carry + word); - } - - carry = ''; - } else { - carry += word; - } - } //handle last one - - - if (carry) { - if (result.length === 0) { - result[0] = ''; - } - - result[result.length - 1] += carry; //put it on the end - } // combine 'one / two' - - - result = combineSlashes(result); // remove empty results - - result = result.filter(function (s) { - return s; - }); - return result; - }; - - var _02Words = splitWords; - - /** turn a string into an array of Phrase objects */ - - var fromText = function fromText() { - var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var world = arguments.length > 1 ? arguments[1] : undefined; - var pool = arguments.length > 2 ? arguments[2] : undefined; - - //a bit of validation, first - if (typeof text !== 'string') { - if (typeof text === 'number') { - text = String(text); - } - } //tokenize into words - - - var sentences = _01Sentences(text, world); - sentences = sentences.map(function (str) { - return _02Words(str); - }); //turn them into proper objects - - pool = pool || new Pool_1(); - var phrases = sentences.map(function (terms) { - terms = terms.map(function (str) { - var term = new Term_1(str); - pool.add(term); - return term; - }); //add next/previous ids - - _linkTerms(terms); //return phrase objects - - var p = new Phrase_1(terms[0].id, terms.length, pool); - p.cache.terms = terms; - return p; - }); //return them ready for a Document object - - return phrases; - }; - - var _01Tokenizer = fromText; - - var fromJSON = function fromJSON(json, world) { - var pool = new Pool_1(); - var phrases = json.map(function (p, k) { - var terms = p.terms.map(function (o, i) { - var term = new Term_1(o.text); - term.pre = o.pre !== undefined ? o.pre : ''; - - if (o.post === undefined) { - o.post = ' '; //no given space for very last term - - if (i >= p.terms.length - 1) { - o.post = '. '; - - if (k >= p.terms.length - 1) { - o.post = '.'; - } - } - } - - term.post = o.post !== undefined ? o.post : ' '; - - if (o.tags) { - o.tags.forEach(function (tag) { - return term.tag(tag, '', world); - }); - } - - pool.add(term); - return term; - }); //add prev/next links - - _linkTerms(terms); // return a proper Phrase object - - return new Phrase_1(terms[0].id, terms.length, pool); - }); - return phrases; - }; - - var fromJSON_1 = fromJSON; - - var _version = '13.1.1'; - - var _object = {}; - - var entity = ['Person', 'Place', 'Organization']; - var nouns = { - Noun: { - notA: ['Verb', 'Adjective', 'Adverb'] - }, - // - singular - Singular: { - isA: 'Noun', - notA: 'Plural' - }, - //a specific thing that's capitalized - ProperNoun: { - isA: 'Noun' - }, - // -- people - Person: { - isA: ['ProperNoun', 'Singular'], - notA: ['Place', 'Organization', 'Date'] - }, - FirstName: { - isA: 'Person' - }, - MaleName: { - isA: 'FirstName', - notA: ['FemaleName', 'LastName'] - }, - FemaleName: { - isA: 'FirstName', - notA: ['MaleName', 'LastName'] - }, - LastName: { - isA: 'Person', - notA: ['FirstName'] - }, - NickName: { - isA: 'Person', - notA: ['FirstName', 'LastName'] - }, - Honorific: { - isA: 'Noun', - notA: ['FirstName', 'LastName', 'Value'] - }, - // -- places - Place: { - isA: 'Singular', - notA: ['Person', 'Organization'] - }, - Country: { - isA: ['Place', 'ProperNoun'], - notA: ['City'] - }, - City: { - isA: ['Place', 'ProperNoun'], - notA: ['Country'] - }, - Region: { - isA: ['Place', 'ProperNoun'] - }, - Address: { - isA: 'Place' - }, - //---Orgs--- - Organization: { - isA: ['Singular', 'ProperNoun'], - notA: ['Person', 'Place'] - }, - SportsTeam: { - isA: 'Organization' - }, - School: { - isA: 'Organization' - }, - Company: { - isA: 'Organization' - }, - // - plural - Plural: { - isA: 'Noun', - notA: ['Singular'] - }, - //(not plural or singular) - Uncountable: { - isA: 'Noun' - }, - Pronoun: { - isA: 'Noun', - notA: entity - }, - //a word for someone doing something -'plumber' - Actor: { - isA: 'Noun', - notA: entity - }, - //a gerund-as-noun - 'swimming' - Activity: { - isA: 'Noun', - notA: ['Person', 'Place'] - }, - //'kilograms' - Unit: { - isA: 'Noun', - notA: entity - }, - //'Canadians' - Demonym: { - isA: ['Noun', 'ProperNoun'], - notA: entity - }, - //`john's` - Possessive: { - isA: 'Noun' // notA: 'Pronoun', - - } - }; - - var verbs = { - Verb: { - notA: ['Noun', 'Adjective', 'Adverb', 'Value'] - }, - // walks - PresentTense: { - isA: 'Verb', - notA: ['PastTense', 'Copula', 'FutureTense'] - }, - // neutral form - 'walk' - Infinitive: { - isA: 'PresentTense', - notA: ['PastTense', 'Gerund'] - }, - // walking - Gerund: { - isA: 'PresentTense', - notA: ['PastTense', 'Copula', 'FutureTense'] - }, - // walked - PastTense: { - isA: 'Verb', - notA: ['FutureTense'] - }, - // will walk - FutureTense: { - isA: 'Verb' - }, - // is - Copula: { - isA: 'Verb' - }, - // would have - Modal: { - isA: 'Verb', - notA: ['Infinitive'] - }, - // had walked - PerfectTense: { - isA: 'Verb', - notA: 'Gerund' - }, - Pluperfect: { - isA: 'Verb' - }, - // shown - Participle: { - isA: 'Verb' - }, - // show up - PhrasalVerb: { - isA: 'Verb' - }, - //'up' part - Particle: { - isA: 'PhrasalVerb' - } - }; - - var values = { - Value: { - notA: ['Verb', 'Adjective', 'Adverb'] - }, - Ordinal: { - isA: 'Value', - notA: ['Cardinal'] - }, - Cardinal: { - isA: 'Value', - notA: ['Ordinal'] - }, - RomanNumeral: { - isA: 'Cardinal', - //can be a person, too - notA: ['Ordinal', 'TextValue'] - }, - TextValue: { - isA: 'Value', - notA: ['NumericValue'] - }, - NumericValue: { - isA: 'Value', - notA: ['TextValue'] - }, - Money: { - isA: 'Cardinal' - }, - Percent: { - isA: 'Value' - } - }; - - var anything = ['Noun', 'Verb', 'Adjective', 'Adverb', 'Value', 'QuestionWord']; - var misc = { - //--Adjectives-- - Adjective: { - notA: ['Noun', 'Verb', 'Adverb', 'Value'] - }, - // adjectives that can conjugate - Comparable: { - isA: ['Adjective'] - }, - // better - Comparative: { - isA: ['Adjective'] - }, - // best - Superlative: { - isA: ['Adjective'], - notA: ['Comparative'] - }, - NumberRange: { - isA: ['Contraction'] - }, - Adverb: { - notA: ['Noun', 'Verb', 'Adjective', 'Value'] - }, - // Dates: - //not a noun, but usually is - Date: { - notA: ['Verb', 'Conjunction', 'Adverb', 'Preposition', 'Adjective'] - }, - Month: { - isA: ['Date', 'Singular'], - notA: ['Year', 'WeekDay', 'Time'] - }, - WeekDay: { - isA: ['Date', 'Noun'] - }, - // '9:20pm' - Time: { - isA: ['Date'], - notA: ['Value'] - }, - //glue - Determiner: { - notA: anything - }, - Conjunction: { - notA: anything - }, - Preposition: { - notA: anything - }, - // what, who, why - QuestionWord: { - notA: ['Determiner'] - }, - // peso, euro - Currency: {}, - // ughh - Expression: { - notA: ['Noun', 'Adjective', 'Verb', 'Adverb'] - }, - // dr. - Abbreviation: {}, - // internet tags - Url: { - notA: ['HashTag', 'PhoneNumber', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'] - }, - PhoneNumber: { - notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention', 'Email'] - }, - HashTag: {}, - AtMention: { - isA: ['Noun'], - notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'Email'] - }, - Emoji: { - notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] - }, - Emoticon: { - notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] - }, - Email: { - notA: ['HashTag', 'Verb', 'Adjective', 'Value', 'AtMention'] - }, - //non-exclusive - Auxiliary: { - notA: ['Noun', 'Adjective', 'Value'] - }, - Acronym: { - notA: ['Plural', 'RomanNumeral'] - }, - Negative: { - notA: ['Noun', 'Adjective', 'Value'] - }, - // if, unless, were - Condition: { - notA: ['Verb', 'Adjective', 'Noun', 'Value'] - } - }; - - // i just made these up - var colorMap = { - Noun: 'blue', - Verb: 'green', - Negative: 'green', - Date: 'red', - Value: 'red', - Adjective: 'magenta', - Preposition: 'cyan', - Conjunction: 'cyan', - Determiner: 'cyan', - Adverb: 'cyan' - }; - /** add a debug color to some tags */ - - var addColors = function addColors(tags) { - Object.keys(tags).forEach(function (k) { - // assigned from plugin, for example - if (tags[k].color) { - tags[k].color = tags[k].color; - return; - } // defined above - - - if (colorMap[k]) { - tags[k].color = colorMap[k]; - return; - } - - tags[k].isA.some(function (t) { - if (colorMap[t]) { - tags[k].color = colorMap[t]; - return true; - } - - return false; - }); - }); - return tags; - }; - - var _color = addColors; - - var unique$2 = function unique(arr) { - return arr.filter(function (v, i, a) { - return a.indexOf(v) === i; - }); - }; //add 'downward' tags (that immediately depend on this one) - - - var inferIsA = function inferIsA(tags) { - Object.keys(tags).forEach(function (k) { - var tag = tags[k]; - var len = tag.isA.length; - - for (var i = 0; i < len; i++) { - var down = tag.isA[i]; - - if (tags[down]) { - tag.isA = tag.isA.concat(tags[down].isA); - } - } // clean it up - - - tag.isA = unique$2(tag.isA); - }); - return tags; - }; - - var _isA = inferIsA; - - var unique$3 = function unique(arr) { - return arr.filter(function (v, i, a) { - return a.indexOf(v) === i; - }); - }; // crawl the tag-graph and infer any conflicts - // faster than doing this at tag-time - - - var inferNotA = function inferNotA(tags) { - var keys = Object.keys(tags); - keys.forEach(function (k) { - var tag = tags[k]; - tag.notA = tag.notA || []; - tag.isA.forEach(function (down) { - if (tags[down] && tags[down].notA) { - // borrow its conflicts - var notA = typeof tags[down].notA === 'string' ? [tags[down].isA] : tags[down].notA || []; - tag.notA = tag.notA.concat(notA); - } - }); // any tag that lists us as a conflict, we conflict it back. - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - - if (tags[key].notA.indexOf(k) !== -1) { - tag.notA.push(key); - } - } // clean it up - - - tag.notA = unique$3(tag.notA); - }); - return tags; - }; - - var _notA = inferNotA; - - // a lineage is all 'incoming' tags that have this as 'isA' - var inferLineage = function inferLineage(tags) { - var keys = Object.keys(tags); - keys.forEach(function (k) { - var tag = tags[k]; - tag.lineage = []; // find all tags with it in their 'isA' set - - for (var i = 0; i < keys.length; i++) { - if (tags[keys[i]].isA.indexOf(k) !== -1) { - tag.lineage.push(keys[i]); - } - } - }); - return tags; - }; - - var _lineage = inferLineage; - - var validate = function validate(tags) { - // cleanup format - Object.keys(tags).forEach(function (k) { - var tag = tags[k]; // ensure isA is an array - - tag.isA = tag.isA || []; - - if (typeof tag.isA === 'string') { - tag.isA = [tag.isA]; - } // ensure notA is an array - - - tag.notA = tag.notA || []; - - if (typeof tag.notA === 'string') { - tag.notA = [tag.notA]; - } - }); - return tags; - }; // build-out the tag-graph structure - - - var inferTags = function inferTags(tags) { - // validate data - tags = validate(tags); // build its 'down tags' - - tags = _isA(tags); // infer the conflicts - - tags = _notA(tags); // debug tag color - - tags = _color(tags); // find incoming links - - tags = _lineage(tags); - return tags; - }; - - var inference = inferTags; - - var addIn = function addIn(obj, tags) { - Object.keys(obj).forEach(function (k) { - tags[k] = obj[k]; - }); - }; - - var build = function build() { - var tags = {}; - addIn(nouns, tags); - addIn(verbs, tags); - addIn(values, tags); - addIn(misc, tags); // do the graph-stuff - - tags = inference(tags); - return tags; - }; - - var tags = build(); - - var _function = function _function(n) { - return n; - }; - - //safely add it to the lexicon - var addWord = function addWord(word, tag, lex) { - if (lex[word] !== undefined) { - if (typeof lex[word] === 'string') { - lex[word] = [lex[word]]; - } - - if (typeof tag === 'string') { - lex[word].push(tag); - } else { - lex[word] = lex[word].concat(tag); - } - } else { - lex[word] = tag; - } - }; // blast-out more forms for some given words - - - var addMore = function addMore(word, tag, world) { - var lexicon = world.words; - var transform = world.transforms; // cache multi-words - - var words = word.split(' '); - - if (words.length > 1) { - //cache the beginning word - world.hasCompound[words[0]] = true; - } // inflect our nouns - - - if (tag === 'Singular') { - var plural = transform.toPlural(word, world); - lexicon[plural] = lexicon[plural] || 'Plural'; // only if it's safe - } //conjugate our verbs - - - if (tag === 'Infinitive') { - var conj = transform.conjugate(word, world); - var tags = Object.keys(conj); - - for (var i = 0; i < tags.length; i++) { - var w = conj[tags[i]]; - lexicon[w] = lexicon[w] || tags[i]; // only if it's safe - } - } //derive more adjective forms - - - if (tag === 'Comparable') { - var _conj = transform.adjectives(word); - - var _tags = Object.keys(_conj); - - for (var _i = 0; _i < _tags.length; _i++) { - var _w = _conj[_tags[_i]]; - lexicon[_w] = lexicon[_w] || _tags[_i]; // only if it's safe - } - } //conjugate phrasal-verbs - - - if (tag === 'PhrasalVerb') { - //add original form - addWord(word, 'Infinitive', lexicon); //conjugate first word - - var _conj2 = transform.conjugate(words[0], world); - - var _tags2 = Object.keys(_conj2); - - for (var _i2 = 0; _i2 < _tags2.length; _i2++) { - //add it to our cache - world.hasCompound[_conj2[_tags2[_i2]]] = true; //first + last words - - var _w2 = _conj2[_tags2[_i2]] + ' ' + words[1]; - - addWord(_w2, _tags2[_i2], lexicon); - addWord(_w2, 'PhrasalVerb', lexicon); - } - } // inflect our demonyms - 'germans' - - - if (tag === 'Demonym') { - var _plural = transform.toPlural(word, world); - - lexicon[_plural] = lexicon[_plural] || ['Demonym', 'Plural']; // only if it's safe - } - }; // throw a bunch of words in our lexicon - // const doWord = function(words, tag, world) { - // let lexicon = world.words - // for (let i = 0; i < words.length; i++) { - // addWord(words[i], tag, lexicon) - // // do some fancier stuff - // addMore(words[i], tag, world) - // } - // } - - - var addWords = { - addWord: addWord, - addMore: addMore - }; - - // add words from plurals and conjugations data - var addIrregulars = function addIrregulars(world) { - //add irregular plural nouns - var nouns = world.irregulars.nouns; - var words = Object.keys(nouns); - - for (var i = 0; i < words.length; i++) { - var w = words[i]; - world.words[w] = 'Singular'; - world.words[nouns[w]] = 'Plural'; - } // add irregular verb conjugations - - - var verbs = world.irregulars.verbs; - var keys = Object.keys(verbs); - - var _loop = function _loop(_i) { - var inf = keys[_i]; //add only if it it's safe... - - world.words[inf] = world.words[inf] || 'Infinitive'; - var forms = world.transforms.conjugate(inf, world); - forms = Object.assign(forms, verbs[inf]); //add the others - - Object.keys(forms).forEach(function (tag) { - world.words[forms[tag]] = world.words[forms[tag]] || tag; - }); - }; - - for (var _i = 0; _i < keys.length; _i++) { - _loop(_i); - } - }; - - var addIrregulars_1 = addIrregulars; - - var irregulars = { - nouns: _object, - verbs: _object - }; //these behaviours are configurable & shared across some plugins - - var transforms = { - conjugate: _function, - adjectives: _function, - toPlural: _function, - toSingular: _function, - toInfinitive: _function - }; - var _isVerbose = false; - /** all configurable linguistic data */ - - var World = - /*#__PURE__*/ - function () { - function World() { - _classCallCheck(this, World); - - // quiet these properties from a console.log - Object.defineProperty(this, 'words', { - enumerable: false, - value: _object, - writable: true - }); - Object.defineProperty(this, 'hasCompound', { - enumerable: false, - value: {}, - writable: true - }); - Object.defineProperty(this, 'irregulars', { - enumerable: false, - value: irregulars, - writable: true - }); - Object.defineProperty(this, 'tags', { - enumerable: false, - value: Object.assign({}, tags), - writable: true - }); - Object.defineProperty(this, 'transforms', { - enumerable: false, - value: transforms, - writable: true - }); - Object.defineProperty(this, 'taggers', { - enumerable: false, - value: [], - writable: true - }); // add our compressed data to lexicon - - this.unpackWords(_object); // add our irregulars to lexicon - - this.addIrregulars(); // cache our abbreviations for our sentence-parser - - Object.defineProperty(this, 'cache', { - enumerable: false, - value: { - abbreviations: this.getByTag('Abbreviation') - } - }); - } - /** more logs for debugging */ - - - _createClass(World, [{ - key: "verbose", - value: function verbose(bool) { - _isVerbose = bool; - return this; - } - }, { - key: "isVerbose", - value: function isVerbose() { - return _isVerbose; - } - /** get all terms in our lexicon with this tag */ - - }, { - key: "getByTag", - value: function getByTag(tag) { - var lex = this.words; - var res = {}; - var words = Object.keys(lex); - - for (var i = 0; i < words.length; i++) { - if (typeof lex[words[i]] === 'string') { - if (lex[words[i]] === tag) { - res[words[i]] = true; - } - } else if (lex[words[i]].some(function (t) { - return t === tag; - })) { - res[words[i]] = true; - } - } - - return res; - } - /** augment our lingustic data with new data */ - - }, { - key: "unpackWords", - value: function unpackWords(lex) { - var tags = Object.keys(lex); - - for (var i = 0; i < tags.length; i++) { - var words = Object.keys(_function(lex[tags[i]])); - - for (var w = 0; w < words.length; w++) { - addWords.addWord(words[w], tags[i], this.words); // do some fancier stuff - - addWords.addMore(words[w], tags[i], this); - } - } - } - /** put new words into our lexicon, properly */ - - }, { - key: "addWords", - value: function addWords$1(obj) { - var keys = Object.keys(obj); - - for (var i = 0; i < keys.length; i++) { - var word = keys[i].toLowerCase(); - addWords.addWord(word, obj[keys[i]], this.words); // do some fancier stuff - - addWords.addMore(word, obj[keys[i]], this); - } - } - }, { - key: "addIrregulars", - value: function addIrregulars() { - addIrregulars_1(this); - - return this; - } - /** extend the compromise tagset */ - - }, { - key: "addTags", - value: function addTags(tags) { - tags = Object.assign({}, tags); - this.tags = Object.assign(this.tags, tags); // calculate graph implications for the new tags - - this.tags = inference(this.tags); - return this; - } - /** call methods after tagger runs */ - - }, { - key: "postProcess", - value: function postProcess(fn) { - this.taggers.push(fn); - return this; - } - /** helper method for logging + debugging */ - - }, { - key: "stats", - value: function stats() { - return { - words: Object.keys(this.words).length, - plurals: Object.keys(this.irregulars.nouns).length, - conjugations: Object.keys(this.irregulars.verbs).length, - compounds: Object.keys(this.hasCompound).length, - postProcessors: this.taggers.length - }; - } - }]); - - return World; - }(); // ¯\_(:/)_/¯ - - - var clone$1 = function clone(obj) { - return JSON.parse(JSON.stringify(obj)); - }; - /** produce a deep-copy of all lingustic data */ - - - World.prototype.clone = function () { - var w2 = new World(); // these are simple to copy: - - w2.words = Object.assign({}, this.words); - w2.hasCompound = Object.assign({}, this.hasCompound); //these ones are nested: - - w2.irregulars = clone$1(this.irregulars); - w2.tags = clone$1(this.tags); // these are functions - - w2.transforms = this.transforms; - w2.taggers = this.taggers; - return w2; - }; - - var World_1 = World; - - var _01Utils$1 = createCommonjsModule(function (module, exports) { - /** return the root, first document */ - exports.all = function () { - return this.parents()[0] || this; - }; - /** return the previous result */ - - - exports.parent = function () { - if (this.from) { - return this.from; - } - - return this; - }; - /** return a list of all previous results */ - - - exports.parents = function (n) { - var arr = []; - - var addParent = function addParent(doc) { - if (doc.from) { - arr.push(doc.from); - addParent(doc.from); - } - }; - - addParent(this); - arr = arr.reverse(); - - if (typeof n === 'number') { - return arr[n]; - } - - return arr; - }; - /** deep-copy the document, so that no references remain */ - - - exports.clone = function (doShallow) { - var list = this.list.map(function (ts) { - return ts.clone(doShallow); - }); - var tmp = this.buildFrom(list); - return tmp; - }; - /** how many seperate terms does the document have? */ - - - exports.wordCount = function () { - return this.list.reduce(function (count, p) { - count += p.wordCount(); - return count; - }, 0); - }; - - exports.wordcount = exports.wordCount; - /** turn on logging for decision-debugging */ - // exports.verbose = function(bool) { - // if (bool === undefined) { - // bool = true - // } - // this.world.verbose = bool - // } - }); - var _01Utils_1 = _01Utils$1.all; - var _01Utils_2 = _01Utils$1.parent; - var _01Utils_3 = _01Utils$1.parents; - var _01Utils_4 = _01Utils$1.clone; - var _01Utils_5 = _01Utils$1.wordCount; - var _01Utils_6 = _01Utils$1.wordcount; - - var _02Accessors = createCommonjsModule(function (module, exports) { - /** use only the first result(s) */ - exports.first = function (n) { - if (n === undefined) { - return this.get(0); - } - - return this.slice(0, n); - }; - /** use only the last result(s) */ - - - exports.last = function (n) { - if (n === undefined) { - return this.get(this.list.length - 1); - } - - var end = this.list.length; - return this.slice(end - n, end); - }; - /** grab a given subset of the results*/ - - - exports.slice = function (start, end) { - var list = this.list.slice(start, end); - return this.buildFrom(list); - }; - /* grab nth result */ - - - exports.eq = function (n) { - var p = this.list[n]; - - if (p === undefined) { - return this.buildFrom([]); - } - - return this.buildFrom([p]); - }; - - exports.get = exports.eq; - /** grab term[0] for every match */ - - exports.firstTerms = function () { - return this.match('^.'); - }; - - exports.firstTerm = exports.firstTerms; - /** grab the last term for every match */ - - exports.lastTerms = function () { - return this.match('.$'); - }; - - exports.lastTerm = exports.lastTerms; - /** return a flat array of term objects */ - - exports.termList = function (num) { - var arr = []; //'reduce' but faster - - for (var i = 0; i < this.list.length; i++) { - var terms = this.list[i].terms(); - - for (var o = 0; o < terms.length; o++) { - arr.push(terms[o]); //support .termList(4) - - if (num !== undefined && arr[num] !== undefined) { - return arr[num]; - } - } - } - - return arr; - }; - /* grab named capture group terms as object */ - - - var getGroups = function getGroups(doc) { - var res = {}; - var allGroups = {}; - - var _loop = function _loop(i) { - var phrase = doc.list[i]; - var groups = Object.keys(phrase.groups).map(function (k) { - return phrase.groups[k]; - }); - - for (var j = 0; j < groups.length; j++) { - var _groups$j = groups[j], - group = _groups$j.group, - start = _groups$j.start, - length = _groups$j.length; - - if (!allGroups[group]) { - allGroups[group] = []; - } - - allGroups[group].push(phrase.buildFrom(start, length)); - } - }; - - for (var i = 0; i < doc.list.length; i++) { - _loop(i); - } - - var keys = Object.keys(allGroups); - - for (var _i = 0; _i < keys.length; _i++) { - var key = keys[_i]; - res[key] = doc.buildFrom(allGroups[key]); - } - - return res; - }; - - var getOneName = function getOneName(doc, name) { - var arr = []; - - var _loop2 = function _loop2(i) { - var phrase = doc.list[i]; - var keys = Object.keys(phrase.groups); - keys = keys.filter(function (id) { - return phrase.groups[id].group === name; - }); - keys.forEach(function (id) { - arr.push(phrase.buildFrom(phrase.groups[id].start, phrase.groups[id].length)); - }); - }; - - for (var i = 0; i < doc.list.length; i++) { - _loop2(i); - } - - return doc.buildFrom(arr); - }; - /** grab named capture group results */ - - - exports.groups = function (target) { - if (target === undefined) { - return getGroups(this); - } - - if (typeof target === 'number') { - target = String(target); - } - - return getOneName(this, target) || this.buildFrom([]); - }; - - exports.group = exports.groups; - /** get the full-sentence each phrase belongs to */ - - exports.sentences = function (n) { - var arr = []; - this.list.forEach(function (p) { - arr.push(p.fullSentence()); - }); - - if (typeof n === 'number') { - return this.buildFrom([arr[n]]); - } - - return this.buildFrom(arr); - }; - - exports.sentence = exports.sentences; - }); - var _02Accessors_1 = _02Accessors.first; - var _02Accessors_2 = _02Accessors.last; - var _02Accessors_3 = _02Accessors.slice; - var _02Accessors_4 = _02Accessors.eq; - var _02Accessors_5 = _02Accessors.get; - var _02Accessors_6 = _02Accessors.firstTerms; - var _02Accessors_7 = _02Accessors.firstTerm; - var _02Accessors_8 = _02Accessors.lastTerms; - var _02Accessors_9 = _02Accessors.lastTerm; - var _02Accessors_10 = _02Accessors.termList; - var _02Accessors_11 = _02Accessors.groups; - var _02Accessors_12 = _02Accessors.group; - var _02Accessors_13 = _02Accessors.sentences; - var _02Accessors_14 = _02Accessors.sentence; - - // cache the easier conditions up-front - var cacheRequired = function cacheRequired(reg) { - var needTags = []; - var needWords = []; - reg.forEach(function (obj) { - if (obj.optional === true || obj.negative === true) { - return; - } - - if (obj.tag !== undefined) { - needTags.push(obj.tag); - } - - if (obj.word !== undefined) { - needWords.push(obj.word); - } - }); - return { - tags: needTags, - words: needWords - }; - }; - - var failFast$1 = function failFast(doc, regs) { - if (doc._cache && doc._cache.set === true) { - var _cacheRequired = cacheRequired(regs), - words = _cacheRequired.words, - tags = _cacheRequired.tags; //check required words - - - for (var i = 0; i < words.length; i++) { - if (doc._cache.words[words[i]] === undefined) { - return false; - } - } //check required tags - - - for (var _i = 0; _i < tags.length; _i++) { - if (doc._cache.tags[tags[_i]] === undefined) { - return false; - } - } - } - - return true; - }; - - var checkCache = failFast$1; - - var _03Match = createCommonjsModule(function (module, exports) { - /** return a new Doc, with this one as a parent */ - exports.match = function (reg, name) { - //parse-up the input expression - var regs = syntax_1(reg); - - if (regs.length === 0) { - return this.buildFrom([]); - } //check our cache, if it exists - - - if (checkCache(this, regs) === false) { - return this.buildFrom([]); - } //try expression on each phrase - - - var matches = this.list.reduce(function (arr, p) { - return arr.concat(p.match(regs)); - }, []); - - if (name !== undefined && name !== null && name !== '') { - return this.buildFrom(matches).groups(name); - } - - return this.buildFrom(matches); - }; - /** return all results except for this */ - - - exports.not = function (reg) { - //parse-up the input expression - var regs = syntax_1(reg); //if it's empty, return them all! - - if (regs.length === 0 || checkCache(this, regs) === false) { - return this; - } //try expression on each phrase - - - var matches = this.list.reduce(function (arr, p) { - return arr.concat(p.not(regs)); - }, []); - return this.buildFrom(matches); - }; - /** return only the first match */ - - - exports.matchOne = function (reg) { - var regs = syntax_1(reg); //check our cache, if it exists - - if (checkCache(this, regs) === false) { - return this.buildFrom([]); - } - - for (var i = 0; i < this.list.length; i++) { - var match = this.list[i].match(regs, true); - return this.buildFrom(match); - } - - return this.buildFrom([]); - }; - /** return each current phrase, only if it contains this match */ - - - exports["if"] = function (reg) { - var regs = syntax_1(reg); //consult our cache, if it exists - - if (checkCache(this, regs) === false) { - return this.buildFrom([]); - } - - var found = this.list.filter(function (p) { - return p.has(regs) === true; - }); - return this.buildFrom(found); - }; - /** Filter-out any current phrases that have this match*/ - - - exports.ifNo = function (reg) { - var regs = syntax_1(reg); - var found = this.list.filter(function (p) { - return p.has(regs) === false; - }); - return this.buildFrom(found); - }; - /**Return a boolean if this match exists */ - - - exports.has = function (reg) { - var regs = syntax_1(reg); //consult our cache, if it exists - - if (checkCache(this, regs) === false) { - return false; - } - - return this.list.some(function (p) { - return p.has(regs) === true; - }); - }; - /** match any terms after our matches, within the sentence */ - - - exports.lookAhead = function (reg) { - // find everything afterwards, by default - if (!reg) { - reg = '.*'; - } - - var regs = syntax_1(reg); - var matches = []; - this.list.forEach(function (p) { - matches = matches.concat(p.lookAhead(regs)); - }); - matches = matches.filter(function (p) { - return p; - }); - return this.buildFrom(matches); - }; - - exports.lookAfter = exports.lookAhead; - /** match any terms before our matches, within the sentence */ - - exports.lookBehind = function (reg) { - // find everything afterwards, by default - if (!reg) { - reg = '.*'; - } - - var regs = syntax_1(reg); - var matches = []; - this.list.forEach(function (p) { - matches = matches.concat(p.lookBehind(regs)); - }); - matches = matches.filter(function (p) { - return p; - }); - return this.buildFrom(matches); - }; - - exports.lookBefore = exports.lookBehind; - /** return all terms before a match, in each phrase */ - - exports.before = function (reg) { - var regs = syntax_1(reg); //only the phrases we care about - - var phrases = this["if"](regs).list; - var befores = phrases.map(function (p) { - var ids = p.terms().map(function (t) { - return t.id; - }); //run the search again - - var m = p.match(regs)[0]; - var index = ids.indexOf(m.start); //nothing is before a first-term match - - if (index === 0 || index === -1) { - return null; - } - - return p.buildFrom(p.start, index); - }); - befores = befores.filter(function (p) { - return p !== null; - }); - return this.buildFrom(befores); - }; - /** return all terms after a match, in each phrase */ - - - exports.after = function (reg) { - var regs = syntax_1(reg); //only the phrases we care about - - var phrases = this["if"](regs).list; - var befores = phrases.map(function (p) { - var terms = p.terms(); - var ids = terms.map(function (t) { - return t.id; - }); //run the search again - - var m = p.match(regs)[0]; - var index = ids.indexOf(m.start); //skip if nothing is after it - - if (index === -1 || !terms[index + m.length]) { - return null; - } //create the new phrase, after our match. - - - var id = terms[index + m.length].id; - var len = p.length - index - m.length; - return p.buildFrom(id, len); - }); - befores = befores.filter(function (p) { - return p !== null; - }); - return this.buildFrom(befores); - }; - /** return only results with this match afterwards */ - - - exports.hasAfter = function (reg) { - return this.filter(function (doc) { - return doc.lookAfter(reg).found; - }); - }; - /** return only results with this match before it */ - - - exports.hasBefore = function (reg) { - return this.filter(function (doc) { - return doc.lookBefore(reg).found; - }); - }; - }); - var _03Match_1 = _03Match.match; - var _03Match_2 = _03Match.not; - var _03Match_3 = _03Match.matchOne; - var _03Match_4 = _03Match.ifNo; - var _03Match_5 = _03Match.has; - var _03Match_6 = _03Match.lookAhead; - var _03Match_7 = _03Match.lookAfter; - var _03Match_8 = _03Match.lookBehind; - var _03Match_9 = _03Match.lookBefore; - var _03Match_10 = _03Match.before; - var _03Match_11 = _03Match.after; - var _03Match_12 = _03Match.hasAfter; - var _03Match_13 = _03Match.hasBefore; - - /** apply a tag, or tags to all terms */ - var tagTerms = function tagTerms(tag, doc, safe, reason) { - var tagList = []; - - if (typeof tag === 'string') { - tagList = tag.split(' '); - } //do indepenent tags for each term: - - - doc.list.forEach(function (p) { - var terms = p.terms(); // tagSafe - apply only to fitting terms - - if (safe === true) { - terms = terms.filter(function (t) { - return t.canBe(tag, doc.world); - }); - } - - terms.forEach(function (t, i) { - //fancy version: - if (tagList.length > 1) { - if (tagList[i] && tagList[i] !== '.') { - t.tag(tagList[i], reason, doc.world); - } - } else { - //non-fancy version (same tag for all terms) - t.tag(tag, reason, doc.world); - } - }); - }); - return; - }; - - var _setTag = tagTerms; - - /** Give all terms the given tag */ - - var tag$1 = function tag(tags, why) { - if (!tags) { - return this; - } - - _setTag(tags, this, false, why); - return this; - }; - /** Only apply tag to terms if it is consistent with current tags */ - - - var tagSafe$1 = function tagSafe(tags, why) { - if (!tags) { - return this; - } - - _setTag(tags, this, true, why); - return this; - }; - /** Remove this term from the given terms */ - - - var unTag$1 = function unTag(tags, why) { - var _this = this; - - this.list.forEach(function (p) { - p.terms().forEach(function (t) { - return t.unTag(tags, why, _this.world); - }); - }); - return this; - }; - /** return only the terms that can be this tag*/ - - - var canBe$2 = function canBe(tag) { - if (!tag) { - return this; - } - - var world = this.world; - var matches = this.list.reduce(function (arr, p) { - return arr.concat(p.canBe(tag, world)); - }, []); - return this.buildFrom(matches); - }; - - var _04Tag = { - tag: tag$1, - tagSafe: tagSafe$1, - unTag: unTag$1, - canBe: canBe$2 - }; - - /* run each phrase through a function, and create a new document */ - var map = function map(fn) { - var _this = this; - - if (!fn) { - return this; - } - - var list = this.list.map(function (p, i) { - var doc = _this.buildFrom([p]); - - doc.from = null; //it's not a child/parent - - var res = fn(doc, i); // if its a doc, return one result - - if (res && res.list && res.list[0]) { - return res.list[0]; - } - - return res; - }); //remove nulls - - list = list.filter(function (x) { - return x; - }); // return an empty response - - if (list.length === 0) { - return this.buildFrom(list); - } // if it is not a list of Phrase objects, then don't try to make a Doc object - - - if (_typeof(list[0]) !== 'object' || list[0].isA !== 'Phrase') { - return list; - } - - return this.buildFrom(list); - }; - /** run a function on each phrase */ - - - var forEach = function forEach(fn, detachParent) { - var _this2 = this; - - if (!fn) { - return this; - } - - this.list.forEach(function (p, i) { - var sub = _this2.buildFrom([p]); // if we're doing fancy insertions, we may want to skip updating the parent each time. - - - if (detachParent === true) { - sub.from = null; // - } - - fn(sub, i); - }); - return this; - }; - /** return only the phrases that return true */ - - - var filter = function filter(fn) { - var _this3 = this; - - if (!fn) { - return this; - } - - var list = this.list.filter(function (p, i) { - var doc = _this3.buildFrom([p]); - - doc.from = null; //it's not a child/parent - - return fn(doc, i); - }); - return this.buildFrom(list); - }; - /** return a document with only the first phrase that matches */ - - - var find = function find(fn) { - var _this4 = this; - - if (!fn) { - return this; - } - - var phrase = this.list.find(function (p, i) { - var doc = _this4.buildFrom([p]); - - doc.from = null; //it's not a child/parent - - return fn(doc, i); - }); - - if (phrase) { - return this.buildFrom([phrase]); - } - - return undefined; - }; - /** return true or false if there is one matching phrase */ - - - var some = function some(fn) { - var _this5 = this; - - if (!fn) { - return this; - } - - return this.list.some(function (p, i) { - var doc = _this5.buildFrom([p]); - - doc.from = null; //it's not a child/parent - - return fn(doc, i); - }); - }; - /** sample a subset of the results */ - - - var random = function random(n) { - if (!this.found) { - return this; - } - - var r = Math.floor(Math.random() * this.list.length); - - if (n === undefined) { - var list = [this.list[r]]; - return this.buildFrom(list); - } //prevent it from going over the end - - - if (r + n > this.length) { - r = this.length - n; - r = r < 0 ? 0 : r; - } - - return this.slice(r, r + n); - }; - /** combine each phrase into a new data-structure */ - // exports.reduce = function(fn, h) { - // let list = this.list.reduce((_h, ts) => { - // let doc = this.buildFrom([ts]) - // doc.from = null //it's not a child/parent - // return fn(_h, doc) - // }, h) - // return this.buildFrom(list) - // } - - - var _05Loops = { - map: map, - forEach: forEach, - filter: filter, - find: find, - some: some, - random: random - }; - - // const tokenize = require('../../01-tokenizer/02-words') - var tokenize = function tokenize(str) { - return str.split(/[ -]/g); - }; // take a list of strings - // look them up in the document - - - var buildTree = function buildTree(termList) { - var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var root = {}; // parse our input - - termList.forEach(function (str, i) { - var val = true; - - if (values[i] !== undefined) { - val = values[i]; - } // some rough normalization - - - str = (str || '').toLowerCase(); - str = str.replace(/[,;.!?]+$/, ''); - var arr = tokenize(str).map(function (s) { - return s.trim(); - }); - root[arr[0]] = root[arr[0]] || {}; - - if (arr.length === 1) { - root[arr[0]].value = val; - } else { - root[arr[0]].more = root[arr[0]].more || []; - root[arr[0]].more.push({ - rest: arr.slice(1), - value: val - }); - } - }); // sort by longest-first? - // console.log(JSON.stringify(root, null, 2)) - - return root; - }; - - var fastLookup = function fastLookup(termList, values, doc) { - var root = buildTree(termList, values); - var found = []; // each phrase - - var _loop = function _loop(i) { - var p = doc.list[i]; - var terms = p.terms(); - var words = terms.map(function (t) { - return t.reduced; - }); // each word - - var _loop2 = function _loop2(w) { - if (root[words[w]] !== undefined) { - // is it a multi-word match? - if (root[words[w]].more !== undefined) { - root[words[w]].more.forEach(function (more) { - // is it too-long? - if (words[w + more.rest.length] === undefined) { - return; - } // compare each subsequent term - - - var everyTerm = more.rest.every(function (word, r) { - return word === words[w + r + 1]; - }); - - if (everyTerm === true) { - found.push({ - id: p.terms()[w].id, - value: more.value, - length: more.rest.length + 1 - }); - } - }); - } // is it a single-word match? - - - if (root[words[w]].value !== undefined) { - found.push({ - id: p.terms()[w].id, - value: root[words[w]].value, - length: 1 - }); - } - } - }; - - for (var w = 0; w < words.length; w++) { - _loop2(w); - } - }; - - for (var i = 0; i < doc.list.length; i++) { - _loop(i); - } - - return found; - }; - - var _lookup = fastLookup; - - var _06Lookup = createCommonjsModule(function (module, exports) { - // compare one term and one match - // const doesMatch = function(term, str) { - // if (str === '') { - // return false - // } - // return term.reduced === str || term.implicit === str || term.root === str || term.text.toLowerCase() === str - // } - var isObject = function isObject(obj) { - return obj && Object.prototype.toString.call(obj) === '[object Object]'; - }; - /** lookup an array of words or phrases */ - - - exports.lookup = function (arr) { - var _this = this; - - var values = []; //is it a {key:val} object? - - var isObj = isObject(arr); - - if (isObj === true) { - arr = Object.keys(arr).map(function (k) { - values.push(arr[k]); - return k; - }); - } // support .lookup('foo') - - - if (typeof arr === 'string') { - arr = [arr]; - } //make sure we go fast. - - - if (this._cache.set !== true) { - this.cache(); - } - - var found = _lookup(arr, values, this); - var p = this.list[0]; // make object response - - if (isObj === true) { - var byVal = {}; - found.forEach(function (o) { - byVal[o.value] = byVal[o.value] || []; - byVal[o.value].push(p.buildFrom(o.id, o.length)); - }); - Object.keys(byVal).forEach(function (k) { - byVal[k] = _this.buildFrom(byVal[k]); - }); - return byVal; - } // otherwise, make array response: - - - found = found.map(function (o) { - return p.buildFrom(o.id, o.length); - }); - return this.buildFrom(found); - }; - - exports.lookUp = exports.lookup; - }); - var _06Lookup_1 = _06Lookup.lookup; - var _06Lookup_2 = _06Lookup.lookUp; - - /** freeze the current state of the document, for speed-purposes*/ - var cache = function cache(options) { - var _this = this; - - options = options || {}; - var words = {}; - var tags = {}; - this._cache.words = words; - this._cache.tags = tags; - this._cache.set = true; - this.list.forEach(function (p, i) { - p.cache = p.cache || {}; //p.terms get cached automatically - - var terms = p.terms(); // cache all the terms - - terms.forEach(function (t) { - if (words[t.reduced] && !words.hasOwnProperty(t.reduced)) { - return; //skip prototype words - } - - words[t.reduced] = words[t.reduced] || []; - words[t.reduced].push(i); - Object.keys(t.tags).forEach(function (tag) { - tags[tag] = tags[tag] || []; - tags[tag].push(i); - }); // cache root-form on Term, too - - if (options.root) { - t.setRoot(_this.world); - words[t.root] = true; - } - }); - }); - return this; - }; - /** un-freezes the current state of the document, so it may be transformed */ - - - var uncache = function uncache() { - this._cache = {}; - this.list.forEach(function (p) { - p.cache = {}; - }); // do parents too? - - this.parents().forEach(function (doc) { - doc._cache = {}; - doc.list.forEach(function (p) { - p.cache = {}; - }); - }); - return this; - }; - - var _07Cache = { - cache: cache, - uncache: uncache - }; - - var titleCase$3 = function titleCase(str) { - return str.charAt(0).toUpperCase() + str.substr(1); - }; - /** substitute-in new content */ - - - var replaceWith = function replaceWith(replace) { - var _this = this; - - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!replace) { - return this["delete"](); - } //support old-style params - - - if (options === true) { - options = { - keepTags: true - }; - } - - if (options === false) { - options = { - keepTags: false - }; - } - - options = options || {}; // clear the cache - - this.uncache(); // return this - - this.list.forEach(function (p) { - var input = replace; // accept a function for replace - - if (typeof replace === 'function') { - input = replace(p); - } - - var newPhrases; // accept a Doc object to replace - - if (input && _typeof(input) === 'object' && input.isA === 'Doc') { - newPhrases = input.list; - - _this.pool().merge(input.pool()); - } else if (typeof input === 'string') { - //input is a string - if (options.keepCase !== false && p.terms(0).isTitleCase()) { - input = titleCase$3(input); - } - - newPhrases = _01Tokenizer(input, _this.world, _this.pool()); //tag the new phrases - - var tmpDoc = _this.buildFrom(newPhrases); - - tmpDoc.tagger(); - } else { - return; //don't even bother - } // try to keep its old tags, if appropriate - - - if (options.keepTags === true) { - var oldTags = p.json({ - terms: { - tags: true - } - }).terms; - newPhrases[0].terms().forEach(function (t, i) { - if (oldTags[i]) { - t.tagSafe(oldTags[i].tags, 'keptTag', _this.world); - } - }); - } - - p.replace(newPhrases[0], _this); //Oneday: support multi-sentence replacements - }); - return this; - }; - /** search and replace match with new content */ - - - var replace$1 = function replace(match, _replace, options) { - // if there's no 2nd param, use replaceWith - if (_replace === undefined) { - return this.replaceWith(match, options); - } - - this.match(match).replaceWith(_replace, options); - return this; - }; - - var _01Replace = { - replaceWith: replaceWith, - replace: replace$1 - }; - - var _02Insert = createCommonjsModule(function (module, exports) { - /** add these new terms to the end*/ - exports.append = function (str) { - var _this = this; - - if (!str) { - return this; - } // clear the cache - - - this.uncache(); //add it to end of every phrase - - this.list.forEach(function (p) { - //build it - var phrase = _01Tokenizer(str, _this.world, _this.pool())[0]; //assume it's one sentence, for now - //tag it - - var tmpDoc = _this.buildFrom([phrase]); - - tmpDoc.tagger(); // push it onto the end - - p.append(phrase, _this); - }); - return this; - }; - - exports.insertAfter = exports.append; - exports.insertAt = exports.append; - /** add these new terms to the front*/ - - exports.prepend = function (str) { - var _this2 = this; - - if (!str) { - return this; - } // clear the cache - - - this.uncache(); //add it to start of every phrase - - this.list.forEach(function (p) { - //build it - var phrase = _01Tokenizer(str, _this2.world, _this2.pool())[0]; //assume it's one sentence, for now - //tag it - - var tmpDoc = _this2.buildFrom([phrase]); - - tmpDoc.tagger(); // add it to the start - - p.prepend(phrase, _this2); - }); - return this; - }; - - exports.insertBefore = exports.prepend; - /** add these new things to the end*/ - - exports.concat = function () { - // clear the cache - this.uncache(); - var list = this.list.slice(0); //repeat for any number of params - - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i]; //support a fresh string - - if (typeof arg === 'string') { - var arr = _01Tokenizer(arg, this.world); //TODO: phrase.tagger()? - - list = list.concat(arr); - } else if (arg.isA === 'Doc') { - list = list.concat(arg.list); - } else if (arg.isA === 'Phrase') { - list.push(arg); - } - } - - return this.buildFrom(list); - }; - /** fully remove these terms from the document */ - - - exports["delete"] = function (match) { - var _this3 = this; - - // clear the cache - this.uncache(); - var toRemove = this; - - if (match) { - toRemove = this.match(match); - } - - toRemove.list.forEach(function (phrase) { - return phrase["delete"](_this3); - }); - return this; - }; // aliases - - - exports.remove = exports["delete"]; - }); - var _02Insert_1 = _02Insert.append; - var _02Insert_2 = _02Insert.insertAfter; - var _02Insert_3 = _02Insert.insertAt; - var _02Insert_4 = _02Insert.prepend; - var _02Insert_5 = _02Insert.insertBefore; - var _02Insert_6 = _02Insert.concat; - var _02Insert_7 = _02Insert.remove; - - var shouldTrim = { - clean: true, - reduced: true, - root: true - }; - /** return the document as text */ - - var text$1 = function text(options) { - var _this = this; - - options = options || {}; //are we showing every phrase? - - var showFull = false; - - if (this.parents().length === 0) { - showFull = true; - } // cache roots, if necessary - - - if (options === 'root' || _typeof(options) === 'object' && options.root) { - this.list.forEach(function (p) { - p.terms().forEach(function (t) { - if (t.root === null) { - t.setRoot(_this.world); - } - }); - }); - } - - var txt = this.list.reduce(function (str, p, i) { - var trimPre = !showFull && i === 0; - var trimPost = !showFull && i === _this.list.length - 1; - return str + p.text(options, trimPre, trimPost); - }, ''); // clumsy final trim of leading/trailing whitespace - - if (shouldTrim[options] === true || options.reduced === true || options.clean === true || options.root === true) { - txt = txt.trim(); - } - - return txt; - }; - - var _01Text = { - text: text$1 - }; - - // get all character startings in doc - var termOffsets = function termOffsets(doc) { - var elapsed = 0; - var index = 0; - var offsets = {}; - doc.termList().forEach(function (term) { - offsets[term.id] = { - index: index, - start: elapsed + term.pre.length, - length: term.text.length - }; - elapsed += term.pre.length + term.text.length + term.post.length; - index += 1; - }); - return offsets; - }; - - var calcOffset = function calcOffset(doc, result, options) { - // calculate offsets for each term - var offsets = termOffsets(doc.all()); // add index values - - if (options.terms.index || options.index) { - result.forEach(function (o) { - o.terms.forEach(function (t) { - t.index = offsets[t.id].index; - }); - o.index = o.terms[0].index; - }); - } // add offset values - - - if (options.terms.offset || options.offset) { - result.forEach(function (o) { - o.terms.forEach(function (t) { - t.offset = offsets[t.id] || {}; - }); // let len = o.terms.reduce((n, t, i) => { - // n += t.offset.length || 0 - // //add whitespace, too - // console.log(t.post) - // return n - // }, 0) - - o.offset = o.terms[0].offset; - o.offset.length = o.text.length; - }); - } - }; - - var _offset = calcOffset; - - var _02Json = createCommonjsModule(function (module, exports) { - var jsonDefaults = { - text: true, - terms: true, - trim: true - }; //some options have dependents - - var setOptions = function setOptions(options) { - options = Object.assign({}, jsonDefaults, options); - - if (options.unique) { - options.reduced = true; - } //offset calculation requires these options to be on - - - if (options.offset) { - options.text = true; - - if (!options.terms || options.terms === true) { - options.terms = {}; - } - - options.terms.offset = true; - } - - if (options.index || options.terms.index) { - options.terms = options.terms === true ? {} : options.terms; - options.terms.id = true; - } - - return options; - }; - /** pull out desired metadata from the document */ - - - exports.json = function () { - var _this = this; - - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - //support json(3) format - if (typeof options === 'number' && this.list[options]) { - return this.list[options].json(jsonDefaults); - } - - options = setOptions(options); // cache root strings beforehand, if necessary - - if (options.root === true) { - this.list.forEach(function (p) { - p.terms().forEach(function (t) { - if (t.root === null) { - t.setRoot(_this.world); - } - }); - }); - } - - var result = this.list.map(function (p) { - return p.json(options, _this.world); - }); // add offset and index data for each term - - if (options.terms.offset || options.offset || options.terms.index || options.index) { - _offset(this, result, options); - } // add frequency #s - - - if (options.frequency || options.freq || options.count) { - var obj = {}; - this.list.forEach(function (p) { - var str = p.text('reduced'); - obj[str] = obj[str] || 0; - obj[str] += 1; - }); - this.list.forEach(function (p, i) { - result[i].count = obj[p.text('reduced')]; - }); - } // remove duplicates - - - if (options.unique) { - var already = {}; - result = result.filter(function (o) { - if (already[o.reduced] === true) { - return false; - } - - already[o.reduced] = true; - return true; - }); - } - - return result; - }; //aliases - - - exports.data = exports.json; - }); - var _02Json_1 = _02Json.json; - var _02Json_2 = _02Json.data; - - var _debug = createCommonjsModule(function (module) { - // https://stackoverflow.com/questions/9781218/how-to-change-node-jss-console-font-color - var reset = '\x1b[0m'; - - var padEnd = function padEnd(str, width) { - str = str.toString(); - - while (str.length < width) { - str += ' '; - } - - return str; - }; - - function isClientSide() { - return typeof window !== 'undefined' && window.document; - } // some nice colors for client-side debug - - - var css = { - green: '#7f9c6c', - red: '#914045', - blue: '#6699cc', - magenta: '#6D5685', - cyan: '#2D85A8', - yellow: '#e6d7b3', - black: '#303b50' - }; - - var logClientSide = function logClientSide(doc) { - var tagset = doc.world.tags; - doc.list.forEach(function (p) { - console.log('\n%c"' + p.text() + '"', 'color: #e6d7b3;'); - var terms = p.terms(); - terms.forEach(function (t) { - var tags = Object.keys(t.tags); - var text = t.text || '-'; - - if (t.implicit) { - text = '[' + t.implicit + ']'; - } - - var word = "'" + text + "'"; - word = padEnd(word, 8); - var found = tags.find(function (tag) { - return tagset[tag] && tagset[tag].color; - }); - var color = 'steelblue'; - - if (tagset[found]) { - color = tagset[found].color; - color = css[color]; - } - - console.log(" ".concat(word, " - %c").concat(tags.join(', ')), "color: ".concat(color || 'steelblue', ";")); - }); - }); - }; //cheaper than requiring chalk - - - var cli = { - green: function green(str) { - return '\x1b[32m' + str + reset; - }, - red: function red(str) { - return '\x1b[31m' + str + reset; - }, - blue: function blue(str) { - return '\x1b[34m' + str + reset; - }, - magenta: function magenta(str) { - return '\x1b[35m' + str + reset; - }, - cyan: function cyan(str) { - return '\x1b[36m' + str + reset; - }, - yellow: function yellow(str) { - return '\x1b[33m' + str + reset; - }, - black: function black(str) { - return '\x1b[30m' + str + reset; - } - }; - - var tagString = function tagString(tags, world) { - tags = tags.map(function (tag) { - if (!world.tags.hasOwnProperty(tag)) { - return tag; - } - - var c = world.tags[tag].color || 'blue'; - return cli[c](tag); - }); - return tags.join(', '); - }; //output some helpful stuff to the console - - - var debug = function debug(doc) { - if (isClientSide()) { - logClientSide(doc); - return doc; - } - - console.log(cli.blue('=====')); - doc.list.forEach(function (p) { - console.log(cli.blue(' -----')); - var terms = p.terms(); - terms.forEach(function (t) { - var tags = Object.keys(t.tags); - var text = t.text || '-'; - - if (t.implicit) { - text = '[' + t.implicit + ']'; - } - - { - text = cli.yellow(text); - } - - var word = "'" + text + "'"; - word = padEnd(word, 18); - var str = cli.blue(' | ') + word + ' - ' + tagString(tags, doc.world); - console.log(str); - }); - }); - console.log(''); - return doc; - }; - - module.exports = debug; - }); - - var topk = function topk(doc) { - var list = doc.json({ - text: false, - terms: false, - reduced: true - }); // combine them - - var obj = {}; - list.forEach(function (o) { - if (!obj[o.reduced]) { - o.count = 0; - obj[o.reduced] = o; - } - - obj[o.reduced].count += 1; - }); - var arr = Object.keys(obj).map(function (k) { - return obj[k]; - }); // sort them - - arr.sort(function (a, b) { - if (a.count > b.count) { - return -1; - } else if (a.count < b.count) { - return 1; - } - - return 0; - }); - return arr; - }; - - var _topk = topk; - - /** pretty-print the current document and its tags */ - - var debug_1 = function debug_1() { - _debug(this); - return this; - }; - /** some named output formats */ - - - var out = function out(method) { - if (method === 'text') { - return this.text(); - } - - if (method === 'normal') { - return this.text('normal'); - } - - if (method === 'json') { - return this.json(); - } - - if (method === 'offset' || method === 'offsets') { - return this.json({ - offset: true - }); - } - - if (method === 'array') { - return this.json({ - terms: false - }).map(function (obj) { - return obj.text; - }); - } - - if (method === 'freq' || method === 'frequency') { - return _topk(this); - } - - if (method === 'terms') { - var list = []; - this.json({ - text: false, - terms: { - text: true - } - }).forEach(function (obj) { - var terms = obj.terms.map(function (t) { - return t.text; - }); - terms = terms.filter(function (t) { - return t; - }); - list = list.concat(terms); - }); - return list; - } - - if (method === 'tags') { - return this.list.map(function (p) { - return p.terms().reduce(function (h, t) { - h[t.clean || t.implicit] = Object.keys(t.tags); - return h; - }, {}); - }); - } - - if (method === 'debug') { - _debug(this); - return this; - } - - return this.text(); - }; - - var _03Out = { - debug: debug_1, - out: out - }; - - var methods$2 = { - /** alphabetical order */ - alpha: function alpha(a, b) { - var left = a.text('clean'); - var right = b.text('clean'); - - if (left < right) { - return -1; - } - - if (left > right) { - return 1; - } - - return 0; - }, - - /** count the # of characters of each match */ - length: function length(a, b) { - var left = a.text().trim().length; - var right = b.text().trim().length; - - if (left < right) { - return 1; - } - - if (left > right) { - return -1; - } - - return 0; - }, - - /** count the # of terms in each match */ - wordCount: function wordCount(a, b) { - var left = a.wordCount(); - var right = b.wordCount(); - - if (left < right) { - return 1; - } - - if (left > right) { - return -1; - } - - return 0; - } - }; - /** sort by # of duplicates in the document*/ - - var byFreq = function byFreq(doc) { - var counts = {}; - var options = { - "case": true, - punctuation: false, - whitespace: true, - unicode: true - }; - doc.list.forEach(function (p) { - var str = p.text(options); - counts[str] = counts[str] || 0; - counts[str] += 1; - }); // sort by freq - - doc.list.sort(function (a, b) { - var left = counts[a.text(options)]; - var right = counts[b.text(options)]; - - if (left < right) { - return 1; - } - - if (left > right) { - return -1; - } - - return 0; - }); - return doc; - }; // order results 'chronologically', or document-order - - - var sortSequential = function sortSequential(doc) { - var order = {}; - doc.json({ - terms: { - offset: true - } - }).forEach(function (o) { - order[o.terms[0].id] = o.terms[0].offset.start; - }); - doc.list = doc.list.sort(function (a, b) { - if (order[a.start] > order[b.start]) { - return 1; - } else if (order[a.start] < order[b.start]) { - return -1; - } - - return 0; - }); - return doc; - }; //aliases - - - methods$2.alphabetical = methods$2.alpha; - methods$2.wordcount = methods$2.wordCount; // aliases for sequential ordering - - var seqNames = { - index: true, - sequence: true, - seq: true, - sequential: true, - chron: true, - chronological: true - }; - /** re-arrange the order of the matches (in place) */ - - var sort = function sort(input) { - input = input || 'alpha'; //do this one up-front - - if (input === 'freq' || input === 'frequency' || input === 'topk') { - return byFreq(this); - } - - if (seqNames.hasOwnProperty(input)) { - return sortSequential(this); - } - - input = methods$2[input] || input; // apply sort method on each phrase - - if (typeof input === 'function') { - this.list = this.list.sort(input); - return this; - } - - return this; - }; - /** reverse the order of the matches, but not the words */ - - - var reverse = function reverse() { - var list = [].concat(this.list); - list = list.reverse(); - return this.buildFrom(list); - }; - /** remove any duplicate matches */ - - - var unique$4 = function unique() { - var list = [].concat(this.list); - var obj = {}; - list = list.filter(function (p) { - var str = p.text('reduced').trim(); - - if (obj.hasOwnProperty(str) === true) { - return false; - } - - obj[str] = true; - return true; - }); - return this.buildFrom(list); - }; - - var _01Sort = { - sort: sort, - reverse: reverse, - unique: unique$4 - }; - - var isPunct = /[\[\]{}⟨⟩:,،、‒–—―…‹›«»‐\-;\/⁄·*\•^†‡°¡¿※№÷׺ª%‰=‱¶§~|‖¦©℗®℠™¤₳฿]/g; - var quotes = /['‘’“”"′″‴]+/g; - var methods$3 = { - // cleanup newlines and extra spaces - whitespace: function whitespace(doc) { - var termArr = doc.list.map(function (ts) { - return ts.terms(); - }); - termArr.forEach(function (terms, o) { - terms.forEach(function (t, i) { - // keep dashes between words - if (t.hasDash() === true) { - t.post = ' - '; - return; - } // remove existing spaces - - - t.pre = t.pre.replace(/\s/g, ''); - t.post = t.post.replace(/\s/g, ''); //last word? ensure there's a next sentence. - - if (terms.length - 1 === i && !termArr[o + 1]) { - return; - } // no extra spaces for contractions - - - if (t.implicit && Boolean(t.text) === true) { - return; - } // no extra spaces for hyphenated words - - - if (t.hasHyphen() === true) { - return; - } - - t.post += ' '; - }); - }); - }, - punctuation: function punctuation(termList) { - termList.forEach(function (t) { - // space between hyphenated words - if (t.hasHyphen() === true) { - t.post = ' '; - } - - t.pre = t.pre.replace(isPunct, ''); - t.post = t.post.replace(isPunct, ''); // elipses - - t.post = t.post.replace(/\.\.\./, ''); // only allow one exclamation - - if (/!/.test(t.post) === true) { - t.post = t.post.replace(/!/g, ''); - t.post = '!' + t.post; - } // only allow one question mark - - - if (/\?/.test(t.post) === true) { - t.post = t.post.replace(/[\?!]*/, ''); - t.post = '?' + t.post; - } - }); - }, - unicode: function unicode(termList) { - termList.forEach(function (t) { - if (t.isImplicit() === true) { - return; - } - - t.text = unicode_1(t.text); - }); - }, - quotations: function quotations(termList) { - termList.forEach(function (t) { - t.post = t.post.replace(quotes, ''); - t.pre = t.pre.replace(quotes, ''); - }); - }, - adverbs: function adverbs(doc) { - doc.match('#Adverb').not('(not|nary|seldom|never|barely|almost|basically|so)').remove(); - }, - // remove the '.' from 'Mrs.' (safely) - abbreviations: function abbreviations(doc) { - doc.list.forEach(function (ts) { - var terms = ts.terms(); - terms.forEach(function (t, i) { - if (t.tags.Abbreviation === true && terms[i + 1]) { - t.post = t.post.replace(/^\./, ''); - } - }); - }); - } - }; - var _methods = methods$3; - - var defaults = { - // light - whitespace: true, - unicode: true, - punctuation: true, - emoji: true, - acronyms: true, - abbreviations: true, - // medium - "case": false, - contractions: false, - parentheses: false, - quotations: false, - adverbs: false, - // heavy (loose legibility) - possessives: false, - verbs: false, - nouns: false, - honorifics: false // pronouns: true, - - }; - var mapping = { - light: {}, - medium: { - "case": true, - contractions: true, - parentheses: true, - quotations: true, - adverbs: true - } - }; - mapping.heavy = Object.assign({}, mapping.medium, { - possessives: true, - verbs: true, - nouns: true, - honorifics: true - }); - /** common ways to clean-up the document, and reduce noise */ - - var normalize = function normalize(options) { - options = options || {}; // support named forms - - if (typeof options === 'string') { - options = mapping[options] || {}; - } // set defaults - - - options = Object.assign({}, defaults, options); // clear the cache - - this.uncache(); - var termList = this.termList(); // lowercase things - - if (options["case"]) { - this.toLowerCase(); - } //whitespace - - - if (options.whitespace) { - _methods.whitespace(this); - } // unicode: é -> e - - - if (options.unicode) { - _methods.unicode(termList); - } //punctuation - keep sentence punctation, quotes, parenths - - - if (options.punctuation) { - _methods.punctuation(termList); - } // remove ':)' - - - if (options.emoji) { - this.remove('(#Emoji|#Emoticon)'); - } // 'f.b.i.' -> 'FBI' - - - if (options.acronyms) { - this.acronyms().strip(); // .toUpperCase() - } // remove period from abbreviations - - - if (options.abbreviations) { - _methods.abbreviations(this); - } // --Medium methods-- - // `isn't` -> 'is not' - - - if (options.contraction || options.contractions) { - this.contractions().expand(); - } // '(word)' -> 'word' - - - if (options.parentheses) { - this.parentheses().unwrap(); - } // remove "" punctuation - - - if (options.quotations || options.quotes) { - _methods.quotations(termList); - } // remove any un-necessary adverbs - - - if (options.adverbs) { - _methods.adverbs(this); - } // --Heavy methods-- - // `cory hart's -> cory hart' - - - if (options.possessive || options.possessives) { - this.possessives().strip(); - } // 'he walked' -> 'he walk' - - - if (options.verbs) { - this.verbs().toInfinitive(); - } // 'three dogs' -> 'three dog' - - - if (options.nouns || options.plurals) { - this.nouns().toSingular(); - } // remove 'Mr.' from 'Mr John Smith' - - - if (options.honorifics) { - this.remove('#Honorific'); - } - - return this; - }; - - var _02Normalize = { - normalize: normalize - }; - - var _03Split = createCommonjsModule(function (module, exports) { - /** return a Document with three parts for every match - * seperate everything before the word, as a new phrase - */ - exports.splitOn = function (reg) { - // if there's no match, split parent, instead - if (!reg) { - var parent = this.parent(); - return parent.splitOn(this); - } //start looking for a match.. - - - var regs = syntax_1(reg); - var matches = []; - this.list.forEach(function (p) { - var foundEm = p.match(regs); //no match here, add full sentence - - if (foundEm.length === 0) { - matches.push(p); - return; - } // we found something here. - - - var carry = p; - foundEm.forEach(function (found) { - var parts = carry.splitOn(found); // add em in - - if (parts.before) { - matches.push(parts.before); - } - - if (parts.match) { - matches.push(parts.match); - } // start matching now on the end - - - carry = parts.after; - }); // add that last part - - if (carry) { - matches.push(carry); - } - }); - return this.buildFrom(matches); - }; - /** return a Document with two parts for every match - * seperate everything after the word, as a new phrase - */ - - - exports.splitAfter = function (reg) { - // if there's no match, split parent, instead - if (!reg) { - var parent = this.parent(); - return parent.splitAfter(this); - } // start looking for our matches - - - var regs = syntax_1(reg); - var matches = []; - this.list.forEach(function (p) { - var foundEm = p.match(regs); //no match here, add full sentence - - if (foundEm.length === 0) { - matches.push(p); - return; - } // we found something here. - - - var carry = p; - foundEm.forEach(function (found) { - var parts = carry.splitOn(found); // add em in - - if (parts.before && parts.match) { - // merge these two together - parts.before.length += parts.match.length; - matches.push(parts.before); - } else if (parts.match) { - matches.push(parts.match); - } // start matching now on the end - - - carry = parts.after; - }); // add that last part - - if (carry) { - matches.push(carry); - } - }); - return this.buildFrom(matches); - }; - - exports.split = exports.splitAfter; //i guess? - - /** return a Document with two parts for every match */ - - exports.splitBefore = function (reg) { - // if there's no match, split parent, instead - if (!reg) { - var parent = this.parent(); - return parent.splitBefore(this); - } //start looking for a match.. - - - var regs = syntax_1(reg); - var matches = []; - this.list.forEach(function (p) { - var foundEm = p.match(regs); //no match here, add full sentence - - if (foundEm.length === 0) { - matches.push(p); - return; - } // we found something here. - - - var carry = p; - foundEm.forEach(function (found) { - var parts = carry.splitOn(found); // add before part in - - if (parts.before) { - matches.push(parts.before); - } // merge match+after - - - if (parts.match && parts.after) { - parts.match.length += parts.after.length; - } // start matching now on the end - - - carry = parts.match; - }); // add that last part - - if (carry) { - matches.push(carry); - } - }); - return this.buildFrom(matches); - }; - /** split a document into labeled sections */ - - - exports.segment = function (regs, options) { - regs = regs || {}; - options = options || { - text: true - }; - var doc = this; - var keys = Object.keys(regs); // split em - - keys.forEach(function (k) { - doc = doc.splitOn(k); - }); //add labels for each section - - doc.list.forEach(function (p) { - for (var i = 0; i < keys.length; i += 1) { - if (p.has(keys[i])) { - p.segment = regs[keys[i]]; - return; - } - } - }); - return doc.list.map(function (p) { - var res = p.json(options); - res.segment = p.segment || null; - return res; - }); - }; - }); - var _03Split_1 = _03Split.splitOn; - var _03Split_2 = _03Split.splitAfter; - var _03Split_3 = _03Split.split; - var _03Split_4 = _03Split.splitBefore; - var _03Split_5 = _03Split.segment; - - var eachTerm = function eachTerm(doc, fn) { - var world = doc.world; - doc.list.forEach(function (p) { - p.terms().forEach(function (t) { - return t[fn](world); - }); - }); - return doc; - }; - /** turn every letter of every term to lower-cse */ - - - var toLowerCase = function toLowerCase() { - return eachTerm(this, 'toLowerCase'); - }; - /** turn every letter of every term to upper case */ - - - var toUpperCase = function toUpperCase() { - return eachTerm(this, 'toUpperCase'); - }; - /** upper-case the first letter of each term */ - - - var toTitleCase = function toTitleCase() { - return eachTerm(this, 'toTitleCase'); - }; - /** remove whitespace and title-case each term */ - - - var toCamelCase = function toCamelCase() { - this.list.forEach(function (p) { - //remove whitespace - var terms = p.terms(); - terms.forEach(function (t, i) { - if (i !== 0) { - t.toTitleCase(); - } - - if (i !== terms.length - 1) { - t.post = ''; - } - }); - }); // this.tag('#CamelCase', 'toCamelCase') - - return this; - }; - - var _04Case = { - toLowerCase: toLowerCase, - toUpperCase: toUpperCase, - toTitleCase: toTitleCase, - toCamelCase: toCamelCase - }; - - var _05Whitespace = createCommonjsModule(function (module, exports) { - /** add this punctuation or whitespace before each match: */ - exports.pre = function (str, concat) { - if (str === undefined) { - return this.list[0].terms(0).pre; - } - - this.list.forEach(function (p) { - var term = p.terms(0); - - if (concat === true) { - term.pre += str; - } else { - term.pre = str; - } - }); - return this; - }; - /** add this punctuation or whitespace after each match: */ - - - exports.post = function (str, concat) { - // return array of post strings - if (str === undefined) { - return this.list.map(function (p) { - var terms = p.terms(); - var term = terms[terms.length - 1]; - return term.post; - }); - } // set post string on all ends - - - this.list.forEach(function (p) { - var terms = p.terms(); - var term = terms[terms.length - 1]; - - if (concat === true) { - term.post += str; - } else { - term.post = str; - } - }); - return this; - }; - /** remove start and end whitespace */ - - - exports.trim = function () { - this.list = this.list.map(function (p) { - return p.trim(); - }); - return this; - }; - /** connect words with hyphen, and remove whitespace */ - - - exports.hyphenate = function () { - this.list.forEach(function (p) { - var terms = p.terms(); //remove whitespace - - terms.forEach(function (t, i) { - if (i !== 0) { - t.pre = ''; - } - - if (terms[i + 1]) { - t.post = '-'; - } - }); - }); - return this; - }; - /** remove hyphens between words, and set whitespace */ - - - exports.dehyphenate = function () { - var hasHyphen = /(-|–|—)/; - this.list.forEach(function (p) { - var terms = p.terms(); //remove whitespace - - terms.forEach(function (t) { - if (hasHyphen.test(t.post)) { - t.post = ' '; - } - }); - }); - return this; - }; - - exports.deHyphenate = exports.dehyphenate; - /** add quotations around these matches */ - - exports.toQuotations = function (start, end) { - start = start || "\""; - end = end || "\""; - this.list.forEach(function (p) { - var terms = p.terms(); - terms[0].pre = start + terms[0].pre; - var last = terms[terms.length - 1]; - last.post = end + last.post; - }); - return this; - }; - - exports.toQuotation = exports.toQuotations; - /** add brackets around these matches */ - - exports.toParentheses = function (start, end) { - start = start || "("; - end = end || ")"; - this.list.forEach(function (p) { - var terms = p.terms(); - terms[0].pre = start + terms[0].pre; - var last = terms[terms.length - 1]; - last.post = end + last.post; - }); - return this; - }; - }); - var _05Whitespace_1 = _05Whitespace.pre; - var _05Whitespace_2 = _05Whitespace.post; - var _05Whitespace_3 = _05Whitespace.trim; - var _05Whitespace_4 = _05Whitespace.hyphenate; - var _05Whitespace_5 = _05Whitespace.dehyphenate; - var _05Whitespace_6 = _05Whitespace.deHyphenate; - var _05Whitespace_7 = _05Whitespace.toQuotations; - var _05Whitespace_8 = _05Whitespace.toQuotation; - var _05Whitespace_9 = _05Whitespace.toParentheses; - - /** make all phrases into one phrase */ - var join = function join(str) { - // clear the cache - this.uncache(); // make one large phrase - 'main' - - var main = this.list[0]; - var before = main.length; - var removed = {}; - - for (var i = 1; i < this.list.length; i++) { - var p = this.list[i]; - removed[p.start] = true; - var term = main.lastTerm(); // add whitespace between them - - if (str) { - term.post += str; - } // main -> p - - - term.next = p.start; // main <- p - - p.terms(0).prev = term.id; - main.length += p.length; - main.cache = {}; - } // parents are bigger than than their children. - // when we increase a child, we increase their parent too. - - - var increase = main.length - before; - this.parents().forEach(function (doc) { - // increase length on each effected phrase - doc.list.forEach(function (p) { - var terms = p.terms(); - - for (var _i = 0; _i < terms.length; _i++) { - if (terms[_i].id === main.start) { - p.length += increase; - break; - } - } - - p.cache = {}; - }); // remove redundant phrases now - - doc.list = doc.list.filter(function (p) { - return removed[p.start] !== true; - }); - }); // return one major phrase - - return this.buildFrom([main]); - }; - - var _06Join = { - join: join - }; - - var postPunct = /[,\)"';:\-–—\.…]/; // const irregulars = { - // 'will not': `won't`, - // 'i am': `i'm`, - // } - - var setContraction = function setContraction(m, suffix) { - if (!m.found) { - return; - } - - var terms = m.termList(); //avoid any problematic punctuation - - for (var i = 0; i < terms.length - 1; i++) { - var t = terms[i]; - - if (postPunct.test(t.post)) { - return; - } - } // set them as implict - - - terms.forEach(function (t) { - t.implicit = t.clean; - }); // perform the contraction - - terms[0].text += suffix; // clean-up the others - - terms.slice(1).forEach(function (t) { - t.text = ''; - }); - - for (var _i = 0; _i < terms.length - 1; _i++) { - var _t = terms[_i]; - _t.post = _t.post.replace(/ /, ''); - } - }; - /** turn 'i am' into i'm */ - - - var contract = function contract() { - var doc = this.not('@hasContraction'); // we are -> we're - - var m = doc.match('(we|they|you) are'); - setContraction(m, "'re"); // they will -> they'll - - m = doc.match('(he|she|they|it|we|you) will'); - setContraction(m, "'ll"); // she is -> she's - - m = doc.match('(he|she|they|it|we) is'); - setContraction(m, "'s"); // spencer is -> spencer's - - m = doc.match('#Person is'); - setContraction(m, "'s"); // spencer would -> spencer'd - - m = doc.match('#Person would'); - setContraction(m, "'d"); // would not -> wouldn't - - m = doc.match('(is|was|had|would|should|could|do|does|have|has|can) not'); - setContraction(m, "n't"); // i have -> i've - - m = doc.match('(i|we|they) have'); - setContraction(m, "'ve"); // would have -> would've - - m = doc.match('(would|should|could) have'); - setContraction(m, "'ve"); // i am -> i'm - - m = doc.match('i am'); - setContraction(m, "'m"); // going to -> gonna - - m = doc.match('going to'); - return this; - }; - - var _07Contract = { - contract: contract - }; - - var methods$4 = Object.assign({}, _01Utils$1, _02Accessors, _03Match, _04Tag, _05Loops, _06Lookup, _07Cache, _01Replace, _02Insert, _01Text, _02Json, _03Out, _01Sort, _02Normalize, _03Split, _04Case, _05Whitespace, _06Join, _07Contract); - - var methods$5 = {}; // allow helper methods like .adjectives() and .adverbs() - - var arr = [['terms', '.'], ['hyphenated', '@hasHyphen .'], ['adjectives', '#Adjective'], ['hashTags', '#HashTag'], ['emails', '#Email'], ['emoji', '#Emoji'], ['emoticons', '#Emoticon'], ['atMentions', '#AtMention'], ['urls', '#Url'], ['adverbs', '#Adverb'], ['pronouns', '#Pronoun'], ['conjunctions', '#Conjunction'], ['prepositions', '#Preposition']]; - arr.forEach(function (a) { - methods$5[a[0]] = function (n) { - var m = this.match(a[1]); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }; - }); // aliases - - methods$5.emojis = methods$5.emoji; - methods$5.atmentions = methods$5.atMentions; - methods$5.words = methods$5.terms; - /** return anything tagged as a phone number */ - - methods$5.phoneNumbers = function (n) { - var m = this.splitAfter('@hasComma'); - m = m.match('#PhoneNumber+'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }; - /** Deprecated: please use compromise-numbers plugin */ - - - methods$5.money = function (n) { - var m = this.match('#Money #Currency?'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }; - /** return all cities, countries, addresses, and regions */ - - - methods$5.places = function (n) { - // don't split 'paris, france' - var keep = this.match('(#City && @hasComma) (#Region|#Country)'); // but split the other commas - - var m = this.not(keep).splitAfter('@hasComma'); // combine them back together - - m = m.concat(keep); - m.sort('index'); - m = m.match('#Place+'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }; - /** return all schools, businesses and institutions */ - - - methods$5.organizations = function (n) { - var m = this.clauses(); - m = m.match('#Organization+'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }; //combine them with .topics() method - - - methods$5.entities = function (n) { - var r = this.clauses(); // Find people, places, and organizations - - var yup = r.people(); - yup = yup.concat(r.places()); - yup = yup.concat(r.organizations()); - var ignore = ['someone', 'man', 'woman', 'mother', 'brother', 'sister', 'father']; - yup = yup.not(ignore); //return them to normal ordering - - yup.sort('sequence'); // yup.unique() //? not sure - - if (typeof n === 'number') { - yup = yup.get(n); - } - - return yup; - }; //aliases - - - methods$5.things = methods$5.entities; - methods$5.topics = methods$5.entities; - var _simple = methods$5; - - var underOver = /^(under|over)-?/; - /** match a word-sequence, like 'super bowl' in the lexicon */ - - var tryMultiple = function tryMultiple(terms, t, world) { - var lex = world.words; //try a two-word version - - var txt = terms[t].reduced + ' ' + terms[t + 1].reduced; - - if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { - terms[t].tag(lex[txt], 'lexicon-two', world); - terms[t + 1].tag(lex[txt], 'lexicon-two', world); - return 1; - } //try a three-word version? - - - if (t + 2 < terms.length) { - txt += ' ' + terms[t + 2].reduced; - - if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { - terms[t].tag(lex[txt], 'lexicon-three', world); - terms[t + 1].tag(lex[txt], 'lexicon-three', world); - terms[t + 2].tag(lex[txt], 'lexicon-three', world); - return 2; - } - } //try a four-word version? - - - if (t + 3 < terms.length) { - txt += ' ' + terms[t + 3].reduced; - - if (lex[txt] !== undefined && lex.hasOwnProperty(txt) === true) { - terms[t].tag(lex[txt], 'lexicon-four', world); - terms[t + 1].tag(lex[txt], 'lexicon-four', world); - terms[t + 2].tag(lex[txt], 'lexicon-four', world); - terms[t + 3].tag(lex[txt], 'lexicon-four', world); - return 3; - } - } - - return 0; - }; - /** look at each word in our list of known-words */ - - - var checkLexicon = function checkLexicon(terms, world) { - var lex = world.words; - var hasCompound = world.hasCompound; // use reduced? - //go through each term, and check the lexicon - - for (var t = 0; t < terms.length; t += 1) { - var str = terms[t].clean; //is it the start of a compound word, like 'super bowl'? - - if (hasCompound[str] === true && t + 1 < terms.length) { - var foundWords = tryMultiple(terms, t, world); - - if (foundWords > 0) { - t += foundWords; //skip any already-found words - - continue; - } - } //try one-word lexicon - - - if (lex[str] !== undefined && lex.hasOwnProperty(str) === true) { - terms[t].tag(lex[str], 'lexicon', world); - continue; - } // look at reduced version of term, too - - - if (str !== terms[t].reduced && lex.hasOwnProperty(terms[t].reduced) === true) { - terms[t].tag(lex[terms[t].reduced], 'lexicon', world); - continue; - } // prefix strip: try to match 'take' for 'undertake' - - - if (underOver.test(str) === true) { - var noPrefix = str.replace(underOver, ''); - - if (lex.hasOwnProperty(noPrefix) === true) { - terms[t].tag(lex[noPrefix], 'noprefix-lexicon', world); - } - } - } - - return terms; - }; - - var _01Lexicon = checkLexicon; - - var smallTagger = function smallTagger(doc) { - var terms = doc.termList(); - _01Lexicon(terms, doc.world); - return doc; - }; - - var tiny = smallTagger; - - var addMethod = function addMethod(Doc) { - /** */ - var Abbreviations = - /*#__PURE__*/ - function (_Doc) { - _inherits(Abbreviations, _Doc); - - function Abbreviations() { - _classCallCheck(this, Abbreviations); - - return _possibleConstructorReturn(this, _getPrototypeOf(Abbreviations).apply(this, arguments)); - } - - _createClass(Abbreviations, [{ - key: "stripPeriods", - value: function stripPeriods() { - this.termList().forEach(function (t) { - if (t.tags.Abbreviation === true && t.next) { - t.post = t.post.replace(/^\./, ''); - } - - var str = t.text.replace(/\./, ''); - t.set(str); - }); - return this; - } - }, { - key: "addPeriods", - value: function addPeriods() { - this.termList().forEach(function (t) { - t.post = t.post.replace(/^\./, ''); - t.post = '.' + t.post; - }); - return this; - } - }]); - - return Abbreviations; - }(Doc); - - Abbreviations.prototype.unwrap = Abbreviations.prototype.stripPeriods; - - Doc.prototype.abbreviations = function (n) { - var match = this.match('#Abbreviation'); - - if (typeof n === 'number') { - match = match.get(n); - } - - return new Abbreviations(match.list, this, this.world); - }; - - return Doc; - }; - - var Abbreviations = addMethod; - - var hasPeriod = /\./; - - var addMethod$1 = function addMethod(Doc) { - /** */ - var Acronyms = - /*#__PURE__*/ - function (_Doc) { - _inherits(Acronyms, _Doc); - - function Acronyms() { - _classCallCheck(this, Acronyms); - - return _possibleConstructorReturn(this, _getPrototypeOf(Acronyms).apply(this, arguments)); - } - - _createClass(Acronyms, [{ - key: "stripPeriods", - value: function stripPeriods() { - this.termList().forEach(function (t) { - var str = t.text.replace(/\./g, ''); - t.set(str); - }); - return this; - } - }, { - key: "addPeriods", - value: function addPeriods() { - this.termList().forEach(function (t) { - var str = t.text.replace(/\./g, ''); - str = str.split('').join('.'); // don't add a end-period if there's a sentence-end one - - if (hasPeriod.test(t.post) === false) { - str += '.'; - } - - t.set(str); - }); - return this; - } - }]); - - return Acronyms; - }(Doc); - - Acronyms.prototype.unwrap = Acronyms.prototype.stripPeriods; - Acronyms.prototype.strip = Acronyms.prototype.stripPeriods; - - Doc.prototype.acronyms = function (n) { - var match = this.match('#Acronym'); - - if (typeof n === 'number') { - match = match.get(n); - } - - return new Acronyms(match.list, this, this.world); - }; - - return Doc; - }; - - var Acronyms = addMethod$1; - - var addMethod$2 = function addMethod(Doc) { - /** split into approximate sub-sentence phrases */ - Doc.prototype.clauses = function (n) { - // an awkward way to disambiguate a comma use - var commas = this["if"]('@hasComma').notIf('@hasComma @hasComma') //fun, cool... - .notIf('@hasComma . .? (and|or) .') //cool, and fun - .notIf('(#City && @hasComma) #Country') //'toronto, canada' - .notIf('(#Date && @hasComma) #Year') //'july 6, 1992' - .notIf('@hasComma (too|also)$') //at end of sentence - .match('@hasComma'); - var found = this.splitAfter(commas); - var quotes = found.quotations(); - found = found.splitOn(quotes); - var parentheses = found.parentheses(); - found = found.splitOn(parentheses); // it is cool and it is .. - - var conjunctions = found["if"]('#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb').match('#Conjunction'); - found = found.splitBefore(conjunctions); // if it is this then that - - var condition = found["if"]('if .{2,9} then .').match('then'); - found = found.splitBefore(condition); // misc clause partitions - - found = found.splitBefore('as well as .'); - found = found.splitBefore('such as .'); - found = found.splitBefore('in addition to .'); // semicolons, dashes - - found = found.splitAfter('@hasSemicolon'); - found = found.splitAfter('@hasDash'); // passive voice verb - '.. which was robbed is empty' - // let passive = found.match('#Noun (which|that) (was|is) #Adverb? #PastTense #Adverb?') - // if (passive.found) { - // found = found.splitAfter(passive) - // } - // //which the boy robbed - // passive = found.match('#Noun (which|that) the? #Noun+ #Adverb? #PastTense #Adverb?') - // if (passive.found) { - // found = found.splitAfter(passive) - // } - // does there appear to have relative/subordinate clause still? - - var tooLong = found.filter(function (d) { - return d.wordCount() > 5 && d.match('#Verb+').length >= 2; - }); - - if (tooLong.found) { - var m = tooLong.splitAfter('#Noun .* #Verb .* #Noun+'); - found = found.splitOn(m.eq(0)); - } - - if (typeof n === 'number') { - found = found.get(n); - } - - return new Doc(found.list, this, this.world); - }; - - return Doc; - }; - - var Clauses = addMethod$2; - - var addMethod$3 = function addMethod(Doc) { - /** */ - var Contractions = - /*#__PURE__*/ - function (_Doc) { - _inherits(Contractions, _Doc); - - function Contractions(list, from, world) { - var _this; - - _classCallCheck(this, Contractions); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Contractions).call(this, list, from, world)); - _this.contracted = null; - return _this; - } - /** turn didn't into 'did not' */ - - - _createClass(Contractions, [{ - key: "expand", - value: function expand() { - this.list.forEach(function (p) { - var terms = p.terms(); //change the case? - - var isTitlecase = terms[0].isTitleCase(); - terms.forEach(function (t, i) { - //use the implicit text - t.set(t.implicit || t.text); - t.implicit = undefined; //add whitespace - - if (i < terms.length - 1 && t.post === '') { - t.post += ' '; - } - }); //set titlecase - - if (isTitlecase) { - terms[0].toTitleCase(); - } - }); - return this; - } - }]); - - return Contractions; - }(Doc); //find contractable, expanded-contractions - // const findExpanded = r => { - // let remain = r.not('#Contraction') - // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)') - // m.concat(remain.match('(they|we|you|i) have')) - // m.concat(remain.match('i am')) - // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not')) - // return m - // } - - - Doc.prototype.contractions = function (n) { - //find currently-contracted - var found = this.match('@hasContraction+'); //(may want to split these up) - //todo: split consecutive contractions - - if (typeof n === 'number') { - found = found.get(n); - } - - return new Contractions(found.list, this, this.world); - }; //aliases - - - Doc.prototype.expanded = Doc.prototype.isExpanded; - Doc.prototype.contracted = Doc.prototype.isContracted; - return Doc; - }; - - var Contractions = addMethod$3; - - var addMethod$4 = function addMethod(Doc) { - //pull it apart.. - var parse = function parse(doc) { - var things = doc.splitAfter('@hasComma').splitOn('(and|or) not?').not('(and|or) not?'); - var beforeLast = doc.match('[.] (and|or)', 0); - return { - things: things, - conjunction: doc.match('(and|or) not?'), - beforeLast: beforeLast, - hasOxford: beforeLast.has('@hasComma') - }; - }; - /** cool, fun, and nice */ - - - var Lists = - /*#__PURE__*/ - function (_Doc) { - _inherits(Lists, _Doc); - - function Lists() { - _classCallCheck(this, Lists); - - return _possibleConstructorReturn(this, _getPrototypeOf(Lists).apply(this, arguments)); - } - - _createClass(Lists, [{ - key: "conjunctions", - - /** coordinating conjunction */ - value: function conjunctions() { - return this.match('(and|or)'); - } - /** split-up by list object */ - - }, { - key: "parts", - value: function parts() { - return this.splitAfter('@hasComma').splitOn('(and|or) not?'); - } - /** remove the conjunction */ - - }, { - key: "items", - value: function items() { - return parse(this).things; - } - /** add a new unit to the list */ - - }, { - key: "add", - value: function add(str) { - this.forEach(function (p) { - var beforeLast = parse(p).beforeLast; - beforeLast.append(str); //add a comma to it - - beforeLast.termList(0).addPunctuation(','); - }); - return this; - } - /** remove any matching unit from the list */ - - }, { - key: "remove", - value: function remove(match) { - return this.items()["if"](match).remove(); - } - /** return only lists that use a serial comma */ - - }, { - key: "hasOxfordComma", - value: function hasOxfordComma() { - return this.filter(function (doc) { - return parse(doc).hasOxford; - }); - } - }, { - key: "addOxfordComma", - value: function addOxfordComma() { - var items = this.items(); - var needsComma = items.eq(items.length - 2); - - if (needsComma.found && needsComma.has('@hasComma') === false) { - needsComma.post(', '); - } - - return this; - } - }, { - key: "removeOxfordComma", - value: function removeOxfordComma() { - var items = this.items(); - var needsComma = items.eq(items.length - 2); - - if (needsComma.found && needsComma.has('@hasComma') === true) { - needsComma.post(' '); - } - - return this; - } - }]); - - return Lists; - }(Doc); // aliases - - - Lists.prototype.things = Lists.prototype.items; - - Doc.prototype.lists = function (n) { - var m = this["if"]('@hasComma+ .? (and|or) not? .'); // person-list - - var nounList = m.match('(#Noun|#Adjective|#Determiner|#Article)+ #Conjunction not? (#Article|#Determiner)? #Adjective? #Noun+')["if"]('#Noun'); - var adjList = m.match('(#Adjective|#Adverb)+ #Conjunction not? #Adverb? #Adjective+'); - var verbList = m.match('(#Verb|#Adverb)+ #Conjunction not? #Adverb? #Verb+'); - var result = nounList.concat(adjList); - result = result.concat(verbList); - result = result["if"]('@hasComma'); - - if (typeof n === 'number') { - result = m.get(n); - } - - return new Lists(result.list, this, this.world); - }; - - return Doc; - }; - - var Lists = addMethod$4; - - var noPlural = '(#Pronoun|#Place|#Value|#Person|#Uncountable|#Month|#WeekDay|#Holiday|#Possessive)'; //certain words can't be plural, like 'peace' - - var hasPlural = function hasPlural(doc) { - if (doc.has('#Plural') === true) { - return true; - } // these can't be plural - - - if (doc.has(noPlural) === true) { - return false; - } - - return true; - }; - - var hasPlural_1 = hasPlural; - - var irregulars$1 = { - hour: 'an', - heir: 'an', - heirloom: 'an', - honest: 'an', - honour: 'an', - honor: 'an', - uber: 'an' //german u - - }; //pronounced letters of acronyms that get a 'an' - - var an_acronyms = { - a: true, - e: true, - f: true, - h: true, - i: true, - l: true, - m: true, - n: true, - o: true, - r: true, - s: true, - x: true - }; //'a' regexes - - var a_regexs = [/^onc?e/i, //'wu' sound of 'o' - /^u[bcfhjkqrstn][aeiou]/i, // 'yu' sound for hard 'u' - /^eul/i]; - - var makeArticle = function makeArticle(doc) { - //no 'the john smith', but 'a london hotel' - if (doc.has('#Person') || doc.has('#Place')) { - return ''; - } //no a/an if it's plural - - - if (doc.has('#Plural')) { - return 'the'; - } - - var str = doc.text('normal').trim(); //explicit irregular forms - - if (irregulars$1.hasOwnProperty(str)) { - return irregulars$1[str]; - } //spelled-out acronyms - - - var firstLetter = str.substr(0, 1); - - if (doc.has('^@isAcronym') && an_acronyms.hasOwnProperty(firstLetter)) { - return 'an'; - } //'a' regexes - - - for (var i = 0; i < a_regexs.length; i++) { - if (a_regexs[i].test(str)) { - return 'a'; - } - } //basic vowel-startings - - - if (/^[aeiou]/i.test(str)) { - return 'an'; - } - - return 'a'; - }; - - var getArticle = makeArticle; - - //similar to plural/singularize rules, but not the same - var isPlural = [/(antenn|formul|nebul|vertebr|vit)ae$/i, /(octop|vir|radi|nucle|fung|cact|stimul)i$/i, /men$/i, /.tia$/i, /(m|l)ice$/i]; //similar to plural/singularize rules, but not the same - - var isSingular = [/(ax|test)is$/i, /(octop|vir|radi|nucle|fung|cact|stimul)us$/i, /(octop|vir)i$/i, /(rl)f$/i, /(alias|status)$/i, /(bu)s$/i, /(al|ad|at|er|et|ed|ad)o$/i, /(ti)um$/i, /(ti)a$/i, /sis$/i, /(?:(^f)fe|(lr)f)$/i, /hive$/i, /(^aeiouy|qu)y$/i, /(x|ch|ss|sh|z)$/i, /(matr|vert|ind|cort)(ix|ex)$/i, /(m|l)ouse$/i, /(m|l)ice$/i, /(antenn|formul|nebul|vertebr|vit)a$/i, /.sis$/i, /^(?!talis|.*hu)(.*)man$/i]; - var _rules = { - isSingular: isSingular, - isPlural: isPlural - }; - - var endS = /s$/; // double-check this term, if it is not plural, or singular. - // (this is a partial copy of ./tagger/fallbacks/plural) - // fallback plural if it ends in an 's'. - - var isPlural$1 = function isPlural(str) { - // isSingular suffix rules - if (_rules.isSingular.find(function (reg) { - return reg.test(str); - })) { - return false; - } // does it end in an s? - - - if (endS.test(str) === true) { - return true; - } // is it a plural like 'fungi'? - - - if (_rules.isPlural.find(function (reg) { - return reg.test(str); - })) { - return true; - } - - return null; - }; - - var isPlural_1 = isPlural$1; - - var exceptions = { - he: 'his', - she: 'hers', - they: 'theirs', - we: 'ours', - i: 'mine', - you: 'yours', - her: 'hers', - their: 'theirs', - our: 'ours', - my: 'mine', - your: 'yours' - }; // turn "David" to "David's" - - var toPossessive = function toPossessive(doc) { - var str = doc.text('text').trim(); // exceptions - - if (exceptions.hasOwnProperty(str)) { - doc.replaceWith(exceptions[str], true); - doc.tag('Possessive', 'toPossessive'); - return; - } // flanders' - - - if (/s$/.test(str)) { - str += "'"; - doc.replaceWith(str, true); - doc.tag('Possessive', 'toPossessive'); - return; - } //normal form: - - - str += "'s"; - doc.replaceWith(str, true); - doc.tag('Possessive', 'toPossessive'); - return; - }; - - var toPossessive_1 = toPossessive; - - // .nouns() supports some noun-phrase-ish groupings - // pull these apart, if necessary - var parse$1 = function parse(doc) { - var res = { - main: doc - }; //support 'mayor of chicago' as one noun-phrase - - if (doc.has('#Noun (of|by|for) .')) { - var m = doc.splitAfter('[#Noun+]', 0); - res.main = m.eq(0); - res.post = m.eq(1); - } - - return res; - }; - - var parse_1 = parse$1; - - var methods$6 = { - /** overload the original json with noun information */ - json: function json(options) { - var n = null; - - if (typeof options === 'number') { - n = options; - options = null; - } - - options = options || { - text: true, - normal: true, - trim: true, - terms: true - }; - var res = []; - this.forEach(function (doc) { - var json = doc.json(options)[0]; - json.article = getArticle(doc); - res.push(json); - }); - - if (n !== null) { - return res[n]; - } - - return res; - }, - - /** get all adjectives describing this noun*/ - adjectives: function adjectives() { - var list = this.lookAhead('^(that|who|which)? (was|is|will)? be? #Adverb? #Adjective+'); - list = list.concat(this.lookBehind('#Adjective+ #Adverb?$')); - list = list.match('#Adjective'); - return list.sort('index'); - }, - isPlural: function isPlural() { - return this["if"]('#Plural'); //assume tagger has run? - }, - hasPlural: function hasPlural() { - return this.filter(function (d) { - return hasPlural_1(d); - }); - }, - toPlural: function toPlural(agree) { - var _this = this; - - var toPlural = this.world.transforms.toPlural; - this.forEach(function (doc) { - if (doc.has('#Plural') || hasPlural_1(doc) === false) { - return; - } // double-check it isn't an un-tagged plural - - - var main = parse_1(doc).main; - var str = main.text('reduced'); - - if (!main.has('#Singular') && isPlural_1(str) === true) { - return; - } - - str = toPlural(str, _this.world); - main.replace(str).tag('#Plural'); // 'an apple' -> 'apples' - - if (agree) { - var an = main.lookBefore('(an|a) #Adjective?$').not('#Adjective'); - - if (an.found === true) { - an.remove(); - } - } - }); - return this; - }, - toSingular: function toSingular(agree) { - var _this2 = this; - - var toSingular = this.world.transforms.toSingular; - this.forEach(function (doc) { - if (doc.has('^#Singular+$') || hasPlural_1(doc) === false) { - return; - } // double-check it isn't an un-tagged plural - - - var main = parse_1(doc).main; - var str = main.text('reduced'); - - if (!main.has('#Plural') && isPlural_1(str) !== true) { - return; - } - - str = toSingular(str, _this2.world); - main.replace(str).tag('#Singular'); // add an article - - if (agree) { - // 'apples' -> 'an apple' - var start = doc; - var adj = doc.lookBefore('#Adjective'); - - if (adj.found) { - start = adj; - } - - var article = getArticle(start); - start.insertBefore(article); - } - }); - return this; - }, - toPossessive: function toPossessive() { - this.forEach(function (d) { - toPossessive_1(d); - }); - return this; - } - }; - var methods_1 = methods$6; - - var addMethod$5 = function addMethod(Doc) { - /** */ - var Nouns = - /*#__PURE__*/ - function (_Doc) { - _inherits(Nouns, _Doc); - - function Nouns() { - _classCallCheck(this, Nouns); - - return _possibleConstructorReturn(this, _getPrototypeOf(Nouns).apply(this, arguments)); - } - - return Nouns; - }(Doc); // add-in our methods - - - Object.assign(Nouns.prototype, methods_1); - - Doc.prototype.nouns = function (n) { - // don't split 'paris, france' - var keep = this.match('(#City && @hasComma) (#Region|#Country)'); // but split the other commas - - var m = this.not(keep).splitAfter('@hasComma'); // combine them back together - - m = m.concat(keep); - m = m.match('#Noun+ (of|by)? the? #Noun+?'); //nouns that we don't want in these results, for weird reasons - - m = m.not('#Pronoun'); - m = m.not('(there|these)'); - m = m.not('(#Month|#WeekDay)'); //allow Durations, Holidays - // //allow possessives like "spencer's", but not generic ones like, - - m = m.not('(my|our|your|their|her|his)'); - m = m.not('(of|for|by|the)$'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return new Nouns(m.list, this, this.world); - }; - - return Doc; - }; - - var Nouns = addMethod$5; - - var open = /\(/; - var close = /\)/; - - var addMethod$6 = function addMethod(Doc) { - /** anything between (these things) */ - var Parentheses = - /*#__PURE__*/ - function (_Doc) { - _inherits(Parentheses, _Doc); - - function Parentheses() { - _classCallCheck(this, Parentheses); - - return _possibleConstructorReturn(this, _getPrototypeOf(Parentheses).apply(this, arguments)); - } - - _createClass(Parentheses, [{ - key: "unwrap", - - /** remove the parentheses characters */ - value: function unwrap() { - this.list.forEach(function (p) { - var first = p.terms(0); - first.pre = first.pre.replace(open, ''); - var last = p.lastTerm(); - last.post = last.post.replace(close, ''); - }); - return this; - } - }]); - - return Parentheses; - }(Doc); - - Doc.prototype.parentheses = function (n) { - var list = []; - this.list.forEach(function (p) { - var terms = p.terms(); //look for opening brackets - - for (var i = 0; i < terms.length; i += 1) { - var t = terms[i]; - - if (open.test(t.pre)) { - //look for the closing bracket.. - for (var o = i; o < terms.length; o += 1) { - if (close.test(terms[o].post)) { - var len = o - i + 1; - list.push(p.buildFrom(t.id, len)); - i = o; - break; - } - } - } - } - }); //support nth result - - if (typeof n === 'number') { - if (list[n]) { - list = [list[n]]; - } else { - list = []; - } - - return new Parentheses(list, this, this.world); - } - - return new Parentheses(list, this, this.world); - }; - - return Doc; - }; - - var Parentheses = addMethod$6; - - var addMethod$7 = function addMethod(Doc) { - /** */ - var Possessives = - /*#__PURE__*/ - function (_Doc) { - _inherits(Possessives, _Doc); - - function Possessives(list, from, world) { - var _this; - - _classCallCheck(this, Possessives); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(Possessives).call(this, list, from, world)); - _this.contracted = null; - return _this; - } - /** turn didn't into 'did not' */ - - - _createClass(Possessives, [{ - key: "strip", - value: function strip() { - this.list.forEach(function (p) { - var terms = p.terms(); - terms.forEach(function (t) { - var str = t.text.replace(/'s$/, ''); - t.set(str || t.text); - }); - }); - return this; - } - }]); - - return Possessives; - }(Doc); //find contractable, expanded-contractions - // const findExpanded = r => { - // let remain = r.not('#Contraction') - // let m = remain.match('(#Noun|#QuestionWord) (#Copula|did|do|have|had|could|would|will)') - // m.concat(remain.match('(they|we|you|i) have')) - // m.concat(remain.match('i am')) - // m.concat(remain.match('(#Copula|#Modal|do|does|have|has|can|will) not')) - // return m - // } - - - Doc.prototype.possessives = function (n) { - //find currently-contracted - var found = this.match('#Noun+? #Possessive'); //todo: split consecutive contractions - - if (typeof n === 'number') { - found = found.get(n); - } - - return new Possessives(found.list, this, this.world); - }; - - return Doc; - }; - - var Possessives = addMethod$7; - - var pairs = { - "\"": "\"", - // 'StraightDoubleQuotes' - "\uFF02": "\uFF02", - // 'StraightDoubleQuotesWide' - "'": "'", - // 'StraightSingleQuotes' - "\u201C": "\u201D", - // 'CommaDoubleQuotes' - "\u2018": "\u2019", - // 'CommaSingleQuotes' - "\u201F": "\u201D", - // 'CurlyDoubleQuotesReversed' - "\u201B": "\u2019", - // 'CurlySingleQuotesReversed' - "\u201E": "\u201D", - // 'LowCurlyDoubleQuotes' - "\u2E42": "\u201D", - // 'LowCurlyDoubleQuotesReversed' - "\u201A": "\u2019", - // 'LowCurlySingleQuotes' - "\xAB": "\xBB", - // 'AngleDoubleQuotes' - "\u2039": "\u203A", - // 'AngleSingleQuotes' - // Prime 'non quotation' - "\u2035": "\u2032", - // 'PrimeSingleQuotes' - "\u2036": "\u2033", - // 'PrimeDoubleQuotes' - "\u2037": "\u2034", - // 'PrimeTripleQuotes' - // Prime 'quotation' variation - "\u301D": "\u301E", - // 'PrimeDoubleQuotes' - "`": "\xB4", - // 'PrimeSingleQuotes' - "\u301F": "\u301E" // 'LowPrimeDoubleQuotesReversed' - - }; - var hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')'); - - var addMethod$8 = function addMethod(Doc) { - /** "these things" */ - var Quotations = - /*#__PURE__*/ - function (_Doc) { - _inherits(Quotations, _Doc); - - function Quotations() { - _classCallCheck(this, Quotations); - - return _possibleConstructorReturn(this, _getPrototypeOf(Quotations).apply(this, arguments)); - } - - _createClass(Quotations, [{ - key: "unwrap", - - /** remove the quote characters */ - value: function unwrap() { - return this; - } - }]); - - return Quotations; - }(Doc); - - Doc.prototype.quotations = function (n) { - var list = []; - this.list.forEach(function (p) { - var terms = p.terms(); //look for opening quotes - - for (var i = 0; i < terms.length; i += 1) { - var t = terms[i]; - - if (hasOpen.test(t.pre)) { - var _char = (t.pre.match(hasOpen) || [])[0]; - var want = pairs[_char]; // if (!want) { - // console.warn('missing quote char ' + char) - // } - //look for the closing bracket.. - - for (var o = i; o < terms.length; o += 1) { - if (terms[o].post.indexOf(want) !== -1) { - var len = o - i + 1; - list.push(p.buildFrom(t.id, len)); - i = o; - break; - } - } - } - } - }); //support nth result - - if (typeof n === 'number') { - if (list[n]) { - list = [list[n]]; - } else { - list = []; - } - - return new Quotations(list, this, this.world); - } - - return new Quotations(list, this, this.world); - }; // alias - - - Doc.prototype.quotes = Doc.prototype.quotations; - return Doc; - }; - - var Quotations = addMethod$8; - - // walked => walk - turn a verb into it's root form - var toInfinitive = function toInfinitive(parsed, world) { - var verb = parsed.verb; //1. if it's already infinitive - - var str = verb.text('normal'); - - if (verb.has('#Infinitive')) { - return str; - } // 2. world transform does the heavy-lifting - - - var tense = null; - - if (verb.has('#PastTense')) { - tense = 'PastTense'; - } else if (verb.has('#Gerund')) { - tense = 'Gerund'; - } else if (verb.has('#PresentTense')) { - tense = 'PresentTense'; - } else if (verb.has('#Participle')) { - tense = 'Participle'; - } else if (verb.has('#Actor')) { - tense = 'Actor'; - } - - return world.transforms.toInfinitive(str, world, tense); - }; - - var toInfinitive_1 = toInfinitive; - - // spencer walks -> singular - // we walk -> plural - // the most-recent noun-phrase, before this verb. - var findNoun = function findNoun(vb) { - var noun = vb.lookBehind('#Noun+').last(); - return noun; - }; //sometimes you can tell if a verb is plural/singular, just by the verb - // i am / we were - // othertimes you need its subject 'we walk' vs 'i walk' - - - var isPlural$2 = function isPlural(parsed) { - var vb = parsed.verb; - - if (vb.has('(are|were|does)') || parsed.auxiliary.has('(are|were|does)')) { - return true; - } - - if (vb.has('(is|am|do|was)') || parsed.auxiliary.has('(is|am|do|was)')) { - return false; - } //consider its prior noun - - - var noun = findNoun(vb); - - if (noun.has('(we|they|you)')) { - return true; - } - - if (noun.has('#Plural')) { - return true; - } - - if (noun.has('#Singular')) { - return false; - } - - return null; - }; - - var isPlural_1$1 = isPlural$2; - - // #Copula : is -> 'is not' - // #PastTense : walked -> did not walk - // #PresentTense : walks -> does not walk - // #Gerund : walking: -> not walking - // #Infinitive : walk -> do not walk - - var toNegative = function toNegative(parsed, world) { - var vb = parsed.verb; // if it's already negative... - - if (parsed.negative.found) { - return; - } // would walk -> would not walk - - - if (parsed.auxiliary.found) { - parsed.auxiliary.eq(0).append('not'); - return; - } // is walking -> is not walking - - - if (vb.has('(#Copula|will|has|had|do)')) { - vb.append('not'); - return; - } // walked -> did not walk - - - if (vb.has('#PastTense')) { - var inf = toInfinitive_1(parsed, world); - vb.replaceWith(inf, true); - vb.prepend('did not'); - return; - } // walks -> does not walk - - - if (vb.has('#PresentTense')) { - var _inf = toInfinitive_1(parsed, world); - - vb.replaceWith(_inf, true); - - if (isPlural_1$1(parsed)) { - vb.prepend('do not'); - } else { - vb.prepend('does not'); - } - - return; - } //walking -> not walking - - - if (vb.has('#Gerund')) { - var _inf2 = toInfinitive_1(parsed, world); - - vb.replaceWith(_inf2, true); - vb.prepend('not'); - return; - } //fallback 1: walk -> does not walk - - - if (isPlural_1$1(parsed)) { - vb.prepend('does not'); - return; - } //fallback 2: walk -> do not walk - - - vb.prepend('do not'); - return; - }; - - var toNegative_1 = toNegative; - - // turn 'would not really walk up' into parts - var parseVerb = function parseVerb(vb) { - var parsed = { - adverb: vb.match('#Adverb+'), - // 'really' - negative: vb.match('#Negative'), - // 'not' - auxiliary: vb.match('#Auxiliary').not('(#Negative|#Adverb)'), - // 'will' of 'will go' - particle: vb.match('#Particle'), - // 'up' of 'pull up' - verb: vb.match('#Verb').not('(#Adverb|#Negative|#Auxiliary|#Particle)') - }; // fallback, if no verb found - - if (!parsed.verb.found) { - // blank-everything - Object.keys(parsed).forEach(function (k) { - parsed[k] = parsed[k].not('.'); - }); // it's all the verb - - parsed.verb = vb; - return parsed; - } // - - - if (parsed.adverb && parsed.adverb.found) { - var match = parsed.adverb.text('reduced') + '$'; - - if (vb.has(match)) { - parsed.adverbAfter = true; - } - } - - return parsed; - }; - - var parse$2 = parseVerb; - - /** too many special cases for is/was/will be*/ - - var toBe = function toBe(parsed) { - var isI = false; - var plural = isPlural_1$1(parsed); - var isNegative = parsed.negative.found; //account for 'i is' -> 'i am' irregular - // if (vb.parent && vb.parent.has('i #Adverb? #Copula')) { - // isI = true; - // } - // 'i look', not 'i looks' - - if (parsed.verb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) { - isI = true; - } - - var obj = { - PastTense: 'was', - PresentTense: 'is', - FutureTense: 'will be', - Infinitive: 'is', - Gerund: 'being', - Actor: '', - PerfectTense: 'been', - Pluperfect: 'been' - }; //"i is" -> "i am" - - if (isI === true) { - obj.PresentTense = 'am'; - obj.Infinitive = 'am'; - } - - if (plural) { - obj.PastTense = 'were'; - obj.PresentTense = 'are'; - obj.Infinitive = 'are'; - } - - if (isNegative) { - obj.PastTense += ' not'; - obj.PresentTense += ' not'; - obj.FutureTense = 'will not be'; - obj.Infinitive += ' not'; - obj.PerfectTense = 'not ' + obj.PerfectTense; - obj.Pluperfect = 'not ' + obj.Pluperfect; - obj.Gerund = 'not ' + obj.Gerund; - } - - return obj; - }; - - var toBe_1 = toBe; - - var conjugate = function conjugate(parsed, world) { - var verb = parsed.verb; //special handling of 'is', 'will be', etc. - - if (verb.has('#Copula') || verb.out('normal') === 'be' && parsed.auxiliary.has('will')) { - return toBe_1(parsed); - } - - var hasHyphen = parsed.verb.termList(0).hasHyphen(); - var infinitive = toInfinitive_1(parsed, world); - - if (!infinitive) { - return {}; - } - - var forms = world.transforms.conjugate(infinitive, world); - forms.Infinitive = infinitive; // add particle to phrasal verbs ('fall over') - - if (parsed.particle.found) { - var particle = parsed.particle.text(); - var space = hasHyphen === true ? '-' : ' '; - Object.keys(forms).forEach(function (k) { - return forms[k] += space + particle; - }); - } //put the adverb at the end? - - - if (parsed.adverb.found) { - var adverb = parsed.adverb.text(); - - var _space = hasHyphen === true ? '-' : ' '; - - if (parsed.adverbAfter === true) { - Object.keys(forms).forEach(function (k) { - return forms[k] += _space + adverb; - }); - } else { - Object.keys(forms).forEach(function (k) { - return forms[k] = adverb + _space + forms[k]; - }); - } - } //apply negative - - - var isNegative = parsed.negative.found; - - if (isNegative) { - forms.PastTense = 'did not ' + forms.Infinitive; - forms.PresentTense = 'does not ' + forms.Infinitive; - forms.Gerund = 'not ' + forms.Gerund; - } //future Tense is pretty straightforward - - - if (!forms.FutureTense) { - if (isNegative) { - forms.FutureTense = 'will not ' + forms.Infinitive; - } else { - forms.FutureTense = 'will ' + forms.Infinitive; - } - } - - if (isNegative) { - forms.Infinitive = 'not ' + forms.Infinitive; - } - - return forms; - }; - - var conjugate_1 = conjugate; - - var methods$7 = { - /** overload the original json with verb information */ - json: function json(options) { - var _this = this; - - var n = null; - - if (typeof options === 'number') { - n = options; - options = null; - } - - options = options || { - text: true, - normal: true, - trim: true, - terms: true - }; - var res = []; - this.forEach(function (p) { - var json = p.json(options)[0]; - var parsed = parse$2(p); - json.parts = {}; - Object.keys(parsed).forEach(function (k) { - if (parsed[k] && parsed[k].isA === 'Doc') { - json.parts[k] = parsed[k].text('normal'); - } else { - json.parts[k] = parsed[k]; - } - }); - json.isNegative = p.has('#Negative'); - json.conjugations = conjugate_1(parsed, _this.world); - res.push(json); - }); - - if (n !== null) { - return res[n]; - } - - return res; - }, - - /** grab the adverbs describing these verbs */ - adverbs: function adverbs() { - var list = []; // look at internal adverbs - - this.forEach(function (vb) { - var advb = parse$2(vb).adverb; - - if (advb.found) { - list = list.concat(advb.list); - } - }); // look for leading adverbs - - var m = this.lookBehind('#Adverb+$'); - - if (m.found) { - list = m.list.concat(list); - } // look for trailing adverbs - - - m = this.lookAhead('^#Adverb+'); - - if (m.found) { - list = list.concat(m.list); - } - - return this.buildFrom(list); - }, - - /**return verbs like 'we walk' and not 'spencer walks' */ - isPlural: function isPlural() { - var _this2 = this; - - var list = []; - this.forEach(function (vb) { - var parsed = parse$2(vb); - - if (isPlural_1$1(parsed, _this2.world) === true) { - list.push(vb.list[0]); - } - }); - return this.buildFrom(list); - }, - - /** return verbs like 'spencer walks' and not 'we walk' */ - isSingular: function isSingular() { - var _this3 = this; - - var list = []; - this.forEach(function (vb) { - var parsed = parse$2(vb); - - if (isPlural_1$1(parsed, _this3.world) === false) { - list.push(vb.list[0]); - } - }); - return this.buildFrom(list); - }, - - /** */ - conjugate: function conjugate() { - var _this4 = this; - - var result = []; - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var forms = conjugate_1(parsed, _this4.world); - - result.push(forms); - }); - return result; - }, - - /** */ - toPastTense: function toPastTense() { - var _this5 = this; - - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var str = conjugate_1(parsed, _this5.world).PastTense; - - if (str) { - vb.replaceWith(str, false); // vb.tag('PastTense') - } - }); - return this; - }, - - /** */ - toPresentTense: function toPresentTense() { - var _this6 = this; - - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var obj = conjugate_1(parsed, _this6.world); - - var str = obj.PresentTense; // 'i look', not 'i looks' - - if (vb.lookBehind('(i|we) (#Adverb|#Verb)?$').found) { - str = obj.Infinitive; - } - - if (str) { - vb.replaceWith(str, false); - vb.tag('PresentTense'); - } - }); - return this; - }, - - /** */ - toFutureTense: function toFutureTense() { - var _this7 = this; - - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var str = conjugate_1(parsed, _this7.world).FutureTense; - - if (str) { - vb.replaceWith(str, false); - vb.tag('FutureTense'); - } - }); - return this; - }, - - /** */ - toInfinitive: function toInfinitive() { - var _this8 = this; - - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var str = conjugate_1(parsed, _this8.world).Infinitive; - - if (str) { - vb.replaceWith(str, false); - vb.tag('Infinitive'); - } - }); - return this; - }, - - /** */ - toGerund: function toGerund() { - var _this9 = this; - - this.forEach(function (vb) { - var parsed = parse$2(vb); - - var str = conjugate_1(parsed, _this9.world).Gerund; - - if (str) { - vb.replaceWith(str, false); - vb.tag('Gerund'); - } - }); - return this; - }, - - /** return only verbs with 'not'*/ - isNegative: function isNegative() { - return this["if"]('#Negative'); - }, - - /** return only verbs without 'not'*/ - isPositive: function isPositive() { - return this.ifNo('#Negative'); - }, - - /** add a 'not' to these verbs */ - toNegative: function toNegative() { - var _this10 = this; - - this.list.forEach(function (p) { - var doc = _this10.buildFrom([p]); - - var parsed = parse$2(doc); - - toNegative_1(parsed, doc.world); - }); - return this; - }, - - /** remove 'not' from these verbs */ - toPositive: function toPositive() { - var m = this.match('do not #Verb'); - - if (m.found) { - m.remove('do not'); - } - - return this.remove('#Negative'); - } - }; - - var addMethod$9 = function addMethod(Doc) { - /** */ - var Verbs = - /*#__PURE__*/ - function (_Doc) { - _inherits(Verbs, _Doc); - - function Verbs() { - _classCallCheck(this, Verbs); - - return _possibleConstructorReturn(this, _getPrototypeOf(Verbs).apply(this, arguments)); - } - - return Verbs; - }(Doc); // add-in our methods - - - Object.assign(Verbs.prototype, methods$7); // aliases - - Verbs.prototype.negate = Verbs.prototype.toNegative; - - Doc.prototype.verbs = function (n) { - var match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+'); // try to ignore leading and trailing adverbs - - match = match.not('^#Adverb+'); - match = match.not('#Adverb+$'); // handle commas: - // don't split 'really, really' - - var keep = match.match('(#Adverb && @hasComma) #Adverb'); // // but split the other commas - - var m = match.not(keep).splitAfter('@hasComma'); // // combine them back together - - m = m.concat(keep); - m.sort('index'); //handle slashes? - //ensure there's actually a verb - - m = m["if"]('#Verb'); //grab (n)th result - - if (typeof n === 'number') { - m = m.get(n); - } - - var vb = new Verbs(m.list, this, this.world); - return vb; - }; - - return Doc; - }; - - var Verbs = addMethod$9; - - var addMethod$a = function addMethod(Doc) { - /** */ - var People = - /*#__PURE__*/ - function (_Doc) { - _inherits(People, _Doc); - - function People() { - _classCallCheck(this, People); - - return _possibleConstructorReturn(this, _getPrototypeOf(People).apply(this, arguments)); - } - - return People; - }(Doc); - - Doc.prototype.people = function (n) { - var match = this.splitAfter('@hasComma'); - match = match.match('#Person+'); //grab (n)th result - - if (typeof n === 'number') { - match = match.get(n); - } - - return new People(match.list, this, this.world); - }; - - return Doc; - }; - - var People = addMethod$a; - - var subclass = [Abbreviations, Acronyms, Clauses, Contractions, Lists, Nouns, Parentheses, Possessives, Quotations, Verbs, People]; - - var extend = function extend(Doc) { - // add basic methods - Object.keys(_simple).forEach(function (k) { - return Doc.prototype[k] = _simple[k]; - }); // add subclassed methods - - subclass.forEach(function (addFn) { - return addFn(Doc); - }); - return Doc; - }; - - var Subset = extend; - - var methods$8 = { - misc: methods$4, - selections: _simple - }; - /** a parsed text object */ - - var Doc = - /*#__PURE__*/ - function () { - function Doc(list, from, world) { - var _this = this; - - _classCallCheck(this, Doc); - - this.list = list; //quiet these properties in console.logs - - Object.defineProperty(this, 'from', { - enumerable: false, - value: from, - writable: true - }); //borrow some missing data from parent - - if (world === undefined && from !== undefined) { - world = from.world; - } //'world' getter - - - Object.defineProperty(this, 'world', { - enumerable: false, - value: world, - writable: true - }); //fast-scans for our data - - Object.defineProperty(this, '_cache', { - enumerable: false, - writable: true, - value: {} - }); //'found' getter - - Object.defineProperty(this, 'found', { - get: function get() { - return _this.list.length > 0; - } - }); //'length' getter - - Object.defineProperty(this, 'length', { - get: function get() { - return _this.list.length; - } - }); // this is way easier than .constructor.name... - - Object.defineProperty(this, 'isA', { - get: function get() { - return 'Doc'; - } - }); - } - /** run part-of-speech tagger on all results*/ - - - _createClass(Doc, [{ - key: "tagger", - value: function tagger() { - return tiny(this); - } - /** pool is stored on phrase objects */ - - }, { - key: "pool", - value: function pool() { - if (this.list.length > 0) { - return this.list[0].pool; - } - - return this.all().list[0].pool; - } - }]); - - return Doc; - }(); - /** create a new Document object */ - - - Doc.prototype.buildFrom = function (list) { - list = list.map(function (p) { - return p.clone(true); - }); // new this.constructor() - - var doc = new Doc(list, this, this.world); - return doc; - }; - /** create a new Document from plaintext. */ - - - Doc.prototype.fromText = function (str) { - var list = _01Tokenizer(str, this.world, this.pool()); - return this.buildFrom(list); - }; - - Object.assign(Doc.prototype, methods$8.misc); - Object.assign(Doc.prototype, methods$8.selections); //add sub-classes - - Subset(Doc); //aliases - - var aliases$1 = { - untag: 'unTag', - and: 'match', - notIf: 'ifNo', - only: 'if', - onlyIf: 'if' - }; - Object.keys(aliases$1).forEach(function (k) { - return Doc.prototype[k] = Doc.prototype[aliases$1[k]]; - }); - var Doc_1 = Doc; - - function instance(worldInstance) { - //blast-out our word-lists, just once - var world = worldInstance; - /** parse and tag text into a compromise object */ - - var nlp = function nlp() { - var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var lexicon = arguments.length > 1 ? arguments[1] : undefined; - - if (lexicon) { - world.addWords(lexicon); - } - - var list = _01Tokenizer(text, world); - var doc = new Doc_1(list, null, world); - doc.tagger(); - return doc; - }; - /** parse text into a compromise object, without running POS-tagging */ - - - nlp.tokenize = function () { - var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; - var lexicon = arguments.length > 1 ? arguments[1] : undefined; - var w = world; - - if (lexicon) { - w = w.clone(); - w.words = {}; - w.addWords(lexicon); - } - - var list = _01Tokenizer(text, w); - var doc = new Doc_1(list, null, w); - - if (lexicon) { - tiny(doc); - } - - return doc; - }; - /** mix in a compromise-plugin */ - - - nlp.extend = function (fn) { - fn(Doc_1, world, this, Phrase_1, Term_1, Pool_1); - return this; - }; - /** create a compromise Doc object from .json() results */ - - - nlp.fromJSON = function (json) { - var list = fromJSON_1(json, world); - return new Doc_1(list, null, world); - }; - /** make a deep-copy of the library state */ - - - nlp.clone = function () { - return instance(world.clone()); - }; - /** log our decision-making for debugging */ - - - nlp.verbose = function () { - var bool = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - world.verbose(bool); - return this; - }; - /** grab currently-used World object */ - - - nlp.world = function () { - return world; - }; - /** current version of the library */ - - - nlp.version = _version; // alias - - nlp["import"] = nlp.load; - return nlp; - } - - var src = instance(new World_1()); - - return src; - -}))); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).nlp=e()}(this,(function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(e)}function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);rn[e].lineage.length?1:n[t].isA.length>n[e].isA.length?-1:0:0:1}))},H={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},R={json:function(t,e){t=t||{};var r={};return(t=Object.assign({},H,t)).text&&(r.text=this.text),t.normal&&(r.normal=this.normal),t.tags&&(r.tags=Object.keys(this.tags)),t.clean&&(r.clean=this.clean),(t.id||t.offset)&&(r.id=this.id),t.implicit&&null!==this.implicit&&(r.implicit=this.implicit),t.whitespace&&(r.pre=this.pre,r.post=this.post),t.bestTag&&(r.bestTag=_(this,e)[0]),r}},G=Object.assign({},V,S,L,W,R);function Q(){return"undefined"!=typeof window&&window.document}var Z=function(t,e){for(t=t.toString();t.length0&&void 0!==arguments[0]?arguments[0]:"";e(this,t),r=String(r);var n=N(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=p(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(t,[{key:"set",value:function(t){var e=N(t);return this.text=e.text,this.clean=e.clean,this}}]),t}();st.prototype.clone=function(){var t=new st(this.text);return t.pre=this.pre,t.post=this.post,t.tags=Object.assign({},this.tags),t},Object.assign(st.prototype,G),Object.assign(st.prototype,ot);var at=st,ut={terms:function(t){if(0===this.length)return[];if(this.cache.terms)return void 0!==t?this.cache.terms[t]:this.cache.terms;for(var e=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof t&&(t="normal"===t?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===t?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===t?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),i=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(i=!0);var o=n.reduce((function(o,s,a){t.last=r&&a===n.length-1;var u=!0,c=!0;return!1===i&&(0===a&&e&&(u=!1),a===n.length-1&&r&&(c=!1)),o+s.textOut(t,u,c)}),"");return!0===i&&r&&(o=ct(o)),!0===t.trim&&(o=o.trim()),o}},lt={trim:function(){var t=this.terms();if(t.length>0){t[0].pre=t[0].pre.replace(/^\s+/,"");var e=t[t.length-1];e.post=e.post.replace(/\s+$/,"")}return this}},ft=/[.?!]\s*$/,pt=function(t,e){e[0].pre=t[0].pre;var r,n,i=t[t.length-1],o=e[e.length-1];o.post=(r=i.post,n=o.post,ft.test(n)?n+r.match(/\s*$/):r),i.post="",""===i.post&&(i.post+=" ")},dt=function(t,e,r){var n=t.terms(),i=e.terms();pt(n,i),function(t,e,r){var n=t[t.length-1],i=e[e.length-1],o=n.next;(n.next=e[0].id,i.next=o,o)&&(r.get(o).prev=i.id);var s=t[0].id;s&&(e[0].prev=s)}(n,i,t.pool);var o,s=[t],a=t.start,u=[r];return(u=u.concat(r.parents())).forEach((function(t){var e=t.list.filter((function(t){return t.hasId(a)}));s=s.concat(e)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length})),t.cache={},t},vt=/ /,mt=function(t,e,r){var n=t.start,i=e.terms();!function(t){var e=t[t.length-1];!1===vt.test(e.post)&&(e.post+=" ")}(i),function(t,e,r){var n=r[r.length-1];n.next=t.start;var i=t.pool,o=i.get(t.start);o.prev&&(i.get(o.prev).next=e.start);r[0].prev=t.terms(0).prev,t.terms(0).prev=n.id}(t,e,i);var o,s=[t],a=[r];return(a=a.concat(r.parents())).forEach((function(t){var r=t.list.filter((function(t){return t.hasId(n)||t.hasId(e.start)}));s=s.concat(r)})),(s=(o=s).filter((function(t,e){return o.indexOf(t)===e}))).forEach((function(t){t.length+=e.length,t.start===n&&(t.start=e.start),t.cache={}})),t},gt=function(t,e){var r=e.pool(),n=t.terms(),i=r.get(n[0].prev)||{},o=r.get(n[n.length-1].next)||{};n[0].implicit&&i.implicit&&(i.set(i.implicit),i.post+=" "),function(t,e,r,n){var i=t.parents();i.push(t),i.forEach((function(t){var i=t.list.find((function(t){return t.hasId(e)}));i&&(i.length-=r,i.start===e&&(i.start=n.id),i.cache={})})),t.list=t.list.filter((function(t){return!(!t.start||!t.length)}))}(e,t.start,t.length,o),i&&(i.next=o.id),o&&(o.prev=i.id)},bt={append:function(t,e){return dt(this,t,e),this},prepend:function(t,e){return mt(this,t,e),this},delete:function(t){return gt(this,t),this},replace:function(t,e){var r=this.length;dt(this,t,e);var n=this.buildFrom(this.start,this.length);n.length=r,gt(n,e)},splitOn:function(t){var e=this.terms(),r={before:null,match:null,after:null},n=e.findIndex((function(e){return e.id===t.start}));if(-1===n)return r;var i=e.slice(0,n);i.length>0&&(r.before=this.buildFrom(i[0].id,i.length));var o=e.slice(n,n+t.length);o.length>0&&(r.match=this.buildFrom(o[0].id,o.length));var s=e.slice(n+t.length,e.length);return s.length>0&&(r.after=this.buildFrom(s[0].id,s.length,this.pool)),r}},yt={json:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0,r={};return t.text&&(r.text=this.text()),t.normal&&(r.normal=this.text("normal")),t.clean&&(r.clean=this.text("clean")),t.reduced&&(r.reduced=this.text("reduced")),t.root&&(r.root=this.text("root")),t.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),t.terms&&(!0===t.terms&&(t.terms={}),r.terms=this.terms().map((function(r){return r.json(t.terms,e)}))),r}},At={lookAhead:function(t){t||(t=".*");var e=this.pool,r=[],n=this.terms();return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(t)},lookBehind:function(t){t||(t=".*");var e=this.pool,r=[];return function t(n){var i=e.get(n);i&&(r.push(i),i.prev&&t(i.prev))}(e.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(t)}},wt=Object.assign({},ut,ht,lt,bt,yt,At),Pt=function(t,e){if(0===e.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},xt=function(t,e,r,n,i,o){for(var s=e;e1&&u.greedy?d.length+=s-f:d.length++}}else if(!0!==u.optional){if(!(t[s].isImplicit()&&e[a-1]&&t[s+1]&&t[s+1].doesMatch(u,r+s,n)))return[!1,null];s+=2}}else{var v=jt(t,s,e[a+1],u,r);if(void 0!==u.min&&v-su.max){s+=u.max;continue}if(null===v)return[!1,null];c&&(Et(i,h,t,s,u.named).length=v-s),s=v}}return[t.slice(0,s),i]},Ct=function(t,e,r){if(!r||0===r.length)return r;if(e.some((function(t){return t.end}))){var n=t[t.length-1];r=r.filter((function(t){return-1!==t.match.indexOf(n)}))}return r},kt=/\{([0-9]+,?[0-9]*)\}/,Ft=/&&/,Tt=new RegExp(/^<(\S+)>/),Nt=function(t){return t[t.length-1]},$t=function(t){return t[0]},Vt=function(t){return t.substr(1)},St=function(t){return t.substr(0,t.length-1)},Bt=function(t){return t=Vt(t),t=St(t)},It=function t(e){for(var r,n={},i=0;i<2;i+=1){if("$"===Nt(e)&&(n.end=!0,e=St(e)),"^"===$t(e)&&(n.start=!0,e=Vt(e)),("["===$t(e)||"]"===Nt(e))&&(n.named=!0,"["===$t(e)?n.groupType="]"===Nt(e)?"single":"start":n.groupType="end",e=(e=e.replace(/^\[/,"")).replace(/\]$/,""),"<"===$t(e))){var o=Tt.exec(e);o.length>=2&&(n.named=o[1],e=e.replace(o[0],""))}if("+"===Nt(e)&&(n.greedy=!0,e=St(e)),"*"!==e&&"*"===Nt(e)&&"\\*"!==e&&(n.greedy=!0,e=St(e)),"?"===Nt(e)&&(n.optional=!0,e=St(e)),"!"===$t(e)&&(n.negative=!0,e=Vt(e)),"("===$t(e)&&")"===Nt(e)){Ft.test(e)?(n.choices=e.split(Ft),n.operator="and"):(n.choices=e.split("|"),n.operator="or"),n.choices[0]=Vt(n.choices[0]);var s=n.choices.length-1;n.choices[s]=St(n.choices[s]),n.choices=n.choices.map((function(t){return t.trim()})),n.choices=n.choices.filter((function(t){return t})),n.choices=n.choices.map(t),e=""}if("/"===$t(e)&&"/"===Nt(e))return e=Bt(e),n.regex=new RegExp(e),n;if("~"===$t(e)&&"~"===Nt(e))return e=Bt(e),n.soft=!0,n.word=e,n}return!0===kt.test(e)&&(e=e.replace(kt,(function(t,e){var r=e.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===$t(e)?(n.tag=Vt(e),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===$t(e)?(n.method=Vt(e),n):"."===e?(n.anything=!0,n):"*"===e?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(e&&(e=(e=e.replace("\\*","*")).replace("\\.","."),n.word=e.toLowerCase()),n)},Dt=function(t){return t.filter((function(t){return t.groupType})).length>0&&(t=function(t){for(var e,r,n=!1,i=-1,o=0;o)?\(.*?\)[?+*]*\]?\$?)/);return e=e.map((function(t){return t.trim()}))}(e);return r=(r=function(t){var e=[];return t.forEach((function(t){if(/^[[^_/]?\(/.test(t[0]))e.push(t);else{var r=t.split(" ");r=r.filter((function(t){return t})),e=e.concat(r)}})),e}(r)).map(It),r=Dt(r)},Lt=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e&&(e=qt(e)),!0===Pt(t,e))return[];var n=e.filter((function(t){return!0!==t.optional})).length,i=t.terms(),o=[];if(!0===e[0].start){var s=Ot(i,e,0,i.length),a=h(s,2),u=a[0],c=a[1];return!1!==u&&u.length>0&&(u=u.filter((function(t){return t})),o.push({match:u,groups:c})),Ct(i,e,o)}for(var l=0;li.length);l+=1){var f=Ot(i.slice(l),e,l,i.length),p=h(f,2),d=p[0],v=p[1];if(!1!==d&&d.length>0&&(l+=d.length-1,d=d.filter((function(t){return t})),o.push({match:d,groups:v}),!0===r))return Ct(i,e,o)}return Ct(i,e,o)},Mt=function(t,e){var r={};Lt(t,e).forEach((function(t){t.match.forEach((function(t){r[t.id]=!0}))}));var n=t.terms(),i=[],o=[];return n.forEach((function(t){!0!==r[t.id]?o.push(t):o.length>0&&(i.push(o),o=[])})),o.length>0&&i.push(o),i},zt={match:function(t){var e=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Lt(this,t,r);return n=n.map((function(t){var r=t.match,n=t.groups,i=e.buildFrom(r[0].id,r.length,n);return i.cache.terms=r,i}))},has:function(t){return Lt(this,t,!0).length>0},not:function(t){var e=this,r=Mt(this,t);return r=r.map((function(t){return e.buildFrom(t[0].id,t.length)}))},canBe:function(t,e){for(var r=this,n=[],i=this.terms(),o=!1,s=0;s0})).map((function(t){return r.buildFrom(t[0].id,t.length)}))}},Wt=function t(r,n,i){e(this,t),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:i}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Wt.prototype.buildFrom=function(t,e,r){var n=new Wt(t,e,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Wt.prototype,zt),Object.assign(Wt.prototype,wt);var Ut={term:"terms"};Object.keys(Ut).forEach((function(t){return Wt.prototype[t]=Wt.prototype[Ut[t]]}));var _t=Wt,Ht=function(){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,t),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(t,[{key:"add",value:function(t){return this.words[t.id]=t,this}},{key:"get",value:function(t){return this.words[t]}},{key:"remove",value:function(t){delete this.words[t]}},{key:"merge",value:function(t){return Object.assign(this.words,t.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),t}();Ht.prototype.clone=function(){var t=this,e=Object.keys(this.words).reduce((function(e,r){var n=t.words[r].clone();return e[n.id]=n,e}),{});return new Ht(e)};var Rt=Ht,Gt=function(t){t.forEach((function(e,r){r>0&&(e.prev=t[r-1].id),t[r+1]&&(e.next=t[r+1].id)}))},Qt=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Zt=/\S/,Jt=/[ .][A-Z]\.? *$/i,Yt=/(?:\u2026|\.{2,}) *$/,Kt=/((?:\r?\n|\r)+)/,Xt=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,te=/^\s+/,ee=function(t,e){if(!0===Jt.test(t))return!1;if(!0===Yt.test(t))return!1;if(!1===Xt.test(t))return!1;var r=t.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!e.hasOwnProperty(n)},re=function(t,e){var r=e.cache.abbreviations;t=t||"";var n=[],i=[];if(!(t=String(t))||"string"!=typeof t||!1===Zt.test(t))return n;for(var o=function(t){for(var e=[],r=t.split(Kt),n=0;n0&&(n.push(c),i[u]="")}if(0===n.length)return[t];for(var h=1;h0?(e[e.length-1]+=o,e.push(a)):e.push(o+a),o=""):o+=a}return o&&(0===e.length&&(e[0]=""),e[e.length-1]+=o),e=(e=function(t){for(var e=1;e0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof t&&"number"==typeof t&&(t=String(t));var n=re(t,e);n=n.map((function(t){return he(t)})),r=r||new Rt;var i=n.map((function(t){t=t.map((function(t){var e=new at(t);return r.add(e),e})),Gt(t);var e=new _t(t[0].id,t.length,r);return e.cache.terms=t,e}));return i},fe=function(t,e){var r=new Rt;return t.map((function(t,n){var i=t.terms.map((function(i,o){var s=new at(i.text);return s.pre=void 0!==i.pre?i.pre:"",void 0===i.post&&(i.post=" ",o>=t.terms.length-1&&(i.post=". ",n>=t.terms.length-1&&(i.post="."))),s.post=void 0!==i.post?i.post:" ",i.tags&&i.tags.forEach((function(t){return s.tag(t,"",e)})),r.add(s),s}));return Gt(i),new _t(i[0].id,i.length,r)}))},pe={},de=["Person","Place","Organization"],ve={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:de},Actor:{isA:"Noun",notA:de},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:de},Demonym:{isA:["Noun","ProperNoun"],notA:de},Possessive:{isA:"Noun"}},me={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},ge={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},be=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],ye={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:be},Conjunction:{notA:be},Preposition:{notA:be},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},Ae={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},we=function(t){return Object.keys(t).forEach((function(e){t[e].color?t[e].color=t[e].color:Ae[e]?t[e].color=Ae[e]:t[e].isA.some((function(r){return!!Ae[r]&&(t[e].color=Ae[r],!0)}))})),t},Pe=function(t){return Object.keys(t).forEach((function(e){for(var r=t[e],n=r.isA.length,i=0;i1&&(r.hasCompound[o[0]]=!0),"Singular"===e){var s=i.toPlural(t,r);n[s]=n[s]||"Plural"}if("Infinitive"===e)for(var a=i.conjugate(t,r),u=Object.keys(a),c=0;c1?i[o]&&"."!==i[o]&&r.tag(i[o],n,e.world):r.tag(t,n,e.world)}))}))}),_e={tag:function(t,e){return t?(Ue(t,this,!1,e),this):this},tagSafe:function(t,e){return t?(Ue(t,this,!0,e),this):this},unTag:function(t,e){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(t,e,r.world)}))})),this},canBe:function(t){if(!t)return this;var e=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(t,e))}),[]);return this.buildFrom(r)}},He={map:function(e){var r=this;if(!e)return this;var n=this.list.map((function(t,n){var i=r.buildFrom([t]);i.from=null;var o=e(i,n);return o&&o.list&&o.list[0]?o.list[0]:o}));return 0===(n=n.filter((function(t){return t}))).length?this.buildFrom(n):"object"!==t(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(t,e){var r=this;return t?(this.list.forEach((function(n,i){var o=r.buildFrom([n]);!0===e&&(o.from=null),t(o,i)})),this):this},filter:function(t){var e=this;if(!t)return this;var r=this.list.filter((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return this.buildFrom(r)},find:function(t){var e=this;if(!t)return this;var r=this.list.find((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)}));return r?this.buildFrom([r]):void 0},some:function(t){var e=this;return t?this.list.some((function(r,n){var i=e.buildFrom([r]);return i.from=null,t(i,n)})):this},random:function(t){if(!this.found)return this;var e=Math.floor(Math.random()*this.list.length);if(void 0===t){var r=[this.list[e]];return this.buildFrom(r)}return e+t>this.length&&(e=(e=this.length-t)<0?0:e),this.slice(e,e+t)}},Re=function(t){return t.split(/[ -]/g)},Ge=function(t,e,r){for(var n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return t.forEach((function(t,n){var i=!0;void 0!==e[n]&&(i=e[n]),t=(t=(t||"").toLowerCase()).replace(/[,;.!?]+$/,"");var o=Re(t).map((function(t){return t.trim()}));r[o[0]]=r[o[0]]||{},1===o.length?r[o[0]].value=i:(r[o[0]].more=r[o[0]].more||[],r[o[0]].more.push({rest:o.slice(1),value:i}))})),r}(t,e),i=[],o=function(t){for(var e=r.list[t],o=e.terms().map((function(t){return t.reduced})),s=function(t){void 0!==n[o[t]]&&(void 0!==n[o[t]].more&&n[o[t]].more.forEach((function(r){void 0!==o[t+r.rest.length]&&(!0===r.rest.every((function(e,r){return e===o[t+r+1]}))&&i.push({id:e.terms()[t].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[o[t]].value&&i.push({id:e.terms()[t].id,value:n[o[t]].value,length:1}))},a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return e?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(i){var o,s=e;if("function"==typeof e&&(s=e(i)),s&&"object"===t(s)&&"Doc"===s.isA)o=s.list,r.pool().merge(s.pool());else{if("string"!=typeof s)return;!1!==n.keepCase&&i.terms(0).isTitleCase()&&(s=Je(s)),o=le(s,r.world,r.pool());var a=r.buildFrom(o);a.tagger(),o=a.list}if(!0===n.keepTags){var u=i.json({terms:{tags:!0}}).terms;o[0].terms().forEach((function(t,e){u[e]&&t.tagSafe(u[e].tags,"keptTag",r.world)}))}i.replace(o[0],r)})),this):this.delete()},replace:function(t,e,r){return void 0===e?this.replaceWith(t,r):(this.match(t).replaceWith(e,r),this)}},Ke=$((function(t,e){e.append=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.append(n,e)})),this):this},e.insertAfter=e.append,e.insertAt=e.append,e.prepend=function(t){var e=this;return t?(this.uncache(),this.list.forEach((function(r){var n=le(t,e.world,e.pool())[0];e.buildFrom([n]).tagger(),r.prepend(n,e)})),this):this},e.insertBefore=e.prepend,e.concat=function(){this.uncache();for(var t=this.list.slice(0),e=0;e0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof e&&this.list[e])return this.list[e].json(r);!0===(e=n(e)).root&&this.list.forEach((function(e){e.terms().forEach((function(e){null===e.root&&e.setRoot(t.world)}))}));var i=this.list.map((function(r){return r.json(e,t.world)}));if((e.terms.offset||e.offset||e.terms.index||e.index)&&er(this,i,e),e.frequency||e.freq||e.count){var o={};this.list.forEach((function(t){var e=t.text("reduced");o[e]=o[e]||0,o[e]+=1})),this.list.forEach((function(t,e){i[e].count=o[t.text("reduced")]}))}if(e.unique){var s={};i=i.filter((function(t){return!0!==s[t.reduced]&&(s[t.reduced]=!0,!0)}))}return i},e.data=e.json})),nr=(rr.json,rr.data,$((function(t){var e=function(t,e){for(t=t.toString();t.lengthe.count?-1:t.countn?1:0},length:function(t,e){var r=t.text().trim().length,n=e.text().trim().length;return rn?-1:0},wordCount:function(t,e){var r=t.wordCount(),n=e.wordCount();return rn?-1:0}};sr.alphabetical=sr.alpha,sr.wordcount=sr.wordCount;var ar={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},ur={sort:function(t){return"freq"===(t=t||"alpha")||"frequency"===t||"topk"===t?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(e=this).list.forEach((function(t){var e=t.text(n);r[e]=r[e]||0,r[e]+=1})),e.list.sort((function(t,e){var i=r[t.text(n)],o=r[e.text(n)];return io?-1:0})),e):ar.hasOwnProperty(t)?function(t){var e={};return t.json({terms:{offset:!0}}).forEach((function(t){e[t.terms[0].id]=t.terms[0].offset.start})),t.list=t.list.sort((function(t,r){return e[t.start]>e[r.start]?1:e[t.start]0){i+=s;continue}}if(void 0===r[o]||!0!==r.hasOwnProperty(o))if(o===t[i].reduced||!0!==r.hasOwnProperty(t[i].reduced)){if(!0===Or.test(o)){var a=o.replace(Or,"");!0===r.hasOwnProperty(a)&&t[i].tag(r[a],"noprefix-lexicon",e)}}else t[i].tag(r[t[i].reduced],"lexicon",e);else t[i].tag(r[o],"lexicon",e)}return t},Fr=function(t){var e=t.termList();return kr(e,t.world),t},Tr=function(t){var r=function(t){i(o,t);var r=c(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){!0===t.tags.Abbreviation&&t.next&&(t.post=t.post.replace(/^\./,""));var e=t.text.replace(/\./,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){t.post=t.post.replace(/^\./,""),t.post="."+t.post})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,t.prototype.abbreviations=function(t){var e=this.match("#Abbreviation");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Nr=/\./,$r=function(t){var r=function(t){i(o,t);var r=c(o);function o(){return e(this,o),r.apply(this,arguments)}return n(o,[{key:"stripPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");t.set(e)})),this}},{key:"addPeriods",value:function(){return this.termList().forEach((function(t){var e=t.text.replace(/\./g,"");e=e.split("").join("."),!1===Nr.test(t.post)&&(e+="."),t.set(e)})),this}}]),o}(t);return r.prototype.unwrap=r.prototype.stripPeriods,r.prototype.strip=r.prototype.stripPeriods,t.prototype.acronyms=function(t){var e=this.match("#Acronym");return"number"==typeof t&&(e=e.get(t)),new r(e.list,this,this.world)},t},Vr=function(t){return t.prototype.clauses=function(e){var r=this.if("@hasComma").notIf("@hasComma @hasComma").notIf("@hasComma . .? (and|or) .").notIf("(#City && @hasComma) #Country").notIf("(#Date && @hasComma) #Year").notIf("@hasComma (too|also)$").match("@hasComma"),n=this.splitAfter(r),i=n.quotations(),o=(n=n.splitOn(i)).parentheses(),s=(n=n.splitOn(o)).if("#Copula #Adjective #Conjunction (#Pronoun|#Determiner) #Verb").match("#Conjunction"),a=(n=n.splitBefore(s)).if("if .{2,9} then .").match("then"),u=(n=(n=(n=(n=(n=(n=n.splitBefore(a)).splitBefore("as well as .")).splitBefore("such as .")).splitBefore("in addition to .")).splitAfter("@hasSemicolon")).splitAfter("@hasDash")).filter((function(t){return t.wordCount()>5&&t.match("#Verb+").length>=2}));if(u.found){var c=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(c.eq(0))}return"number"==typeof e&&(n=n.get(e)),new t(n.list,this,this.world)},t},Sr=function(t){var r=function(t){i(o,t);var r=c(o);function o(t,n,i){var s;return e(this,o),(s=r.call(this,t,n,i)).contracted=null,s}return n(o,[{key:"expand",value:function(){return this.list.forEach((function(t){var e=t.terms(),r=e[0].isTitleCase();e.forEach((function(t,r){t.set(t.implicit||t.text),t.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return o.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(t,[{key:"tagger",value:function(){return Fr(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),t}();fn.prototype.buildFrom=function(t){return t=t.map((function(t){return t.clone(!0)})),new fn(t,this,this.world)},fn.prototype.fromText=function(t){var e=le(t,this.world,this.pool());return this.buildFrom(e)},Object.assign(fn.prototype,ln.misc),Object.assign(fn.prototype,ln.selections),hn(fn);var pn={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(pn).forEach((function(t){return fn.prototype[t]=fn.prototype[pn[t]]}));var dn=fn;return function t(e){var r=e,n=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0;e&&r.addWords(e);var n=le(t,r),i=new dn(n,null,r);return i.tagger(),i};return n.tokenize=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1?arguments[1]:void 0,n=r;e&&((n=n.clone()).words={},n.addWords(e));var i=le(t,n),o=new dn(i,null,n);return e&&Fr(o),o},n.extend=function(t){return t(dn,r,this,_t,at,Rt),this},n.fromJSON=function(t){var e=fe(t,r);return new dn(e,null,r)},n.clone=function(){return t(r.clone())},n.verbose=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(t),this},n.world=function(){return r},n.version="13.2.0",n.import=n.load,n}(new qe)})); diff --git a/builds/compromise.js b/builds/compromise.js index 8eb060aab..03eb0f21d 100644 --- a/builds/compromise.js +++ b/builds/compromise.js @@ -1,4 +1,4 @@ -/* compromise 13.1.1 MIT */ +/* compromise 13.2.0 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -74,6 +74,19 @@ return _setPrototypeOf(o, p); } + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } + } + function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -90,8 +103,25 @@ return _assertThisInitialized(self); } + function _createSuper(Derived) { + return function () { + var Super = _getPrototypeOf(Derived), + result; + + if (_isNativeReflectConstruct()) { + var NewTarget = _getPrototypeOf(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; + } + function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _arrayWithHoles(arr) { @@ -99,10 +129,7 @@ } function _iterableToArrayLimit(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; @@ -128,8 +155,25 @@ return _arr; } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(n); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } //this is a not-well-thought-out way to reduce our dependence on `object===object` stuff @@ -1193,9 +1237,7 @@ canBe: canBe_1$1 }; - var Term = - /*#__PURE__*/ - function () { + var Term = /*#__PURE__*/function () { function Term() { var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; @@ -1797,7 +1839,7 @@ return this; }; - var delete_1 = function delete_1(doc) { + var _delete$1 = function _delete$1(doc) { _delete(this, doc); return this; }; // stich-in newPhrase, stretch 'doc' + parents @@ -1857,7 +1899,7 @@ var _04Insert = { append: append_1, prepend: prepend_1, - "delete": delete_1, + "delete": _delete$1, replace: replace, splitOn: splitOn }; @@ -2933,9 +2975,7 @@ var Phrase_1 = Phrase; /** a key-value store of all terms in our Document */ - var Pool = - /*#__PURE__*/ - function () { + var Pool = /*#__PURE__*/function () { function Pool() { var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -3384,7 +3424,7 @@ var fromJSON_1 = fromJSON; - var _version = '13.1.1'; + var _version = '13.2.0'; var _data = { "Comparative": "true¦better", @@ -5909,9 +5949,7 @@ var _isVerbose = false; /** all configurable linguistic data */ - var World = - /*#__PURE__*/ - function () { + var World = /*#__PURE__*/function () { function World() { _classCallCheck(this, World); @@ -7159,6 +7197,7 @@ var tmpDoc = _this.buildFrom(newPhrases); tmpDoc.tagger(); + newPhrases = tmpDoc.list; } else { return; //don't even bother } // try to keep its old tags, if appropriate @@ -10704,6 +10743,12 @@ group: 0, tag: 'Noun', reason: 'running-a-show' + }, //the-only-reason + { + match: '#Determiner #Adverb [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'the-reason' }, //the nice swim { match: '(the|this|those|these) #Adjective [#Verb]', @@ -10845,12 +10890,8 @@ tag: 'Noun', reason: 'is-pres-noun' }, // - { - match: '[#Infinitive] #Copula', - group: 0, - tag: 'Noun', - reason: 'inf-copula' - }, //a close + // { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' }, + //a close { match: '#Determiner #Adverb? [close]', group: 0, @@ -11881,15 +11922,15 @@ var addMethod = function addMethod(Doc) { /** */ - var Abbreviations = - /*#__PURE__*/ - function (_Doc) { + var Abbreviations = /*#__PURE__*/function (_Doc) { _inherits(Abbreviations, _Doc); + var _super = _createSuper(Abbreviations); + function Abbreviations() { _classCallCheck(this, Abbreviations); - return _possibleConstructorReturn(this, _getPrototypeOf(Abbreviations).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Abbreviations, [{ @@ -11940,15 +11981,15 @@ var addMethod$1 = function addMethod(Doc) { /** */ - var Acronyms = - /*#__PURE__*/ - function (_Doc) { + var Acronyms = /*#__PURE__*/function (_Doc) { _inherits(Acronyms, _Doc); + var _super = _createSuper(Acronyms); + function Acronyms() { _classCallCheck(this, Acronyms); - return _possibleConstructorReturn(this, _getPrototypeOf(Acronyms).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Acronyms, [{ @@ -12060,17 +12101,17 @@ var addMethod$3 = function addMethod(Doc) { /** */ - var Contractions = - /*#__PURE__*/ - function (_Doc) { + var Contractions = /*#__PURE__*/function (_Doc) { _inherits(Contractions, _Doc); + var _super = _createSuper(Contractions); + function Contractions(list, from, world) { var _this; _classCallCheck(this, Contractions); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Contractions).call(this, list, from, world)); + _this = _super.call(this, list, from, world); _this.contracted = null; return _this; } @@ -12149,15 +12190,15 @@ /** cool, fun, and nice */ - var Lists = - /*#__PURE__*/ - function (_Doc) { + var Lists = /*#__PURE__*/function (_Doc) { _inherits(Lists, _Doc); + var _super = _createSuper(Lists); + function Lists() { _classCallCheck(this, Lists); - return _possibleConstructorReturn(this, _getPrototypeOf(Lists).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Lists, [{ @@ -12569,15 +12610,15 @@ var addMethod$5 = function addMethod(Doc) { /** */ - var Nouns = - /*#__PURE__*/ - function (_Doc) { + var Nouns = /*#__PURE__*/function (_Doc) { _inherits(Nouns, _Doc); + var _super = _createSuper(Nouns); + function Nouns() { _classCallCheck(this, Nouns); - return _possibleConstructorReturn(this, _getPrototypeOf(Nouns).apply(this, arguments)); + return _super.apply(this, arguments); } return Nouns; @@ -12620,15 +12661,15 @@ var addMethod$6 = function addMethod(Doc) { /** anything between (these things) */ - var Parentheses = - /*#__PURE__*/ - function (_Doc) { + var Parentheses = /*#__PURE__*/function (_Doc) { _inherits(Parentheses, _Doc); + var _super = _createSuper(Parentheses); + function Parentheses() { _classCallCheck(this, Parentheses); - return _possibleConstructorReturn(this, _getPrototypeOf(Parentheses).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Parentheses, [{ @@ -12691,17 +12732,17 @@ var addMethod$7 = function addMethod(Doc) { /** */ - var Possessives = - /*#__PURE__*/ - function (_Doc) { + var Possessives = /*#__PURE__*/function (_Doc) { _inherits(Possessives, _Doc); + var _super = _createSuper(Possessives); + function Possessives(list, from, world) { var _this; _classCallCheck(this, Possessives); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Possessives).call(this, list, from, world)); + _this = _super.call(this, list, from, world); _this.contracted = null; return _this; } @@ -12794,15 +12835,15 @@ var addMethod$8 = function addMethod(Doc) { /** "these things" */ - var Quotations = - /*#__PURE__*/ - function (_Doc) { + var Quotations = /*#__PURE__*/function (_Doc) { _inherits(Quotations, _Doc); + var _super = _createSuper(Quotations); + function Quotations() { _classCallCheck(this, Quotations); - return _possibleConstructorReturn(this, _getPrototypeOf(Quotations).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Quotations, [{ @@ -13408,15 +13449,15 @@ var addMethod$9 = function addMethod(Doc) { /** */ - var Verbs = - /*#__PURE__*/ - function (_Doc) { + var Verbs = /*#__PURE__*/function (_Doc) { _inherits(Verbs, _Doc); + var _super = _createSuper(Verbs); + function Verbs() { _classCallCheck(this, Verbs); - return _possibleConstructorReturn(this, _getPrototypeOf(Verbs).apply(this, arguments)); + return _super.apply(this, arguments); } return Verbs; @@ -13442,7 +13483,12 @@ m.sort('index'); //handle slashes? //ensure there's actually a verb - m = m["if"]('#Verb'); //grab (n)th result + m = m["if"]('#Verb'); // the reason he will is ... + + if (m.has('(is|was)$')) { + m = m.splitBefore('(is|was)$'); + } //grab (n)th result + if (typeof n === 'number') { m = m.get(n); @@ -13459,15 +13505,15 @@ var addMethod$a = function addMethod(Doc) { /** */ - var People = - /*#__PURE__*/ - function (_Doc) { + var People = /*#__PURE__*/function (_Doc) { _inherits(People, _Doc); + var _super = _createSuper(People); + function People() { _classCallCheck(this, People); - return _possibleConstructorReturn(this, _getPrototypeOf(People).apply(this, arguments)); + return _super.apply(this, arguments); } return People; @@ -13511,9 +13557,7 @@ }; /** a parsed text object */ - var Doc = - /*#__PURE__*/ - function () { + var Doc = /*#__PURE__*/function () { function Doc(list, from, world) { var _this = this; @@ -13718,4 +13762,3 @@ return src; }))); -//# sourceMappingURL=compromise.js.map diff --git a/builds/compromise.min.js b/builds/compromise.min.js index 5c4e636be..46783fa19 100644 --- a/builds/compromise.min.js +++ b/builds/compromise.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},L={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},_={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},L,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=S(this,t)[0]),r}},q=Object.assign({},x,E,z,I,_);function J(){return"undefined"!=typeof window&&window.document}var K=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=D(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=c(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=D(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();ne.prototype.clone=function(){var e=new ne(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(ne.prototype,q),Object.assign(ne.prototype,re);var ae=ne,ie={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=oe(i)),!0===e.trim&&(i=i.trim()),i}},ue={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},le=/[.?!]\s*$/,ce=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,le.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},he=function(e,t,r){var n=e.terms(),a=t.terms();ce(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},de=/ /,pe=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===de.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},ge=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},fe={append:function(e,t){return he(this,e,t),this},prepend:function(e,t){return pe(this,e,t),this},delete:function(e){return ge(this,e),this},replace:function(e,t){var r=this.length;he(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,ge(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},me={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},ve={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},be=Object.assign({},ie,se,ue,fe,me,ve),ye=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},we=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-p:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=ke(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(Ae(a,h,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},Be=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},Pe=/\{([0-9]+,?[0-9]*)\}/,Ge=/&&/,Ce=new RegExp(/^<(\S+)>/),De=function(e){return e[e.length-1]},je=function(e){return e[0]},xe=function(e){return e.substr(1)},Ee=function(e){return e.substr(0,e.length-1)},Ne=function(e){return e=xe(e),e=Ee(e)},Fe=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===De(t)&&(n.end=!0,t=Ee(t)),"^"===je(t)&&(n.start=!0,t=xe(t)),("["===je(t)||"]"===De(t))&&(n.named=!0,"["===je(t)?n.groupType="]"===De(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===je(t))){var i=Ce.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===De(t)&&(n.greedy=!0,t=Ee(t)),"*"!==t&&"*"===De(t)&&"\\*"!==t&&(n.greedy=!0,t=Ee(t)),"?"===De(t)&&(n.optional=!0,t=Ee(t)),"!"===je(t)&&(n.negative=!0,t=xe(t)),"("===je(t)&&")"===De(t)){Ge.test(t)?(n.choices=t.split(Ge),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=xe(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Ee(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===je(t)&&"/"===De(t))return t=Ne(t),n.regex=new RegExp(t),n;if("~"===je(t)&&"~"===De(t))return t=Ne(t),n.soft=!0,n.word=t,n}return!0===Pe.test(t)&&(t=t.replace(Pe,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===je(t)?(n.tag=xe(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===je(t)?(n.method=xe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},Oe=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(Fe),r=Oe(r)},ze=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Te(t)),!0===ye(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=$e(a,t,0,a.length),s=u(o,2),l=s[0],c=s[1];return!1!==l&&l.length>0&&(l=l.filter((function(e){return e})),i.push({match:l,groups:c})),Be(a,t,i)}for(var h=0;ha.length);h+=1){var d=$e(a.slice(h),t,h,a.length),p=u(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return Be(a,t,i)}return Be(a,t,i)},He=function(e,t){var r={};ze(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Ve={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=ze(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return ze(this,e,!0).length>0},not:function(e){var t=this,r=He(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},Ie=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Ie.prototype.buildFrom=function(e,t,r){var n=new Ie(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Ie.prototype,Ve),Object.assign(Ie.prototype,be);var Me={term:"terms"};Object.keys(Me).forEach((function(e){return Ie.prototype[e]=Ie.prototype[Me[e]]}));var Se=Ie,Le=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Le.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Le(t)};for(var _e=Le,qe=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},Je=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ke=/\S/,We=/[ .][A-Z]\.? *$/i,Re=/(?:\u2026|\.{2,}) *$/,Ue=/((?:\r?\n|\r)+)/,Qe=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,Ze=/^\s+/,Xe=function(e,t){if(!0===We.test(e))return!1;if(!0===Re.test(e))return!1;if(!1===Qe.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},Ye=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Ke.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Ue),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=Ye(e,t);n=n.map((function(e){return st(e)})),r=r||new _e;var a=n.map((function(e){e=e.map((function(e){var t=new ae(e);return r.add(t),t})),qe(e);var t=new Se(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},lt=function(e,t){var r=new _e;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new ae(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return qe(a),new Se(a[0].id,a.length,r)}))},ct={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},ht=["Person","Place","Organization"],dt={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:ht},Actor:{isA:"Noun",notA:ht},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:ht},Demonym:{isA:["Noun","ProperNoun"],notA:ht},Possessive:{isA:"Noun"}},pt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},gt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},ft=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],mt={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:ft},Conjunction:{notA:ft},Preposition:{notA:ft},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},vt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},bt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:vt[t]?e[t].color=vt[t]:e[t].isA.some((function(r){return!!vt[r]&&(e[t].color=vt[r],!0)}))})),e},yt=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Dt=function(e,t,r){var n=Ct(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Lt.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Jt(e),r)).Gerund&&(r.Gerund=Wt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Wt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Wt.PresentTense(e)),r},Ut=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Qt=[/ary$/],Zt={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},Xt=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],Yt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],er=[/ary$/,/ous$/],tr={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},rr=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],nr={toSuperlative:function(e){if(Zt.hasOwnProperty(e))return Zt[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=sr(e);return null!==n?n:or.test(e)?e+"es":e+"s"},lr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(eas)es$/i,"$1e"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],cr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Pr={tag:function(e,t){return e?(Br(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(Br(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},Gr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},Cr=function(e){return e.split(/[ -]/g)},Dr=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=Cr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=Er(o)),i=ut(o,r.world,r.pool()),r.buildFrom(i).tagger()}if(!0===n.keepTags){var s=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){s[t]&&e.tagSafe(s[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},Fr=j((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ut(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ut(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&zr(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Vr=(Hr.json,Hr.data,j((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};Sr.alphabetical=Sr.alpha,Sr.wordcount=Sr.wordCount;var Lr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},_r={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Lr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===un.test(i)){var s=i.replace(un,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},hn=/[\'‘’‛‵′`´]$/,dn=/^(m|k|cm|km|m)\/(s|h|hr)$/,pn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],gn=/^[IVXLCDM]{2,}$/,fn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,mn="Adjective",vn="Infinitive",bn="PresentTense",yn="Singular",wn="PastTense",kn="Expression",An="LastName",$n={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,An],[/.[^aeiou]ica$/,yn],[/^([hyj]a)+$/,kn]],c:[[/.[^aeiou]ic$/,mn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,wn],[/.[aeo]{2}[bdgmnprvz]ed$/,wn],[/.[aeiou][sg]hed$/,wn],[/.[aeiou]red$/,wn],[/.[aeiou]r?ried$/,wn],[/.[bcdgtr]led$/,wn],[/.[aoui]f?led$/,wn],[/.[iao]sed$/,wn],[/[aeiou]n?[cs]ed$/,wn],[/[aeiou][rl]?[mnf]ed$/,wn],[/[aeiou][ns]?c?ked$/,wn],[/[aeiou][nl]?ged$/,wn],[/.[tdbwxz]ed$/,wn],[/[^aeiou][aeiou][tvx]ed$/,wn],[/.[cdlmnprstv]ied$/,wn],[/[^aeiou]ard$/,yn],[/[aeiou][^aeiou]id$/,mn],[/.[vrl]id$/,mn]],e:[[/.[lnr]ize$/,vn],[/.[^aeiou]ise$/,vn],[/.[aeiou]te$/,vn],[/.[^aeiou][ai]ble$/,mn],[/.[^aeiou]eable$/,mn],[/.[ts]ive$/,mn]],h:[[/.[^aeiouf]ish$/,mn],[/.v[iy]ch$/,An],[/^ug?h+$/,kn],[/^uh[ -]?oh$/,kn]],i:[[/.[oau][wvl]ski$/,An]],k:[[/^(k){2}$/,kn]],l:[[/.[gl]ial$/,mn],[/.[^aeiou]ful$/,mn],[/.[nrtumcd]al$/,mn],[/.[^aeiou][ei]al$/,mn]],m:[[/.[^aeiou]ium$/,yn],[/[^aeiou]ism$/,yn],[/^h*u*m+$/,kn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,mn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,kn],[/^(yo)+$/,kn],[/^woo+[pt]?$/,kn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,yn],[/[^i]fer$/,vn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,mn],[/[aeiou].*ist$/,mn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,bn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,yn],[/.[aeiou]sks$/,bn],[/.[aeiou]kes$/,bn],[/[aeiou][^aeiou]is$/,yn],[/[a-z]\'s$/,"Noun"],[/^yes+$/,kn]],v:[[/.[^aeiou][ai][kln]ov$/,An]],y:[[/.[cts]hy$/,mn],[/.[st]ty$/,mn],[/.[gk]y$/,mn],[/.[tnl]ary$/,mn],[/.[oe]ry$/,yn],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,mn],[/.(gg|bb|zz)ly$/,mn],[/.[aeiou]my$/,mn],[/[ea]{2}zy$/,mn],[/.[^aeiou]ity$/,yn]]},Bn="Adjective",Pn="Infinitive",Gn="PresentTense",Cn="Singular",Dn="PastTense",jn="Adverb",xn="Plural",En="Verb",Nn="LastName",Fn=[null,null,{ea:Cn,ia:"Noun",ic:Bn,ly:jn,"'n":En,"'t":En},{oed:Dn,ued:Dn,xed:Dn," so":jn,"'ll":"Modal","'re":"Copula",azy:Bn,end:En,ped:Dn,ffy:Bn,ify:Pn,ing:"Gerund",ize:Pn,lar:Bn,mum:Bn,nes:Gn,nny:Bn,oid:Bn,ous:Bn,que:Bn,rmy:Bn,rol:Cn,sis:Cn,zes:Gn},{amed:Dn,aped:Dn,ched:Dn,lked:Dn,nded:Dn,cted:Dn,dged:Dn,akis:Nn,cede:Pn,chuk:Nn,czyk:Nn,ects:Gn,ends:En,enko:Nn,ette:Cn,fies:Gn,fore:jn,gate:Pn,gone:Bn,ices:xn,ints:xn,ions:xn,less:jn,llen:Bn,made:Bn,nsen:Nn,oses:Gn,ould:"Modal",some:Bn,sson:Nn,tage:Pn,teen:"Value",tion:Cn,tive:Bn,tors:"Noun",vice:Cn},{tized:Dn,urned:Dn,eased:Dn,ances:xn,bound:Bn,ettes:xn,fully:jn,ishes:Gn,ities:xn,marek:Nn,nssen:Nn,ology:"Noun",ports:xn,rough:Bn,tches:Gn,tieth:"Ordinal",tures:xn,wards:jn,where:jn},{auskas:Nn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Nn,borough:"Place",sdottir:Nn}],On={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}dn.test(n.text)&&n.tag("Unit","per-sec",r)},regex:function(e,t){for(var r=e.text,n=0;n=2&&gn.test(r)&&fn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===Fn[i.length].hasOwnProperty(i)){var o=Fn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===$n.hasOwnProperty(n))for(var a=$n[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Tn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),On.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Hn=function(e,t){var r=e.world;zn.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Rn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Un=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Qn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],Zn=[/i$/,/ae$/],Xn=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Un.find((function(t){return e.tags[t]})))return;if(Rn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Rn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Qn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(Zn.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},Yn=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),ea=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},ta=/^[A-Z]('s|,)?$/,ra=/([A-Z]\.){2}[A-Z]?/i,na={I:!0,A:!0},aa={neighbours:Sn,case:qn,stem:Wn,plural:Xn,organizations:function(e,t){for(var r=0;r0?qa=qa.concat(t):qa.push(e)})),qa.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:xa(r),words:xa(n)}),e}));var Ja=qa,Ka=function(e){Ja.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=xa(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},Ya=function(e){var r=function(e){function r(e,n,a){var o;return t(this,r),(o=s(this,i(r).call(this,e,n,a))).contracted=null,o}return a(r,e),n(r,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Ra(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();xi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new xi(e,this,this.world)},xi.prototype.fromText=function(e){var t=ut(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(xi.prototype,ji.misc),Object.assign(xi.prototype,ji.selections),Di(xi);var Ei={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Ei).forEach((function(e){return xi.prototype[e]=xi.prototype[Ei[e]]}));var Ni=xi,Fi=function(e){var t=e.termList();return cn(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=ut(e,r),a=new Ni(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=ut(e,n),i=new Ni(a,null,n);return t&&Fi(i),i},n.extend=function(e){return e(Ni,r,this,Se,ae,_e),this},n.fromJSON=function(e){var t=lt(e,r);return new Ni(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.world=function(){return r},n.version="13.1.1",n.import=n.load,n}(new yr)})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).nlp=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);rn[t].lineage.length?1:n[e].isA.length>n[t].isA.length?-1:0:0:1}))},J={text:!0,tags:!0,implicit:!0,whitespace:!0,clean:!1,id:!1,index:!1,offset:!1,bestTag:!1},K={json:function(e,t){e=e||{};var r={};return(e=Object.assign({},J,e)).text&&(r.text=this.text),e.normal&&(r.normal=this.normal),e.tags&&(r.tags=Object.keys(this.tags)),e.clean&&(r.clean=this.clean),(e.id||e.offset)&&(r.id=this.id),e.implicit&&null!==this.implicit&&(r.implicit=this.implicit),e.whitespace&&(r.pre=this.pre,r.post=this.post),e.bestTag&&(r.bestTag=q(this,t)[0]),r}},R=Object.assign({},F,O,I,L,K);function W(){return"undefined"!=typeof window&&window.document}var U=function(e,t){for(e=e.toString();e.length0&&void 0!==arguments[0]?arguments[0]:"";t(this,e),r=String(r);var n=E(r);this.text=n.text||"",this.clean=n.clean,this.reduced=n.reduced,this.root=null,this.implicit=null,this.pre=n.pre||"",this.post=n.post||"",this.tags={},this.prev=null,this.next=null,this.id=p(n.clean),this.isA="Term",n.alias&&(this.alias=n.alias)}return n(e,[{key:"set",value:function(e){var t=E(e);return this.text=t.text,this.clean=t.clean,this}}]),e}();oe.prototype.clone=function(){var e=new oe(this.text);return e.pre=this.pre,e.post=this.post,e.tags=Object.assign({},this.tags),e},Object.assign(oe.prototype,R),Object.assign(oe.prototype,ie);var se=oe,ue={terms:function(e){if(0===this.length)return[];if(this.cache.terms)return void 0!==e?this.cache.terms[e]:this.cache.terms;for(var t=[this.pool.get(this.start)],r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"==typeof e&&(e="normal"===e?{whitespace:!0,unicode:!0,lowercase:!0,punctuation:!0,acronyms:!0,abbreviations:!0,implicit:!0,normal:!0}:"clean"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0}:"reduced"===e?{titlecase:!1,lowercase:!0,punctuation:!1,whitespace:!0,unicode:!0,implicit:!0,reduced:!0}:"root"===e?{titlecase:!1,lowercase:!0,punctuation:!0,whitespace:!0,unicode:!0,implicit:!0,root:!0}:{});var n=this.terms(),a=!1;n[0]&&null===n[0].prev&&null===n[n.length-1].next&&(a=!0);var i=n.reduce((function(i,o,s){e.last=r&&s===n.length-1;var u=!0,l=!0;return!1===a&&(0===s&&t&&(u=!1),s===n.length-1&&r&&(l=!1)),i+o.textOut(e,u,l)}),"");return!0===a&&r&&(i=le(i)),!0===e.trim&&(i=i.trim()),i}},he={trim:function(){var e=this.terms();if(e.length>0){e[0].pre=e[0].pre.replace(/^\s+/,"");var t=e[e.length-1];t.post=t.post.replace(/\s+$/,"")}return this}},de=/[.?!]\s*$/,pe=function(e,t){t[0].pre=e[0].pre;var r,n,a=e[e.length-1],i=t[t.length-1];i.post=(r=a.post,n=i.post,de.test(n)?n+r.match(/\s*$/):r),a.post="",""===a.post&&(a.post+=" ")},ge=function(e,t,r){var n=e.terms(),a=t.terms();pe(n,a),function(e,t,r){var n=e[e.length-1],a=t[t.length-1],i=n.next;(n.next=t[0].id,a.next=i,i)&&(r.get(i).prev=a.id);var o=e[0].id;o&&(t[0].prev=o)}(n,a,e.pool);var i=[e],o=e.start,s=[r];return(s=s.concat(r.parents())).forEach((function(e){var t=e.list.filter((function(e){return e.hasId(o)}));i=i.concat(t)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length})),e.cache={},e},fe=/ /,me=function(e,t,r){var n=e.start,a=t.terms();!function(e){var t=e[e.length-1];!1===fe.test(t.post)&&(t.post+=" ")}(a),function(e,t,r){var n=r[r.length-1];n.next=e.start;var a=e.pool,i=a.get(e.start);i.prev&&(a.get(i.prev).next=t.start);r[0].prev=e.terms(0).prev,e.terms(0).prev=n.id}(e,t,a);var i=[e],o=[r];return(o=o.concat(r.parents())).forEach((function(e){var r=e.list.filter((function(e){return e.hasId(n)||e.hasId(t.start)}));i=i.concat(r)})),(i=function(e){return e.filter((function(t,r){return e.indexOf(t)===r}))}(i)).forEach((function(e){e.length+=t.length,e.start===n&&(e.start=t.start),e.cache={}})),e},ve=function(e,t){var r=t.pool(),n=e.terms(),a=r.get(n[0].prev)||{},i=r.get(n[n.length-1].next)||{};n[0].implicit&&a.implicit&&(a.set(a.implicit),a.post+=" "),function(e,t,r,n){var a=e.parents();a.push(e),a.forEach((function(e){var a=e.list.find((function(e){return e.hasId(t)}));a&&(a.length-=r,a.start===t&&(a.start=n.id),a.cache={})})),e.list=e.list.filter((function(e){return!(!e.start||!e.length)}))}(t,e.start,e.length,i),a&&(a.next=i.id),i&&(i.prev=a.id)},be={append:function(e,t){return ge(this,e,t),this},prepend:function(e,t){return me(this,e,t),this},delete:function(e){return ve(this,e),this},replace:function(e,t){var r=this.length;ge(this,e,t);var n=this.buildFrom(this.start,this.length);n.length=r,ve(n,t)},splitOn:function(e){var t=this.terms(),r={before:null,match:null,after:null},n=t.findIndex((function(t){return t.id===e.start}));if(-1===n)return r;var a=t.slice(0,n);a.length>0&&(r.before=this.buildFrom(a[0].id,a.length));var i=t.slice(n,n+e.length);i.length>0&&(r.match=this.buildFrom(i[0].id,i.length));var o=t.slice(n+e.length,t.length);return o.length>0&&(r.after=this.buildFrom(o[0].id,o.length,this.pool)),r}},ye={json:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,r={};return e.text&&(r.text=this.text()),e.normal&&(r.normal=this.text("normal")),e.clean&&(r.clean=this.text("clean")),e.reduced&&(r.reduced=this.text("reduced")),e.root&&(r.root=this.text("root")),e.trim&&(r.text&&(r.text=r.text.trim()),r.normal&&(r.normal=r.normal.trim()),r.reduced&&(r.reduced=r.reduced.trim())),e.terms&&(!0===e.terms&&(e.terms={}),r.terms=this.terms().map((function(r){return r.json(e.terms,t)}))),r}},we={lookAhead:function(e){e||(e=".*");var t=this.pool,r=[],n=this.terms();return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.next))}(n[n.length-1].next),0===r.length?[]:this.buildFrom(r[0].id,r.length).match(e)},lookBehind:function(e){e||(e=".*");var t=this.pool,r=[];return function e(n){var a=t.get(n);a&&(r.push(a),a.prev&&e(a.prev))}(t.get(this.start).prev),0===r.length?[]:this.buildFrom(r[r.length-1].id,r.length).match(e)}},ke=Object.assign({},ue,ce,he,be,ye,we),Ae=function(e,t){if(0===t.length)return!0;for(var r=0;r0)return!0;if(!0===n.anything&&!0===n.negative)return!0}return!1},$e=function(e,t,r,n,a,i){for(var o=t;t1&&u.greedy?g.length+=o-d:g.length++}}else if(!0!==u.optional){if(!(e[o].isImplicit()&&t[s-1]&&e[o+1]&&e[o+1].doesMatch(u,r+o,n)))return[!1,null];o+=2}}else{var f=Be(e,o,t[s+1],u,r);if(void 0!==u.min&&f-ou.max){o+=u.max;continue}if(null===f)return[!1,null];l&&(Pe(a,c,e,o,u.named).length=f-o),o=f}}return[e.slice(0,o),a]},Ce=function(e,t,r){if(!r||0===r.length)return r;if(t.some((function(e){return e.end}))){var n=e[e.length-1];r=r.filter((function(e){return-1!==e.match.indexOf(n)}))}return r},De=/\{([0-9]+,?[0-9]*)\}/,je=/&&/,xe=new RegExp(/^<(\S+)>/),Ee=function(e){return e[e.length-1]},Ne=function(e){return e[0]},Fe=function(e){return e.substr(1)},Oe=function(e){return e.substr(0,e.length-1)},Te=function(e){return e=Fe(e),e=Oe(e)},ze=function e(t){for(var r,n={},a=0;a<2;a+=1){if("$"===Ee(t)&&(n.end=!0,t=Oe(t)),"^"===Ne(t)&&(n.start=!0,t=Fe(t)),("["===Ne(t)||"]"===Ee(t))&&(n.named=!0,"["===Ne(t)?n.groupType="]"===Ee(t)?"single":"start":n.groupType="end",t=(t=t.replace(/^\[/,"")).replace(/\]$/,""),"<"===Ne(t))){var i=xe.exec(t);i.length>=2&&(n.named=i[1],t=t.replace(i[0],""))}if("+"===Ee(t)&&(n.greedy=!0,t=Oe(t)),"*"!==t&&"*"===Ee(t)&&"\\*"!==t&&(n.greedy=!0,t=Oe(t)),"?"===Ee(t)&&(n.optional=!0,t=Oe(t)),"!"===Ne(t)&&(n.negative=!0,t=Fe(t)),"("===Ne(t)&&")"===Ee(t)){je.test(t)?(n.choices=t.split(je),n.operator="and"):(n.choices=t.split("|"),n.operator="or"),n.choices[0]=Fe(n.choices[0]);var o=n.choices.length-1;n.choices[o]=Oe(n.choices[o]),n.choices=n.choices.map((function(e){return e.trim()})),n.choices=n.choices.filter((function(e){return e})),n.choices=n.choices.map(e),t=""}if("/"===Ne(t)&&"/"===Ee(t))return t=Te(t),n.regex=new RegExp(t),n;if("~"===Ne(t)&&"~"===Ee(t))return t=Te(t),n.soft=!0,n.word=t,n}return!0===De.test(t)&&(t=t.replace(De,(function(e,t){var r=t.split(/,/g);return 1===r.length?(n.min=Number(r[0]),n.max=Number(r[0])):(n.min=Number(r[0]),n.max=Number(r[1]||999)),n.greedy=!0,""}))),"#"===Ne(t)?(n.tag=Fe(t),n.tag=(r=n.tag).charAt(0).toUpperCase()+r.substr(1),n):"@"===Ne(t)?(n.method=Fe(t),n):"."===t?(n.anything=!0,n):"*"===t?(n.anything=!0,n.greedy=!0,n.optional=!0,n):(t&&(t=(t=t.replace("\\*","*")).replace("\\.","."),n.word=t.toLowerCase()),n)},He=function(e){return e.filter((function(e){return e.groupType})).length>0&&(e=function(e){for(var t,r,n=!1,a=-1,i=0;i)?\(.*?\)[?+*]*\]?\$?)/);return t=t.map((function(e){return e.trim()}))}(t);return r=(r=function(e){var t=[];return e.forEach((function(e){if(/^[[^_/]?\(/.test(e[0]))t.push(e);else{var r=e.split(" ");r=r.filter((function(e){return e})),t=t.concat(r)}})),t}(r)).map(ze),r=He(r)},Ie=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof t&&(t=Ve(t)),!0===Ae(e,t))return[];var n=t.filter((function(e){return!0!==e.optional})).length,a=e.terms(),i=[];if(!0===t[0].start){var o=Ge(a,t,0,a.length),s=c(o,2),u=s[0],l=s[1];return!1!==u&&u.length>0&&(u=u.filter((function(e){return e})),i.push({match:u,groups:l})),Ce(a,t,i)}for(var h=0;ha.length);h+=1){var d=Ge(a.slice(h),t,h,a.length),p=c(d,2),g=p[0],f=p[1];if(!1!==g&&g.length>0&&(h+=g.length-1,g=g.filter((function(e){return e})),i.push({match:g,groups:f}),!0===r))return Ce(a,t,i)}return Ce(a,t,i)},Me=function(e,t){var r={};Ie(e,t).forEach((function(e){e.match.forEach((function(e){r[e.id]=!0}))}));var n=e.terms(),a=[],i=[];return n.forEach((function(e){!0!==r[e.id]?i.push(e):i.length>0&&(a.push(i),i=[])})),i.length>0&&a.push(i),a},Se={match:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Ie(this,e,r);return n=n.map((function(e){var r=e.match,n=e.groups,a=t.buildFrom(r[0].id,r.length,n);return a.cache.terms=r,a}))},has:function(e){return Ie(this,e,!0).length>0},not:function(e){var t=this,r=Me(this,e);return r=r.map((function(e){return t.buildFrom(e[0].id,e.length)}))},canBe:function(e,t){for(var r=this,n=[],a=this.terms(),i=!1,o=0;o0})).map((function(e){return r.buildFrom(e[0].id,e.length)}))}},Le=function e(r,n,a){t(this,e),this.start=r,this.length=n,this.isA="Phrase",Object.defineProperty(this,"pool",{enumerable:!1,writable:!0,value:a}),Object.defineProperty(this,"cache",{enumerable:!1,writable:!0,value:{}}),Object.defineProperty(this,"groups",{enumerable:!1,writable:!0,value:{}})};Le.prototype.buildFrom=function(e,t,r){var n=new Le(e,t,this.pool);return r&&Object.keys(r).length>0?n.groups=r:n.groups=this.groups,n},Object.assign(Le.prototype,Se),Object.assign(Le.prototype,ke);var _e={term:"terms"};Object.keys(_e).forEach((function(e){return Le.prototype[e]=Le.prototype[_e[e]]}));var qe=Le,Je=function(){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),Object.defineProperty(this,"words",{enumerable:!1,value:r})}return n(e,[{key:"add",value:function(e){return this.words[e.id]=e,this}},{key:"get",value:function(e){return this.words[e]}},{key:"remove",value:function(e){delete this.words[e]}},{key:"merge",value:function(e){return Object.assign(this.words,e.words),this}},{key:"stats",value:function(){return{words:Object.keys(this.words).length}}}]),e}();Je.prototype.clone=function(){var e=this,t=Object.keys(this.words).reduce((function(t,r){var n=e.words[r].clone();return t[n.id]=n,t}),{});return new Je(t)};for(var Ke=Je,Re=function(e){e.forEach((function(t,r){r>0&&(t.prev=e[r-1].id),e[r+1]&&(t.next=e[r+1].id)}))},We=/(\S.+?[.!?\u203D\u2E18\u203C\u2047-\u2049])(?=\s+|$)/g,Ue=/\S/,Qe=/[ .][A-Z]\.? *$/i,Ze=/(?:\u2026|\.{2,}) *$/,Xe=/((?:\r?\n|\r)+)/,Ye=/[a-z0-9\u00C0-\u00FF\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]/i,et=/^\s+/,tt=function(e,t){if(!0===Qe.test(e))return!1;if(!0===Ze.test(e))return!1;if(!1===Ye.test(e))return!1;var r=e.replace(/[.!?\u203D\u2E18\u203C\u2047-\u2049] *$/,"").split(" "),n=r[r.length-1].toLowerCase();return!t.hasOwnProperty(n)},rt=function(e,t){var r=t.cache.abbreviations;e=e||"";var n=[],a=[];if(!(e=String(e))||"string"!=typeof e||!1===Ue.test(e))return n;for(var i=function(e){for(var t=[],r=e.split(Xe),n=0;n0&&(n.push(l),a[u]="")}if(0===n.length)return[e];for(var c=1;c0?(t[t.length-1]+=i,t.push(s)):t.push(i+s),i=""):i+=s}return i&&(0===t.length&&(t[0]=""),t[t.length-1]+=i),t=(t=function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=arguments.length>2?arguments[2]:void 0;"string"!=typeof e&&"number"==typeof e&&(e=String(e));var n=rt(e,t);n=n.map((function(e){return ct(e)})),r=r||new Ke;var a=n.map((function(e){e=e.map((function(e){var t=new se(e);return r.add(t),t})),Re(e);var t=new qe(e[0].id,e.length,r);return t.cache.terms=e,t}));return a},dt=function(e,t){var r=new Ke;return e.map((function(e,n){var a=e.terms.map((function(a,i){var o=new se(a.text);return o.pre=void 0!==a.pre?a.pre:"",void 0===a.post&&(a.post=" ",i>=e.terms.length-1&&(a.post=". ",n>=e.terms.length-1&&(a.post="."))),o.post=void 0!==a.post?a.post:" ",a.tags&&a.tags.forEach((function(e){return o.tag(e,"",t)})),r.add(o),o}));return Re(a),new qe(a[0].id,a.length,r)}))},pt={Comparative:"true¦better",Superlative:"true¦earlier",PresentTense:"true¦is,sounds",Value:"true¦a few",Noun:"true¦a5b4c2f1here,ie,lit,m0no doubt,pd,tce;a,d;t,y;a,ca,o0;l,rp;a,l;d,l,rc",Copula:"true¦a1is,w0;as,ere;m,re",PastTense:"true¦be3came,d2had,lied,meant,sa2taken,w0;as,e0;nt,re;id;en,gan",Condition:"true¦if,unless",Gerund:"true¦accord0be0develop0go0result0stain0;ing",Negative:"true¦n0;ever,o0;!n,t",QuestionWord:"true¦how3wh0;at,e1ich,o0y;!m,se;n,re; come,'s",Plural:"true¦records",Conjunction:"true¦&,aEbAcuz,how8in caDno7o6p4supposing,t1vers5wh0yet;eth8ile;h0o;eref9o0;!uC;l0rovided that;us;r,therwi6; matt1r;!ev0;er;e0ut;cau1f0;ore;se;lthou1nd,s 0;far as,if;gh",Pronoun:"true¦'em,elle,h4i3me,ourselves,she5th1us,we,you0;!rself;e0ou;m,y;!l,t;e0im;!'s",Singular:"true¦0:0X;1:10;a0Wb0Kc0Bd04e02fXgShOici1jel0kitty,lNmJnIoHpDquestion mark,rBs7t4u2womW;nc0Rs 2;doll0Dst0F; rex,a3h2ic,ragedy,v show;ere,i1;l0x return;ist0Pky,omeone,t2uper bowl,yst0W;ep3ri1u2;de0Pff;faMmoM;al0i1o2;om,se;a4i0Jl05r3u2;dLrpoD;erogaVobl0O;rt,te0I;bjSceGthers;othi1umb0E;a4ee04o2;del,m2nopo0th0C;!my;n,yf0;i0unch;ead start,o2;l0me3u2;se;! run;adf0entlem5irlZlaci04od,rand3u2;l0y; slam,fa2mo2;th01;an;a5ella,ly,ol0r3un2;di1;iTo2;ntiWsN;mi0thV;conomy,gg,ner5veWx2;ampQecu7;ad7e4innSo2ragonf0ude;cumentFg2i0l0or;gy;ath,t2;ec2;tive;!dy;a8eili1h6i4o2redit card;ttage,u2;riJsin;ty,vil w2;ar;andeliGocol2;ate;n2rD;ary;aAel0lesHo6r4u2;n2tterf0;ti1;eakfast,o2;!th8;dy,tt4y2;!fri2;end;le;nki1r2;ri2;er;d4l0noma0u2;nt;ly; homin4verti2;si1;ng;em",Actor:"true¦aJbGcFdCengineIfAgardenIh9instructPjournalLlawyIm8nurse,opeOp5r3s1t0;echnCherapK;ailNcientJoldiGu0;pervKrgeon;e0oofE;ceptionGsearC;hotographClumbColi1r0sychologF;actitionBogrammB;cem6t5;echanic,inist9us4;airdress8ousekeep8;arm7ire0;fight6m2;eputy,iet0;ici0;an;arpent2lerk;ricklay1ut0;ch0;er;ccoun6d2ge7r0ssis6ttenda7;chitect,t0;ist;minist1v0;is1;rat0;or;ta0;nt",Honorific:"true¦a03b00cSdReQfiLgKhon,jr,king,lJmEoDp8queen,r4s0taoiseach,vice7;e1fc,gt,ir,r,u0;ltTpt,rg;c0nDrgeaL;ond liJretary;abbi,e0;ar1pAs,v0;!erend; admirY;astPhd,r0vt;esideEi1of0;!essN;me mini5nce0;!ss;fficOp,rd;a3essrs,i2lle,me,r1s0;!tr;!s;stK;gistrate,j,r6yF;i3lb,t;en,ov;eld mar3rst l0;ady,i0;eutena0;nt;shG;sq,xcellency;et,oct6r,utchess;apt6hance4mdr,o0pl;lonel,m2ngress0unci3;m0wom0;an;dr,mand5;ll0;or;!ain;ldg,rig0;!adi0;er;d0sst,tty,yatullah;j,m0v;!ir0;al",SportsTeam:"true¦0:1A;1:1H;2:1G;a1Eb16c0Td0Kfc dallas,g0Ihouston 0Hindiana0Gjacksonville jagua0k0El0Bm01newToQpJqueens parkIreal salt lake,sAt5utah jazz,vancouver whitecaps,w3yW;ashington 3est ham0Rh10;natio1Oredski2wizar0W;ampa bay 6e5o3;ronto 3ttenham hotspur;blue ja0Mrapto0;nnessee tita2xasC;buccanee0ra0K;a7eattle 5heffield0Kporting kansas0Wt3;. louis 3oke0V;c1Frams;marine0s3;eah15ounG;cramento Rn 3;antonio spu0diego 3francisco gJjose earthquak1;char08paA; ran07;a8h5ittsburgh 4ortland t3;imbe0rail blaze0;pirat1steele0;il3oenix su2;adelphia 3li1;eagl1philNunE;dr1;akland 3klahoma city thunder,rlando magic;athle0Mrai3;de0; 3castle01;england 7orleans 6york 3;city fc,g4je0FknXme0Fred bul0Yy3;anke1;ian0D;pelica2sain0C;patrio0Brevolut3;ion;anchester Be9i3ontreal impact;ami 7lwaukee b6nnesota 3;t4u0Fvi3;kings;imberwolv1wi2;rewe0uc0K;dolphi2heat,marli2;mphis grizz3ts;li1;cXu08;a4eicesterVos angeles 3;clippe0dodDla9; galaxy,ke0;ansas city 3nE;chiefs,roya0E; pace0polis colU;astr06dynamo,rockeTtexa2;olden state warrio0reen bay pac3;ke0;.c.Aallas 7e3i05od5;nver 5troit 3;lio2pisto2ti3;ge0;broncZnuggeM;cowbo4maver3;ic00;ys; uQ;arCelKh8incinnati 6leveland 5ol3;orado r3umbus crew sc;api5ocki1;brow2cavalie0india2;bengaWre3;ds;arlotte horAicago 3;b4cubs,fire,wh3;iteB;ea0ulR;diff3olina panthe0; c3;ity;altimore 9lackburn rove0oston 5rooklyn 3uffalo bilN;ne3;ts;cel4red3; sox;tics;rs;oriol1rave2;rizona Ast8tlanta 3;brav1falco2h4u3;nited;aw9;ns;es;on villa,r3;os;c5di3;amondbac3;ks;ardi3;na3;ls",Uncountable:"true¦a1Ib1Ac11d0Ye0Rf0Lg0Hh0Ci08j07knowled1Hl02mUnews,oTpQrLsAt5vi4w0;a2ea05i1oo0;d,l;ldlife,ne;rmth,t17;neg0Yol06tae;e3h2oothpaste,r0una;affPou0;ble,sers,t;ermod1Eund12;a,nnis;a8cene04eri0Oh7il6kittl0Onow,o5p3t1u0;g0Rnshi0H;ati1De0;am,el;ace16e0;ci0Jed;ap,cc0U;k,v0T;eep,ingl0G;d04fe10l0nd;m0St;a3e1ic0;e,ke0D;c0laxa09search;ogni08rea08;bi09in;aJe1hys10last5o0ressV;lit0Zrk,w0J;a0Vtrol;bstetr0Xil,xygen;a5e3ilk,o2u0;mps,s0;ic;nGo0A;a0chan0S;slZt;chine0il,themat0Q; learn05ry;aught08e2i1ogi0Nu0;ck,g0C;ce,ghtn02ngui0LteratH;a0isG;th04;ewel7usti0G;ce,mp0nformaOtself;a0ortan0E;ti0;en0C;a3isto2o0;ck0mework,n0spitali06;ey;ry;ir,libut,ppi7;en01o1r0um,ymna08;a6ound;l0ssip;d,f;i4lour,o1urnit0;ure;od,rgive0uriNwl;ne0;ss;c6sh;conomZduca5lectr4n2quip3thZvery0;body,o0thE;ne;joy0tertain0;ment;iciNonU;tiF;ar1iabet0raugh1;es;ts;a7elcius,h3ivPl2o0urrency;al,ld w0nfusiAttA;ar;assMoth2;aos,e0;e1w0;ing;se;r4sh;a4eef,i1lood,owls,read,utt0;er;lliar1s0;on;ds;g0ss;ga0;ge;c6dvi5ero3ir2mnes1rt,thl0;et7;ty;craft;b4d0naut4;ynam3;ce;id,ou0;st0;ics",Infinitive:"true¦0:6K;1:6Y;2:57;3:6V;4:6W;5:5Z;6:67;7:6Q;8:6I;9:6U;A:6P;B:6S;C:6D;D:6Z;E:56;F:5P;a6Cb61c52d4Ae3Uf3Hg3Bh34i2Rj2Pk2Nl2Fm25n22o1Xp1Iques3Ir0Qs05tXuSvOwHyG;awn,ield;aJe1Yhist6iIoGre65;nd0rG;k,ry;pe,sh,th0;lk,nHrGsh,tCve;n,raD;d0t;aIiGo9;eGsA;!w;l6Cry;nHpGr3se;gra4Mli3Z;dGi9lo5Spub3O;erGo;mi58w1I;aMeLhKoJrHuGwi7;ne,rn;aGe0Mi5Nu7y;de,in,nsf0p,v5F;r2XuC;ank,reat2N;nd,st;lk,rg1Ps9;aZcWeVhTi4Akip,lSmRnee3Jo4YpQtJuGwitC;bmAck,ff0gge7ppHrGspe5;ge,pri1rou4Vvi4;ly,o34;aLeKoJrHuG;dy,mb6;aEeGi4;ngth2Dss,tC;p,re;m,p;in,ke,r0Qy;laFoil,rink6;e1Xi6o3H;am,ip;a2iv0oG;ck,ut;arCem,le5n1r4tt6;aHo2rG;atCew;le,re;il,ve;a05eIisk,oHuG;in,le,sh;am,ll;a01cZdu8fYgXje5lUmTnt,pQquPsKtJvGwa5O;eGiew,o34;al,l,rG;se,t;aEi2u40;eJi7oItG;!o2rG;i5uc1Y;l4rt;mb6nt,r4;e7i2;air,eHlGo3ZreseD;a8y;at;aEemb0i3Vo4;aHeGi4y;a1nt;te,x;a56r0I;act1Wer,le5u1;a11ei4k5IoGyc6;gni2Anci6rd;ch,li29s5G;i1nG;ge,k;aTerSiRlOoMrIuG;b1Zll,mp,rGsh;cha1s4J;ai1eIiDoG;cGdu8greBhibAmi1te7vi2T;eBlaim;di5pa2ss,veD;iDp,rtr3ZsGur;e,t;aHuG;g,n3;n,y;ck,le;fo30mAsi7;ck,iDrt4Fss,u1;bJccur,ff0pera9utweIverGwe;co40lap,ta20u1wG;helm;igh;ser4taE;eHotG;e,i8;ed,gle5;aLeKiIoHuG;ltip3Crd0;nit11ve;nGrr10;d,g6us;asu2lt,n0Nr3;intaEna3rHtG;ch,t0;ch,kGry;et;aLeKiIoGu1B;aGck,ok,ve;d,n;ft,ke,mAnGst2Wve;e,k;a2Dc0Et;b0Nck,uG;gh,nC;iGno2Z;ck,ll,ss;am,oEuG;d3mp;gno2mQnGss3C;cOdica9flu0MhNsKtIvG;eGol4;nt,st;erGrodu8;a5fe2;i7tG;aGru5;ll;abAibA;lu1Er1C;agi22pG;lemeDo20ro4;aKeIi2oHuG;nt,rry;n02pe,st;aGlp;d,t;nd6ppGrm,te;en;aKloBove1MrIuG;arGeBi13;ant33d;aGip,umb6;b,sp;in,th0ze;aQeaPiNlLoIracHuncG;ti3D;tu2;cus,lHrG;ce,eca7m,s2V;d,l1Z;aFoG;at,od,w;gu2lGniFx;e,l;r,tu2;il,vG;or;a13cho,le5mSnPstNvalua9xG;a0AcLerKi7pGte17;a16eHi2laEoGreB;rt,se;ct,riG;en8;ci1t;el,han3;abGima9;liF;ab6couXdHfor8ga3han8j03riCsu2t0vG;isi2Qy;!u2;body,er3pG;hasiGow0;ze;a06eUiLoKrHuG;mp;aHeBiG;ft;g,in;d3ubt;ff0p,re5sHvG;iYor8;aKcHliGmiBpl16tinguiF;ke;oGuB;uGv0;ra3;gr1TppG;ear,ro4;cNem,fLliv0ma0Dny,pKsHterG;mi0E;cribe,er4iHtrG;oy;gn,re;a09e08i5osA;eGi09y;at,ct;iIlHrG;ea1;a2i05;de;ma3n8re,te;a0Ae09h06i9l04oJrG;aHeGoBuFy;a9dA;ck,ve;llZmSnHok,py,uGv0;gh,nt;cePdu5fMsKtIvG;eGin8;rt,y;aEin0SrG;a7ibu9ol;iGtitu9;d0st;iHoGroD;rm;gu2rm;rn;biLfoKmaJpG;a2laE;in;re;nd;rt;ne;ap1e5;aGip,o1;im,w;aHeG;at,ck,w;llen3n3r3se;a1nt0;ll,ncIrGt0u1;eGry;!en;el;aPeMloLoJruFuG;lGry;ly;sh;a7mb,o7rrGth0un8;ow;ck;ar,lHnefAtrG;ay;ie4ong;ng,se;band0Jc0Bd06ffo05gr04id,l01mu1nYppTrQsKttGvoid,waA;acIeHra5;ct;m0Fnd;h,k;k,sG;eIiHocia9uG;me;gn,st;mb6rt;le;chHgGri4;ue;!i4;eaJlIroG;aCve;ch;aud,y;l,r;noun8sw0tG;icipa9;ce;lHt0;er;e3ow;ee;rd;aRdIju7mAoR;it;st;!reB;ss;cJhie4knowled3tiva9;te;ge;ve;eIouDu1;se;nt;pt;on",Unit:"true¦0:19;a14b12c0Od0Ne0Lf0Gg0Ch09in0Hjoule0k02l00mNnMoLpIqHsqCt7volts,w6y4z3°2µ1;g,s;c,f,n;b,e2;a0Nb,d0Dears old,o1;tt0H;att0b;able4b3d,e2on1sp;!ne0;a2r0D;!l,sp;spo04; ft,uare 1;c0Id0Hf3i0Fkilo0Jm1ya0E;e0Mil1;e0li0H;eet0o0D;t,uart0;ascals,e2i1ou0Pt;c0Mnt0;rcent,t02;hms,uYz;an0JewtT;/s,b,e9g,i3l,m2p1²,³;h,s;!²;!/h,cro5l1;e1li08;! pFs1²;! 1;anEpD;g06s0B;gQter1;! 2s1;! 1;per second;b,i00m,u1x;men0x0;b,elvin0g,ilo2m1nR;!/h,ph,²;byZgXmeter1;! p2s1;! p1;er1; hour;e1g,r0z;ct1rtz0;aXogQ;al2b,igAra1;in0m0;!l1;on0;a4emtPl2t1;²,³; oz,uid ou1;nce0;hrenheit0rad0;b,x1;abyH;eciCg,l,mA;arat0eAg,m9oulomb0u1;bic 1p0;c5d4fo3i2meAya1;rd0;nch0;ot0;eci2;enti1;me4;!²,³;lsius0nti1;g2li1me1;ter0;ram0;bl,y1;te0;c4tt1;os1;eco1;nd0;re0;!s",Organization:"true¦0:46;a3Ab2Qc2Ad21e1Xf1Tg1Lh1Gi1Dj19k17l13m0Sn0Go0Dp07qu06rZsStFuBv8w3y1;amaha,m0Xou1w0X;gov,tu2S;a3e1orld trade organizati41;lls fargo,st1;fie22inghou16;l1rner br3D;-m11gree31l street journ25m11;an halNeriz3Wisa,o1;dafo2Gl1;kswagLvo;bs,kip,n2ps,s1;a tod2Rps;es35i1;lev2Xted natio2Uv; mobi2Kaco bePd bMeAgi frida9h3im horto2Tmz,o1witt2W;shiba,y1;ota,s r Y;e 1in lizzy;b3carpen33daily ma2Xguess w2holli0rolling st1Ms1w2;mashing pumpki2Ouprem0;ho;ea1lack eyed pe3Fyrds;ch bo1tl0;ys;l2s1;co,la m12;efoni07us;a6e4ieme2Gnp,o2pice gir5ta1ubaru;rbucks,to2N;ny,undgard1;en;a2Rx pisto1;ls;few25insbu26msu1X;.e.m.,adiohead,b6e3oyal 1yan2X;b1dutch she4;ank;/max,aders dige1Ed 1vl32;bu1c1Uhot chili peppe2Klobst28;ll;c,s;ant2Vizno2F;an5bs,e3fiz24hilip morrBi2r1;emier27octer & gamb1Rudenti14;nk floyd,zza hut;psi28tro1uge08;br2Qchina,n2Q; 2ason1Xda2G;ld navy,pec,range juli2xf1;am;us;a9b8e5fl,h4i3o1sa,wa;kia,tre dame,vart1;is;ke,ntendo,ss0K;l,s;c,st1Etflix,w1; 1sweek;kids on the block,york08;a,c;nd1Us2t1;ional aca2Fo,we0Q;a,cYd0O;aAcdonald9e5i3lb,o1tv,yspace;b1Nnsanto,ody blu0t1;ley crue,or0O;crosoft,t1;as,subisO;dica3rcedes2talli1;ca;!-benz;id,re;'s,s;c's milk,tt13z1Y;'ore09a3e1g,ittle caesa1Ktd;novo,x1;is,mark; pres5-z-boy,bour party;atv,fc,kk,m1od1K;art;iffy lu0Lo3pmorgan1sa;! cha1;se;hnson & johns1Sy d1R;bm,hop,n1tv;c,g,te1;l,rpol; & m,asbro,ewlett-packaTi3o1sbc,yundai;me dep1n1J;ot;tac1zbollah;hi;eneral 6hq,l5mb,o2reen d0Iu1;cci,ns n ros0;ldman sachs,o1;dye1g0B;ar;axo smith kliZencore;electr0Im1;oto0V;a3bi,da,edex,i1leetwood mac,oGrito-l0A;at,nancial1restoV; tim0;cebook,nnie mae;b06sa,u3xxon1; m1m1;ob0H;!rosceptics;aiml0Ae5isney,o3u1;nkin donuts,po0Wran dur1;an;j,w j1;on0;a,f leppa3ll,p2r spiegZstiny's chi1;ld;eche mode,t;rd;aEbc,hBi9nn,o3r1;aigsli5eedence clearwater reviv1ossra05;al;!ca c5l4m1o0Ast05;ca2p1;aq;st;dplMgate;ola;a,sco1tigroup;! systems;ev2i1;ck fil-a,na daily;r0Hy;dbury,pital o1rl's jr;ne;aGbc,eCfAl6mw,ni,o2p,r1;exiteeWos;ei3mbardiJston 1;glo1pizza;be;ng;ack & deckFo2ue c1;roX;ckbuster video,omingda1;le; g1g1;oodriN;cht3e ge0n & jer2rkshire hathaw1;ay;ryH;el;nana republ3s1xt5y5;f,kin robbi1;ns;ic;bXcSdidRerosmith,ig,lLmFnheuser-busEol,ppleAr7s3t&t,v2y1;er;is,on;hland2s1;n,ociated F; o1;il;by4g2m1;co;os; compu2bee1;'s;te1;rs;ch;c,d,erican3t1;!r1;ak; ex1;pre1;ss; 4catel2t1;air;!-luce1;nt;jazeera,qae1;da;as;/dc,a3er,t1;ivisi1;on;demy of scienc0;es;ba,c",Demonym:"true¦0:16;1:13;a0Wb0Nc0Cd0Ae09f07g04h02iYjVkTlPmLnIomHpDqatari,rBs7t5u4v3wel0Rz2;am0Fimbabwe0;enezuel0ietnam0H;g9krai1;aiwThai,rinida0Iu2;ni0Qrkmen;a4cot0Ke3ingapoOlovak,oma0Tpa05udRw2y0X;edi0Kiss;negal0Br08;mo0uU;o6us0Lw2;and0;a3eru0Hhilipp0Po2;li0Ertugu06;kist3lesti1na2raguay0;ma1;ani;amiZi2orweP;caragu0geri2;an,en;a3ex0Mo2;ngo0Erocc0;cedo1la2;gasy,y08;a4eb9i2;b2thua1;e0Dy0;o,t02;azakh,eny0o2uwaiti;re0;a2orda1;ma0Bp2;anN;celandic,nd4r2sraeli,ta02vo06;a2iT;ni0qi;i0oneV;aiDin2ondur0unN;di;amDe2hanai0reek,uatemal0;or2rm0;gi0;i2ren7;lipino,n4;cuadoVgyp6ngliJsto1thiopi0urope0;a2ominXut4;niH;a9h6o4roa3ub0ze2;ch;ti0;lom2ngol5;bi0;a6i2;le0n2;ese;lifor1m2na3;bo2eroo1;di0;angladeshi,el8o6r3ul2;gaG;aziBi2;ti2;sh;li2s1;vi0;aru2gi0;si0;fAl7merBngol0r5si0us2;sie,tr2;a2i0;li0;gent2me1;ine;ba1ge2;ri0;ni0;gh0r2;ic0;an",Possessive:"true¦anyAh5its,m3noCo1sometBthe0yo1;ir1mselves;ur0;!s;i8y0;!se4;er1i0;mse2s;!s0;!e0;lf;o1t0;hing;ne",Currency:"true¦$,aud,bScQdLeurKfJgbp,hkd,iIjpy,kGlEp8r7s3usd,x2y1z0¢,£,¥,ден,лв,руб,฿,₡,₨,€,₭,﷼;lotySł;en,uanR;af,of;h0t5;e0il5;k0q0;elM;iel,oubleLp,upeeL;e2ound st0;er0;lingI;n0soH;ceGn0;ies,y;e0i8;i,mpi7;n,r0wanzaCyatC;!onaBw;ls,nr;ori7ranc9;!o8;en3i2kk,o0;b0ll2;ra5;me4n0rham4;ar3;ad,e0ny;nt1;aht,itcoin0;!s",City:"true¦a2Wb26c1Wd1Re1Qf1Og1Ih1Ai18jakar2Hk0Zl0Tm0Gn0Co0ApZquiYrVsLtCuBv8w3y1z0;agreb,uri1Z;ang1Te0okohama;katerin1Hrev34;ars3e2i0rocl3;ckl0Vn0;nipeg,terth0W;llingt1Oxford;aw;a1i0;en2Hlni2Z;lenc2Uncouv0Gr2G;lan bat0Dtrecht;a6bilisi,e5he4i3o2rondheim,u0;nVr0;in,ku;kyo,ronIulouC;anj23l13miso2Jra2A; haJssaloni0X;gucigalpa,hr2Ol av0L;i0llinn,mpe2Bngi07rtu;chu22n2MpT;a3e2h1kopje,t0ydney;ockholm,uttga12;angh1Fenzh1X;o0KvZ;int peters0Ul3n0ppo1F; 0ti1B;jo0salv2;se;v0z0Q;adU;eykjavik,i1o0;me,sario,t25;ga,o de janei17;to;a8e6h5i4o2r0ueb1Qyongya1N;a0etor24;gue;rt0zn24; elizabe3o;ls1Grae24;iladelph1Znom pe07oenix;r0tah tik19;th;lerJr0tr10;is;dessa,s0ttawa;a1Hlo;a2ew 0is;delTtaip0york;ei;goya,nt0Upl0Uv1R;a5e4i3o1u0;mb0Lni0I;nt0scH;evideo,real;l1Mn01skolc;dellín,lbour0S;drid,l5n3r0;ib1se0;ille;or;chest0dalWi0Z;er;mo;a4i1o0vAy01;nd00s angel0F;ege,ma0nz,sbZverpo1;!ss0;ol; pla0Iusan0F;a5hark4i3laipeda,o1rak0uala lump2;ow;be,pavog0sice;ur;ev,ng8;iv;b3mpa0Kndy,ohsiu0Hra0un03;c0j;hi;ncheMstanb0̇zmir;ul;a5e3o0; chi mi1ms,u0;stI;nh;lsin0rakliG;ki;ifa,m0noi,va0A;bu0SiltD;alw4dan3en2hent,iza,othen1raz,ua0;dalaj0Gngzhou;bu0P;eUoa;sk;ay;es,rankfu0;rt;dmont4indhovU;a1ha01oha,u0;blRrb0Eshanbe;e0kar,masc0FugavpiJ;gu,je0;on;a7ebu,h2o0raioJuriti01;lo0nstanJpenhagNrk;gFmbo;enn3i1ristchur0;ch;ang m1c0ttagoL;ago;ai;i0lgary,pe town,rac4;ro;aHeBirminghWogoAr5u0;char3dap3enos air2r0sZ;g0sa;as;es;est;a2isba1usse0;ls;ne;silPtisla0;va;ta;i3lgrade,r0;g1l0n;in;en;ji0rut;ng;ku,n3r0sel;celo1ranquil0;la;na;g1ja lu0;ka;alo0kok;re;aBb9hmedabad,l7m4n2qa1sh0thens,uckland;dod,gabat;ba;k0twerp;ara;m5s0;terd0;am;exandr0maty;ia;idj0u dhabi;an;lbo1rh0;us;rg",Abbreviation:"true¦a0Tb0Qc0Kd0Ie0Ff0Cg0Ah08i06j04k02l00mRnOoNpIqHrFs9t6u5v2w0yb,µg;is0r,y0L;!c;a,b,e1i0ol,s,t;tro,vo;r,t;niv,safa,t;b1ce,d,e0sp;l,mp,nn,x;!l,sp;ask,e3fc,gt,i2q1r,s,t,u0;pt,rg;! ft;r,tu;c,nVp0;!t;b,d,e0;pSs,v;t,ue;a,d,enn3hd,l,p,r1s0t,vt;!a,eud;ef,o0;b,f,n;!a;ct,kla,nt,p,rd,z;e0ov;b0e;!r;a7b,d,essrs,g,i4l3m2p1rHs0t;!tr;h,s;!e;!le;!n1s0;c,ter;!n;!j,r,sc;at,b,it,lb,m,ng,t0x;!d;an6b,g,m0;!ph;an,d,r,u0;l,n;a,da,e,n0;c,f;g,on,r0wy,z;!s;a0b,en,ov;!l;e1ig,l0m,r,t,y;! oz,a;b,m;a,g,ng,s1tc,x0;!p;p,q,t;ak,e0g,ist,l,m,r;c,f,pt,t;a3ca,g,l,m2o0pl,res,t,yn;!l0mdr,nn,rp;!o;!dr;!l0pt;!if;a,c,l1r0;ig,os;!dg,vd;d4l3p2r1ss0tty,ug,ve;n,t;c,iz;prox,r,t;!ta;!j,m,v",Country:"true¦0:38;1:2L;a2Wb2Dc21d1Xe1Rf1Lg1Bh19i13j11k0Zl0Um0Gn05om3CpZqat1JrXsKtCu6v4wal3yemTz2;a24imbabwe;es,lis and futu2X;a2enezue31ietnam;nuatu,tican city;.5gTkraiZnited 3ruXs2zbeE;a,sr;arab emirat0Kkingdom,states2;! of am2X;k.,s.2; 27a.;a7haBimor-les0Bo6rinidad4u2;nis0rk2valu;ey,me2Xs and caic1T; and 2-2;toba1J;go,kel0Ynga;iw2Vji2nz2R;ki2T;aCcotl1eBi8lov7o5pa2Bri lanka,u4w2yr0;az2ed9itzerl1;il1;d2Qriname;lomon1Vmal0uth 2;afr2IkLsud2O;ak0en0;erra leoEn2;gapo1Wt maart2;en;negKrb0ychellY;int 2moa,n marino,udi arab0;hele24luc0mart1Z;epublic of ir0Com2Cuss0w2;an25;a3eHhilippinTitcairn1Ko2uerto riM;l1rtugE;ki2Bl3nama,pua new0Tra2;gu6;au,esti2;ne;aAe8i6or2;folk1Gth3w2;ay; k2ern mariana1B;or0M;caragua,ger2ue;!ia;p2ther18w zeal1;al;mib0u2;ru;a6exi5icro09o2yanm04;ldova,n2roc4zamb9;a3gol0t2;enegro,serrat;co;c9dagascZl6r4urit3yot2;te;an0i14;shall0Vtin2;ique;a3div2i,ta;es;wi,ys0;ao,ed00;a5e4i2uxembourg;b2echtenste10thu1E;er0ya;ban0Gsotho;os,tv0;azakh1De2iriba02osovo,uwait,yrgyz1D;eling0Jnya;a2erF;ma15p1B;c6nd5r3s2taly,vory coast;le of m19rael;a2el1;n,q;ia,oI;el1;aiSon2ungary;dur0Mg kong;aAermany,ha0Pibralt9re7u2;a5ern4inea2ya0O;!-biss2;au;sey;deloupe,m,tema0P;e2na0M;ce,nl1;ar;bTmb0;a6i5r2;ance,ench 2;guia0Dpoly2;nes0;ji,nl1;lklandTroeT;ast tim6cu5gypt,l salv5ngl1quatorial3ritr4st2thiop0;on0; guin2;ea;ad2;or;enmark,jibou4ominica3r con2;go;!n B;ti;aAentral african 9h7o4roat0u3yprQzech2; 8ia;ba,racao;c3lo2morPngo-brazzaville,okFsta r03te d'ivoiK;mb0;osD;i2ristmasF;le,na;republic;m2naTpe verde,yman9;bod0ero2;on;aFeChut00o8r4u2;lgar0r2;kina faso,ma,undi;azil,itish 2unei;virgin2; is2;lands;liv0nai4snia and herzegoviGtswaGuvet2; isl1;and;re;l2n7rmuF;ar2gium,ize;us;h3ngladesh,rbad2;os;am3ra2;in;as;fghaFlCmAn5r3ustr2zerbaijH;al0ia;genti2men0uba;na;dorra,g4t2;arct6igua and barbu2;da;o2uil2;la;er2;ica;b2ger0;an0;ia;ni2;st2;an",Region:"true¦0:1U;a20b1Sc1Id1Des1Cf19g13h10i0Xj0Vk0Tl0Qm0FnZoXpSqPrMsDtAut9v6w3y1zacatec22;o05u1;cat18kZ;a1est vi4isconsin,yomi14;rwick0shington1;! dc;er2i1;rgin1S;acruz,mont;ah,tar pradesh;a2e1laxca1DuscaA;nnessee,x1R;bas0Kmaulip1QsmJ;a6i4o2taf0Ou1ylh13;ffVrr00s0Y;me10no1Auth 1;cSdR;ber1Ic1naloa;hu0Sily;n2skatchew0Rxo1;ny; luis potosi,ta catari1I;a1hode7;j1ngp02;asth0Mshahi;inghai,u1;e1intana roo;bec,ensWreta0E;ara4e2rince edward1; isU;i,nnsylv1rnambu02;an14;!na;axa0Ndisha,h1klaho1Bntar1reg4x04;io;ayarit,eBo3u1;evo le1nav0L;on;r1tt0Rva scot0X;f6mandy,th1; 1ampton0;c3d2yo1;rk0;ako0Y;aroli0V;olk;bras0Xva01w1; 2foundland1;! and labrador;brunswick,hamp0jers1mexiJyork state;ey;a6i2o1;nta0Nrelos;ch3dlanBn2ss1;issippi,ouri;as geraGneso0M;igQoacQ;dhya,harasht04ine,ni3r1ssachusetts;anhao,y1;land;p1toba;ur;anca0e1incoln0ouis8;e1iH;ds;a1entucky,hul0A;ns08rnata0Dshmir;alis1iangxi;co;daho,llino2nd1owa;ia05;is;a2ert1idalEunA;ford0;mp0waii;ansu,eorgWlou5u1;an2erre1izhou,jarat;ro;ajuato,gdo1;ng;cester0;lori2uji1;an;da;sex;e4o2uran1;go;rs1;et;lawaErby0;a8ea7hi6o1umbrH;ahui4l3nnectic2rsi1ventry;ca;ut;iMorado;la;apEhuahua;ra;l8m1;bridge0peche;a5r4uck1;ingham0;shi1;re;emen,itish columb3;h2ja cal1sque,var2;iforn1;ia;guascalientes,l4r1;izo2kans1;as;na;a2ber1;ta;ba2s1;ka;ma",FemaleName:"true¦0:FY;1:G2;2:FR;3:FD;4:FC;5:EP;6:ER;7:FS;8:GF;9:EZ;A:GB;B:E5;C:FO;D:FL;E:G8;F:EG;aE2bD4cB8dAIe9Gf91g8Hh83i7Sj6Uk60l4Om38n2To2Qp2Fqu2Er1Os0Qt04ursu6vUwOyLzG;aJeHoG;e,la,ra;lGna;da,ma;da,ra;as7EeHol1TvG;et5onB9;le0sen3;an9endBNhiB4iG;lInG;if3AniGo0;e,f39;a,helmi0lGma;a,ow;aMeJiG;cHviG;an9XenG1;kCZtor3;da,l8Vnus,rG;a,nGoniD2;a,iDC;leGnesEC;nDLrG;i1y;aSePhNiMoJrGu6y4;acG3iGu0E;c3na,sG;h9Mta;nHrG;a,i;i9Jya;a5IffaCGna,s7;al3eGomasi0;a,l8Go6Xres1;g7Uo6WrHssG;!a,ie;eFi,ri8;bNliMmKnIrHs7tGwa0;ia0um;a,yn;iGya;a,ka,s7;a4e4iGmCAra;!ka;a,t7;at7it7;a05carlet2Ye04hUiSkye,oQtMuHyG;bFJlvi1;e,sHzG;an2Tet5ie,y;anGi8;!a,e,nG;aDe;aIeG;fGl3DphG;an2;cF8r6;f3nGphi1;d4ia,ja,ya;er4lv3mon1nGobh75;dy;aKeGirlBLo0y6;ba,e0i6lIrG;iGrBPyl;!d70;ia,lBV;ki4nIrHu0w0yG;la,na;i,leAon,ron;a,da,ia,nGon;a,on;l5Yre0;bMdLi9lKmIndHrGs7vannaD;aDi0;ra,y;aGi4;nt7ra;lBNome;e,ie;in1ri0;a02eXhViToHuG;by,thBK;bQcPlOnNsHwe0xG;an94ie,y;aHeGie,lE;ann8ll1marBFtB;!lGnn1;iGyn;e,nG;a,d7W;da,i,na;an9;hel53io;bin,erByn;a,cGkki,na,ta;helBZki;ea,iannDXoG;da,n12;an0bIgi0i0nGta,y0;aGee;!e,ta;a,eG;cARkaD;chGe,i0mo0n5EquCDvCy0;aCCelGi9;!e,le;een2ia0;aMeLhJoIrG;iGudenAW;scil1Uyamva9;lly,rt3;ilome0oebe,ylG;is,lis;arl,ggy,nelope,r6t4;ige,m0Fn4Oo6rvaBBtHulG;a,et5in1;ricGsy,tA8;a,e,ia;ctav3deHfAWlGphAW;a,ga,iv3;l3t5;aQePiJoGy6;eHrG;aDeCma;ll1mi;aKcIkGla,na,s7ta;iGki;!ta;hoB2k8BolG;a,eBH;!mh;l7Tna,risF;dIi5PnHo23taG;li1s7;cy,et5;eAiCO;a01ckenz2eViLoIrignayani,uriBGyG;a,rG;a,na,tAS;i4ll9XnG;a,iG;ca,ka,qB4;a,chOkaNlJmi,nIrGtzi;aGiam;!n9;a,dy,erva,h,n2;a,dIi9JlG;iGy;cent,e;red;!e6;ae6el3G;ag4KgKi,lHrG;edi61isFyl;an2iGliF;nGsAM;a,da;!an,han;b08c9Ed06e,g04i03l01nZrKtJuHv6Sx87yGz2;a,bell,ra;de,rG;a,eC;h75il9t2;a,cSgOiJjor2l6In2s7tIyG;!aGbe5QjaAlou;m,n9S;a,ha,i0;!aIbALeHja,lEna,sGt53;!a,ol,sa;!l06;!h,m,nG;!a,e,n1;arIeHie,oGr3Kueri5;!t;!ry;et3IiB;elGi61y;a,l1;dGon,ue6;akranBy;iGlo36;a,ka,n9;a,re,s2;daGg2;!l2W;alEd2elGge,isBGon0;eiAin1yn;el,le;a0Ie08iWoQuKyG;d3la,nG;!a,dHe9SnGsAQ;!a,e9R;a,sAO;aB1cJelIiFlHna,pGz;e,iB;a,u;a,la;iGy;a2Ae,l25n9;is,l1GrHtt2uG;el6is1;aIeHi8na,rG;a6Zi8;lei,n1tB;!in1;aQbPd3lLnIsHv3zG;!a,be4Ket5z2;a,et5;a,dG;a,sGy;ay,ey,i,y;a,iaIlG;iGy;a8Ge;!n4F;b7Terty;!n5R;aNda,e0iLla,nKoIslARtGx2;iGt2;c3t3;la,nGra;a,ie,o4;a,or1;a,gh,laG;!ni;!h,nG;a,d4e,n4N;cNdon7Si6kes7na,rMtKurIvHxGy6;mi;ern1in3;a,eGie,yn;l,n;as7is7oG;nya,ya;a,isF;ey,ie,y;aZeUhadija,iMoLrIyG;lGra;a,ee,ie;istGy5B;a,en,iGy;!e,n48;ri,urtn9A;aMerLl99mIrGzzy;a,stG;en,in;!berlG;eGi,y;e,y;a,stC;!na,ra;el6PiJlInHrG;a,i,ri;d4na;ey,i,l9Qs2y;ra,s7;c8Wi5XlOma6nyakumari,rMss5LtJviByG;!e,lG;a,eG;e,i78;a5EeHhGi3PlEri0y;ar5Cer5Cie,leCr9Fy;!lyn73;a,en,iGl4Uyn;!ma,n31sF;ei72i,l2;a04eVilToMuG;anKdJliGst56;aHeGsF;!nAt0W;!n8X;i2Ry;a,iB;!anLcelEd5Vel71han6IlJni,sHva0yG;a,ce;eGie;fi0lEph4X;eGie;en,n1;!a,e,n36;!i10lG;!i0Z;anLle0nIrHsG;i5Qsi5Q;i,ri;!a,el6Pif1RnG;a,et5iGy;!e,f1P;a,e72iHnG;a,e71iG;e,n1;cLd1mi,nHqueliAsmin2Uvie4yAzG;min8;a8eHiG;ce,e,n1s;!lGsFt06;e,le;inHk2lEquelG;in1yn;da,ta;lPmNnMo0rLsHvaG;!na;aHiGob6U;do4;!belGdo4;!a,e,l2G;en1i0ma;a,di4es,gr5R;el9ogG;en1;a,eAia0o0se;aNeKilHoGyacin1N;ll2rten1H;aHdGlaH;a,egard;ry;ath0WiHlGnrietBrmiAst0W;en24ga;di;il75lKnJrGtt2yl75z6D;iGmo4Fri4G;etG;!te;aDnaD;ey,l2;aYeTiOlMold12rIwG;enGyne18;!dolE;acHetGisel9;a,chC;e,ieG;!la;adys,enGor3yn1Y;a,da,na;aJgi,lHna,ov71selG;a,e,le;da,liG;an;!n0;mYnIorgHrG;ald35i,m2Stru73;et5i5T;a,eGna;s1Nvieve;briel3Fil,le,rnet,yle;aReOio0loMrG;anHe9iG;da,e9;!cG;esHiGoi0G;n1s3V;!ca;!rG;a,en43;lHrnG;!an9;ec3ic3;rHtiGy8;ma;ah,rah;d0FileCkBl00mUn4ArRsMtLuKvG;aIelHiG;e,ta;in0Ayn;!ngel2H;geni1la,ni3R;h52ta;meral9peranJtG;eHhGrel6;er;l2Pr;za;iGma,nest29yn;cGka,n;a,ka;eJilImG;aGie,y;!liA;ee,i1y;lGrald;da,y;aTeRiMlLma,no4oJsIvG;a,iG;na,ra;a,ie;iGuiG;se;a,en,ie,y;a0c3da,nJsGzaH;aGe;!beG;th;!a,or;anor,nG;!a;in1na;en,iGna,wi0;e,th;aWeKiJoGul2U;lor51miniq3Yn30rGtt2;a,eCis,la,othGthy;ea,y;an09naDonAx2;anPbOde,eNiLja,lImetr3nGsir4U;a,iG;ce,se;a,iHla,orGphiA;es,is;a,l5J;dGrdG;re;!d4Mna;!b2CoraDra;a,d4nG;!a,e;hl3i0mMnKphn1rHvi1WyG;le,na;a,by,cHia,lG;a,en1;ey,ie;a,et5iG;!ca,el1Aka;arGia;is;a0Qe0Mh04i02lUoJrHynG;di,th3;istGy04;al,i0;lOnLrHurG;tn1D;aId28iGn28riA;!nG;a,e,n1;!l1S;n2sG;tanGuelo;ce,za;eGleC;en,t5;aIeoHotG;il4B;!pat4;ir8rIudG;et5iG;a,ne;a,e,iG;ce,sX;a4er4ndG;i,y;aPeMloe,rG;isHyG;stal;sy,tG;aHen,iGy;!an1e,n1;!l;lseHrG;!i8yl;a,y;nLrG;isJlHmG;aiA;a,eGot5;n1t5;!sa;d4el1PtG;al,el1O;cHlG;es5i3F;el3ilG;e,ia,y;iYlXmilWndVrNsLtGy6;aJeIhGri0;erGleCrEy;in1;ri0;li0ri0;a2GsG;a2Fie;a,iMlKmeIolHrG;ie,ol;!e,in1yn;lGn;!a,la;a,eGie,y;ne,y;na,sF;a0Di0D;a,e,l1;isBl2;tlG;in,yn;arb0CeYianXlVoTrG;andRePiIoHyG;an0nn;nwEok8;an2NdgKg0ItG;n27tG;!aHnG;ey,i,y;ny;etG;!t8;an0e,nG;da,na;i8y;bbi8nG;iBn2;ancGossom,ythe;a,he;ca;aRcky,lin9niBrNssMtIulaDvG;!erlG;ey,y;hHsy,tG;e,i0Zy8;!anG;ie,y;!ie;nGt7yl;adHiG;ce;et5iA;!triG;ce,z;a4ie,ra;aliy29b24d1Lg1Hi19l0Sm0Nn01rWsNthe0uJvIyG;anGes7;a,na;a,r25;drIgusHrG;el3;ti0;a,ey,i,y;hHtrG;id;aKlGt1P;eHi8yG;!n;e,iGy;gh;!nG;ti;iIleHpiB;ta;en,n1t5;an19elG;le;aYdWeUgQiOja,nHtoGya;inet5n3;!aJeHiGmI;e,ka;!mGt5;ar2;!belHliFmT;sa;!le;ka,sGta;a,sa;elGie;a,iG;a,ca,n1qG;ue;!t5;te;je6rea;la;!bHmGstas3;ar3;el;aIberHel3iGy;e,na;!ly;l3n9;da;aTba,eNiKlIma,yG;a,c3sG;a,on,sa;iGys0J;e,s0I;a,cHna,sGza;a,ha,on,sa;e,ia;c3is7jaIna,ssaIxG;aGia;!nd4;nd4;ra;ia;i0nHyG;ah,na;a,is,naD;c7da,leCmLnslKsG;haDlG;inGyW;g,n;!h;ey;ee;en;at7g2nG;es;ie;ha;aVdiSelLrG;eIiG;anLenG;a,e,ne;an0;na;aKeJiHyG;nn;a,n1;a,e;!ne;!iG;de;e,lEsG;on;yn;!lG;iAyn;ne;agaJbHiG;!gaI;ey,i8y;!e;il;ah",Place:"true¦a07b05cZdYeXfVgRhQiOjfk,kMlKmHneEoDp9que,rd,s8t5u4v3w0yyz;is1y0;!o;!c;a,t;pYsafa,t;e1he 0;bronx,hamptons;nn,x;ask,fo,oho,t,under6yd;a2e1h0;l,x;k,nnK;!cifX;kla,nt;b1w eng0;land;!r;a1co,i0t,uc;dKnn;libu,nhattS;a0gw,hr;s,x;an0ul;!s;a0cn,da,ndianMst;!x;arlem,kg,nd,wy;a2re0;at 0enwich;britain,lak6;!y village;co,l0ra;!a;urope,verglad2;ak,en,fw,ist,own4xb;al4dg,gk,hina3l2o1r0t;es;lo,nn;!t;town;!if;cn,e0kk,lvd,rooklyn;l air,verly hills;frica,lta,m5ntarct2r1sia,tl0ve;!ant1;ct0iz;ic0; oce0;an;ericas,s",WeekDay:"true¦fri2mon2s1t0wednesd3;hurs1ues1;aturd1und1;!d0;ay0;!s",Month:"true¦aBdec9feb7j2mar,nov9oct1sep0;!t8;!o8;an3u0;l1n0;!e;!y;!u1;!ru0;ary;!em0;ber;pr1ug0;!ust;!il",Date:"true¦t0weekend,yesterd2;mr2o0;d0morrow;ay;!w",FirstName:"true¦aEblair,cCdevBj8k6lashawn,m3nelly,quinn,re2sh0;ay,e0iloh;a,lby;g1ne;ar1el,org0;an;ion,lo;as8e0r9;ls7nyatta,rry;am0ess1ude;ie,m0;ie;an,on;as0heyenne;ey,sidy;lex1ndra,ubr0;ey;is",LastName:"true¦0:34;1:39;2:3B;3:2Y;4:2E;5:30;a3Bb31c2Od2Ee2Bf25g1Zh1Pi1Kj1Ek17l0Zm0Nn0Jo0Gp05rYsMtHvFwCxBy8zh6;a6ou,u;ng,o;a6eun2Uoshi1Kun;ma6ng;da,guc1Zmo27sh21zaR;iao,u;a7eb0il6o3right,u;li3Bs1;gn0lk0ng,tanabe;a6ivaldi;ssilj37zqu2;a9h8i2Go7r6sui,urn0;an,ynisJ;lst0Prr1Uth;at1Uomps1;kah0Vnaka,ylor;aEchDeChimizu,iBmiAo9t7u6zabo;ar2lliv2AzuE;a6ein0;l23rm0;sa,u3;rn4th;lva,mmo24ngh;mjon4rrano;midt,neid0ulz;ito,n7sa6to;ki;ch2dLtos,z;amBeag1Zi9o7u6;bio,iz,sD;b6dri1MgIj0Tme24osevelt,ssi,ux;erts,ins1;c6ve0F;ci,hards1;ir2os;aEeAh8ic6ow20;as6hl0;so;a6illips;m,n1T;ders5et8r7t6;e0Nr4;ez,ry;ers;h21rk0t6vl4;el,te0J;baBg0Blivei01r6;t6w1O;ega,iz;a6eils1guy5ix1owak,ym1E;gy,ka6var1K;ji6muW;ma;aEeCiBo8u6;ll0n6rr0Bssolini,ñ6;oz;lina,oKr6zart;al0Me6r0U;au,no;hhail4ll0;rci0ssi6y0;!er;eWmmad4r6tsu07;in6tin2;!o;aCe8i6op2uo;!n6u;coln,dholm;fe7n0Qr6w0J;oy;bv6v6;re;mmy,rs5u;aBennedy,imuAle0Lo8u7wo6;k,n;mar,znets4;bay6vacs;asY;ra;hn,rl9to,ur,zl4;aAen9ha3imen2o6u3;h6nYu3;an6ns1;ss1;ki0Es5;cks1nsse0D;glesi9ke8noue,shik7to,vano6;u,v;awa;da;as;aBe8itchcock,o7u6;!a3b0ghNynh;a3ffmann,rvat;mingw7nde6rN;rs1;ay;ns5rrQs7y6;asDes;an4hi6;moJ;a9il,o8r7u6;o,tierr2;ayli3ub0;m2nzal2;nd6o,rcia;hi;erAis9lor8o7uj6;ita;st0urni0;es;ch0;nand2;d7insteHsposi6vaL;to;is1wards;aCeBi9omin8u6;bo6rand;is;gu2;az,mitr4;ov;lgado,vi;nkula,rw7vi6;es,s;in;aFhBlarkAo6;h5l6op0rbyn,x;em7li6;ns;an;!e;an8e7iu,o6ristens5u3we;i,ng,u3w,y;!n,on6u3;!g;mpb7rt0st6;ro;ell;aBe8ha3lanco,oyko,r6yrne;ooks,yant;ng;ck7ethov5nnett;en;er,ham;ch,h8iley,rn6;es,i0;er;k,ng;dDl9nd6;ers6rA;en,on,s1;on;eks7iy8var2;ez;ej6;ev;ams",MaleName:"true¦0:CE;1:BL;2:C2;3:BT;4:B5;5:9V;6:BZ;7:AT;8:BD;9:AX;A:AO;aB4bA8c97d87e7Gf6Yg6Gh5Wi5Ij4Lk4Bl3Rm2Pn2Eo28p22qu20r1As0Qt06u05v00wNxavi3yGzB;aBor0;cBh8Ine;hCkB;!aB1;ar51eB0;ass2i,oCuB;sDu25;nEsDusB;oBsC;uf;ef;at0g;aJeHiCoByaAP;lfgang,odrow;lBn1O;bDey,frBJlB;aA5iB;am,e,s;e89ur;i,nde5sB;!l7t1;de,lCrr6yB;l1ne;lBt3;a93y;aEern1iB;cCha0nceBrg9Bva0;!nt;ente,t5A;lentin49n8Yughn;lyss4Msm0;aTeOhKiIoErCyB;!l3ro8s1;av9QeBist0oy,um0;nt9Iv54y;bDd7XmBny;!as,mBoharu;aAYie,y;i83y;mBt9;!my,othy;adDeoCia7DomB;!as;!do7M;!de9;dErB;en8HrB;an8GeBy;ll,n8F;!dy;dgh,ic9Tnn3req,ts45;aRcotPeNhJiHoFpenc3tBur1Oylve8Hzym1;anDeBua7B;f0phAFvBwa7A;e57ie;!islaw,l7;lom1nA3uB;leyma8ta;dBl7Jm1;!n7;aDeB;lBrm0;d1t1;h6Sne,qu0Uun,wn,y8;aBbasti0k1Xl41rg40th,ymo9I;m9n;!tB;!ie,y;lCmBnti21q4Iul;!mAu4;ik,vato6V;aWeShe92iOoFuCyB;an,ou;b6LdCf9pe6QssB;!elAI;ol2Uy;an,bIcHdGel,geFh0landA9mEnDry,sCyB;!ce;coe,s;!a95nA;an,eo;l3Jr;e4Qg3n7olfo,ri68;co,ky;bAe9U;cBl7;ar5Oc5NhCkBo;!ey,ie,y;a85ie;gCid,ub6x,yBza;ansh,nS;g8WiB;na8Ss;ch5Yfa4lDmCndBpha4sh6Uul,ymo70;al9Yol2By;i9Ion;f,ph;ent2inB;cy,t1;aFeDhilCier62ol,reB;st1;!ip,lip;d9Brcy,tB;ar,e2V;b3Sdra6Ft44ul;ctav2Vliv3m96rFsCtBum8Uw6;is,to;aCc8SvB;al52;ma;i,l49vJ;athJeHiDoB;aBel,l0ma0r2X;h,m;cCg4i3IkB;h6Uola;hol5XkBol5X;!ol5W;al,d,il,ls1vB;il50;anBy;!a4i4;aWeTiKoFuCyB;l21r1;hamCr5ZstaB;fa,p4G;ed,mF;dibo,e,hamDis1XntCsBussa;es,he;e,y;ad,ed,mB;ad,ed;cGgu4kElDnCtchB;!e5;a78ik;house,o03t1;e,olB;aj;ah,hBk7;a4eB;al,l;hClv2rB;le,ri5v2;di,met;ck,hNlLmOnu4rHs1tDuricCxB;!imilian8Cwe5;e,io;eo,hCi52tB;!eo,hew,ia;eBis;us,w;cDio,k86lCqu6Gsha5tBv2;i2Hy;in,on;!el,oKus;achBcolm,ik;ai,y;amBdi,moud;adB;ou;aReNiMlo2RoIuCyB;le,nd1;cEiDkBth3;aBe;!s;gi,s;as,iaB;no;g0nn6RrenDuBwe5;!iB;e,s;!zo;am,on4;a7Bevi,la4SnDoBst3vi;!nB;!a60el;!ny;mCnBr67ur4Twr4T;ce,d1;ar,o4N;aIeDhaled,iBrist4Vu48y3B;er0p,rB;by,k,ollos;en0iEnBrmit,v2;!dCnBt5C;e0Yy;a5ri4N;r,th;na68rBthem;im,l;aYeQiOoDuB;an,liBst2;an,o,us;aqu2eJhnInGrEsB;eChBi7Bue;!ua;!ph;dBge;an,i,on;!aBny;h,s,th4X;!ath4Wie,nA;!l,sBy;ph;an,e,mB;!mA;d,ffGrDsB;sBus;!e;a5JemCmai8oBry;me,ni0O;i6Uy;!e58rB;ey,y;cHd6kGmFrDsCvi3yB;!d6s1;on,p3;ed,od,rBv4M;e4Zod;al,es,is1;e,ob,ub;k,ob,quB;es;aNbrahMchika,gKkeJlija,nuIrGsDtBv0;ai,sB;uki;aBha0i6Fma4sac;ac,iaB;h,s;a,vinBw2;!g;k,nngu52;!r;nacBor;io;im;in,n;aJeFina4VoDuByd56;be25gBmber4CsD;h,o;m3ra33sBwa3X;se2;aDctCitCn4ErB;be20m0;or;th;bKlJmza,nIo,rDsCyB;a43d6;an,s0;lEo4FrDuBv7;hi40ki,tB;a,o;is1y;an,ey;k,s;!im;ib;aQeMiLlenKoIrEuB;illerCsB;!tavo;mo;aDegBov3;!g,orB;io,y;dy,h57nt;nzaBrd1;lo;!n;lbe4Qno,ovan4R;ne,oDrB;aBry;ld,rd4U;ffr7rge;bri4l6rBv2;la1Zr3Eth,y;aReNiLlJorr0IrB;anDedBitz;!dAeBri24;ri23;cDkB;!ie,lB;in,yn;esJisB;!co,zek;etch3oB;yd;d4lBonn;ip;deriDliCng,rnB;an01;pe,x;co;bi0di;arZdUfrTit0lNmGnFo2rCsteb0th0uge8vBym6zra;an,ere2V;gi,iCnBrol,v2w2;est45ie;c07k;och,rique,zo;aGerFiCmB;aFe2P;lCrB;!h0;!io;s1y;nu4;be09d1iEliDmCt1viBwood;n,s;er,o;ot1Ts;!as,j43sB;ha;a2en;!dAg32mEuCwB;a25in;arB;do;o0Su0S;l,nB;est;aYeOiLoErDuCwByl0;ay8ight;a8dl7nc0st2;ag0ew;minFnDri0ugCyB;le;!l03;!a29nBov0;e5ie,y;go,icB;!k;armuCeBll1on,rk;go;id;anIj0lbeHmetri9nFon,rEsDvCwBxt3;ay8ey;en,in;hawn,mo08;ek,ri0F;is,nBv3;is,y;rt;!dB;re;lKmInHrDvB;e,iB;!d;en,iDne5rByl;eBin,yl;l2Vn;n,o,us;!e,i4ny;iBon;an,en,on;e,lB;as;a06e04hWiar0lLoGrEuCyrB;il,us;rtB;!is;aBistobal;ig;dy,lEnCrB;ey,neli9y;or,rB;ad;by,e,in,l2t1;aGeDiByI;fBnt;fo0Ct1;meCt9velaB;nd;nt;rDuCyB;!t1;de;enB;ce;aFeErisCuB;ck;!tB;i0oph3;st3;d,rlBs;eBie;s,y;cBdric,s11;il;lEmer1rB;ey,lCro5y;ll;!os,t1;eb,v2;ar02eUilTlaSoPrCuByr1;ddy,rtI;aJeEiDuCyB;an,ce,on;ce,no;an,ce;nCtB;!t;dCtB;!on;an,on;dCndB;en,on;!foBl7y;rd;bCrByd;is;!by;i8ke;al,lA;nFrBshoi;at,nCtB;!r10;aBie;rd0S;!edict,iCjam2nA;ie,y;to;n7rBt;eBy;tt;ey;ar0Xb0Nd0Jgust2hm0Gid6ja0ElZmXnPputsiOrFsaEuCveBya0ziz;ry;gust9st2;us;hi;aIchHi4jun,maFnDon,tBy0;hBu06;ur;av,oB;ld;an,nd0A;el;ie;ta;aq;dGgel05tB;hoEoB;i8nB;!i02y;ne;ny;reBy;!as,s,w;ir,mBos;ar;an,beOd6eIfFi,lEonDphonHt1vB;aMin;on;so,zo;an,en;onCrB;edP;so;c,jaEksandDssaExB;!and3;er;ar,er;ndB;ro;rtH;ni;en;ad,eB;d,t;in;aColfBri0vik;!o;mBn;!a;dFeEraCuB;!bakr,lfazl;hBm;am;!l;allEel,oulaye,ulB;!lCrahm0;an;ah,o;ah;av,on",Person:"true¦ashton kutchSbRcMdKeIgastNhGinez,jEkDleCmBnettJoAp8r4s3t2v0;a0irgin maG;lentino rossi,n go3;heresa may,iger woods,yra banks;addam hussain,carlett johanssJlobodan milosevic,uB;ay romano,eese witherspoIo1ush limbau0;gh;d stewart,nald0;inho,o;a0ipJ;lmIris hiltD;prah winfrFra;essiaen,itt romnEubarek;bron james,e;anye west,iefer sutherland,obe bryant;aime,effers8k rowli0;ng;alle ber0itlBulk hogan;ry;ff0meril lagasse,zekiel;ie;a0enzel washingt2ick wolf;lt1nte;ar1lint0ruz;on;dinal wols1son0;! palm2;ey;arack obama,rock;er",Verb:"true¦awak9born,cannot,fr8g7h5k3le2m1s0wors9;e8h3;ake sure,sg;ngth6ss6;eep tabs,n0;own;as0e2;!t2;iv1onna;ight0;en",PhrasalVerb:"true¦0:72;1:6Q;2:7E;3:74;4:6J;5:7H;6:76;7:6P;8:6C;9:6D;A:5I;B:71;C:70;a7Hb63c5Dd5Ae58f46g3Oh38iron0j34k2Zl2Km2Bn29o27p1Pr1Es09tQuOvacuum 1wGyammerCzD;eroAip EonD;e0k0;by,up;aJeGhFiEorDrit53;d 1k2R;mp0n4Ape0r8s8;eel Bip 7L;aEiD;gh 06rd0;n Br 3D;it 5Kk8lk6rm 0Qsh 74t67v4P;rgeCsD;e 9herA;aRePhNiJoHrFuDype 0N;ckArn D;d2in,o3Gup;ade YiDot0y 28;ckle68p 7A;ne67p Ds4D;d2o6Lup;ck FdEe Dgh5Tme0p o0Dre0;aw3ba4d2in,up;e5Ky 1;by,o6V;ink Drow 5V;ba4ov7up;aDe 4Ill4O;m 1r W;ckCke Elk D;ov7u4O;aDba4d2in,o31up;ba4ft7p4Tw3;a0Gc0Fe09h05i02lYmXnWoVpSquare RtJuHwD;earFiD;ngEtch D;aw3ba4o6P; by;ck Dit 1m 1ss0;in,up;aIe0RiHoFrD;aigh1MiD;ke 5Yn2Y;p Drm1P;by,in,o6B;n2Zr 1tc3I;c2Ymp0nd Dr6Hve6y 1;ba4d2up;d2o67up;ar2Vell0ill4UlErDurC;ingCuc8;a33it 3U;be4Crt0;ap 4Eow B;ash 4Zoke0;eep EiDow 9;c3Np 1;in,oD;ff,v7;gn Eng2Zt Dz8;d2o5up;in,o5up;aFoDu4F;ot Dut0w 5X;aw3ba4f37o5R;c2FdeAk4Sve6;e Hll0nd GtD; Dtl43;d2in,o5upD;!on;aw3ba4d2in,o1Yup;o5to;al4Lout0rap4L;il6v8;at0eKiJoGuD;b 4Ele0n Dstl8;aDba4d2in53o3Gt30u3E;c1Xw3;ot EuD;g2Knd6;a1Xf2Ro5;ng 4Op6;aDel6inAnt0;c4Yd D;o2Tu0C;aQePiOlMoKrHsyc2AuD;ll Ft D;aDba4d2in,o1Ht34up;p39w3;ap38d2in,o5t32up;attleCess EiGoD;p 1;ah1Hon;iDp 53re3Mur45wer 53;nt0;ay3ZuD;gAmp 9;ck 53g0leCn 9p3W;el 47ncilA;c3Pir 2In0ss FtEy D;ba4o4R; d2c1Y;aw3ba4o12;pDw3K;e3Jt B;arrow3Terd0oD;d6te3S;aJeHiGoEuD;ddl8ll37;c17p 1uth6ve D;al3Bd2in,o5up;ss0x 1;asur8lt 9ss D;a1Aup;ke Dn 9r30s1Lx0;do,o3Yup;aPeNiIoDuck0;a17c37g GoDse0;k Dse35;aft7ba4d2forw2Bin3Wov7uD;nd7p;in,o0J;e GghtFnEsDv1T;ten 4D;e 1k 1; 1e2Y;ar43d2;av1Ht 2YvelD; o3L;p 1sh DtchCugh6y1U;in3Lo5;eEick6nock D;d2o3H;eDyA;l2Hp D;aw3ba4d2fSin,o05to,up;aFoEuD;ic8mpA;ke2St2W;c31zz 1;aPeKiHoEuD;nker2Ts0U;lDneArse2O;d De 1;ba4d2fast,oZup;de Et D;ba4on,up;aw3o5;aDlp0;d Fl22r Dt 1;fDof;rom;in,oRu1A;cZm 1nDve it,ze1Y;d Dg 27kerF;d2in,o5;aReLive Jloss1VoFrEunD; f0M;in39ow 23; Dof 0U;aEb17it,oDr35t0Ou12;ff,n,v7;bo5ft7hJw3;aw3ba4d2in,oDup,w3;ff,n,ut;a17ek0t D;aEb11d2oDr2Zup;ff,n,ut,v7;cEhDl1Pr2Xt,w3;ead;ross;d aEnD;g 1;bo5;a08e01iRlNoJrFuD;cDel 1;k 1;eEighten DownCy 1;aw3o2L;eDshe1G; 1z8;lFol D;aDwi19;bo5r2I;d 9;aEeDip0;sh0;g 9ke0mDrD;e 2K;gLlJnHrFsEzzD;le0;h 2H;e Dm 1;aw3ba4up;d0isD;h 1;e Dl 11;aw3fI;ht ba4ure0;eInEsD;s 1;cFd D;fDo1X;or;e B;dQl 1;cHll Drm0t0O;apYbFd2in,oEtD;hrough;ff,ut,v7;a4ehi1S;e E;at0dge0nd Dy8;o1Mup;o09rD;ess 9op D;aw3bNin,o15;aShPlean 9oDross But 0T;me FoEuntD; o1M;k 1l6;aJbIforGin,oFtEuD;nd7;ogeth7;ut,v7;th,wD;ard;a4y;pDr19w3;art;eDipA;ck BeD;r 1;lJncel0rGsFtch EveA; in;o16up;h Bt6;ry EvD;e V;aw3o12;l Dm02;aDba4d2o10up;r0Vw3;a0He08l01oSrHuD;bbleFcklTilZlEndlTrn 05tDy 10zz6;t B;k 9; ov7;anMeaKiDush6;ghHng D;aEba4d2forDin,o5up;th;bo5lDr0Lw3;ong;teD;n 1;k D;d2in,o5up;ch0;arKgJil 9n8oGssFttlEunce Dx B;aw3ba4;e 9; ar0B;k Bt 1;e 1;d2up; d2;d 1;aIeed0oDurt0;cFw D;aw3ba4d2o5up;ck;k D;in,oK;ck0nk0st6; oJaGef 1nd D;d2ov7up;er;up;r0t D;d2in,oDup;ff,ut;ff,nD;to;ck Jil0nFrgEsD;h B;ainCe B;g BkC; on;in,o5; o5;aw3d2o5up;ay;cMdIsk Fuction6; oD;ff;arDo5;ouD;nd;d D;d2oDup;ff,n;own;t D;o5up;ut",Modal:"true¦c5lets,m4ought3sh1w0;ill,o5;a0o4;ll,nt;! to;ay,ight,ust;an,o0;uld",Adjective:"true¦0:73;1:7I;2:7O;3:7H;4:7A;5:5B;6:4R;7:49;8:48;9:60;A:7F;a6Eb60c5Md52e4Pf45g3Xh3Mi31j2Zk2Yl2Nm2Cn23o1Np16quack,r0Ws0Ct05uMvJwByear5;arp0eFholeEiDoB;man5oBu67;d69zy;despr6Zs5B;!sa7;eClBste22;co1El o4H;!k5;aCiBola47;b7Nce versa,ol50;ca2gabo5Ynilla;ltSnFpCrb55su4tterB;!mo6U; f30b1KpCsBti1D;ca7et,ide dItairs;er,i3J;aLbeco6Lconvin23deIeHfair,ivers4knGprecedUrEsCwB;iel1Writt5U;i1RuB;pervis0specti3;eBu5;cognHgul6Bl6B;own;ndi3v5Oxpect0;cid0rB;!grou5JsB;iz0tood;b7ppeaHssu6AuthorB;iz0;i20ra;aFeDhough4KoCrB;i1oubl0;geth6p,rp6B;en5LlBm4Vrr2Q;li3;boo,lBn;ent0;aTcSeQhPiNmug,nobbi3AoLpKqueami3AtFuBymb5Y;bDi gener50pBrprisi3;erBre0H;! dup6b,i25;du0seq4P;anda6OeEi0LrBy34;aightBip0; fBfB;or56;adfa5Wreotyp0;a4Uec2Cir1Flend5Wot on; call0le,mb6phist1TrBu0Tvi3X;d5Ury;gnifica2nB;ce4Qg7;am2Le6ocki3ut;cBda1em5lfi2Uni1Spa63re8;o1Cr3R;at53ient24reec53;cr0me,ns serif;aIeEiCoB;bu5Ktt4PuOy4;ghtBv4;!-25f9;ar,bel,condi1du5Xfres4XlDpublic3RsBtard0;is43oB;lu1na2;e1Auc41;b5EciB;al,st;aMeKicayu8lac5Copuli5BrCuB;bl54mp0;eFiCoB;!b06fu5Cmi2Xp6;mCor,sBva1;ti8;a4Re;ci58mB;a0EiB;er,um;ac1WrBti1;feAma2Pplexi3v2Z;rBst;allelDtB;-tiBi4;me;!ed;bMffKkJld fashion0nIpHrg1Dth6utGvB;al,erB;!aDniCt,wB;eiBrouB;ght;ll;do0Rer,g2Hsi41;en,posi1; boa5Ag2Fli8;!ay; gua58bBli8;eat;eDsB;cBer0Dole1;e8u3F;d2Ose;ak0eIiHoBua4J;nFrCtB;ab7;thB;!eB;rn;chala2descri4Ustop;ght5;arby,cessa3Sighbor5xt;aJeHiEoBultip7;bi7derClBnth5ot,st;dy;a1n;nBx0;iaBor;tu2Y;di49naBre;ci3;cBgenta,in,jZkeshift,le,mmoth,ny,sculi8;ab2Uho;aKeFiCoBu0Z;uti0Yvi3;mCteraB;l,te;it0;ftEgBth4;al,eCitiB;ma1;nda38;!-08;ngu3Lst,tt6;ap1Oind5no06;agg0uB;niKstifi0veni7;de4gno46lleg4mOnDpso 1RrB;a1releB;va2; JaIbr0corHdFfluenPiPnEsDtB;aAen3GoxB;ic31;a8i2N;a1er,oce2;iCoB;or;reA;deq3Eppr2T;fBsitu,vitro;ro2;mFpB;arDerfeAoBrop6;li1rtB;a2ed;ti4;eBi0M;d2Ln30;aGelFiDoBumdr36;ne2Uok0rrBs03ur5;if2N;ghfalut1KspB;an2L;liVpf9;lEnDrB;d01roB;wi3;dy,gi3;f,low0;ainf9ener2Eiga1YlHoGraDuB;ilBng ho;ty;cCtB;ef9is;ef9;ne,od;ea28ob4;aQeKinJlIoDrB;a1PeBoz1G;e28q0Ytf9;oDrB; keeps,eBm6tuna1;g00ign;liB;sh;ag2Uue2;al,i1;dFmCrB;ti7;a7ini8;ne;le; up;bl0i2l20r Cux,voB;ri1uri1;oBreac1A;ff;aJfficie2lImiHnFreAthere4veExB;aAcess,pe1JtraCuB;be2Gl0D;!va19;n,ryday; Bcouragi3ti0M;rou1sui1;ne2;abo1YdMe14i1;g6sB;t,ygB;oi3;er;aReJiDoBrea11ue;mina2ne,ubB;le,tf9;dact16fficu1JsCvB;er1F;creDeas0gruntl0hone1AordCtB;a2ress0;er5;et; HadpGfFgene1KliDrang0spe1KtCvoB;ut;ail0ermin0;be1Hca1ghB;tf9;ia2;an;facto;i5magBngeroVs0E;ed,i3;ly;ertaNhief,ivil,oDrB;aBowd0u0D;mp0vYz0;loJmHnCoi3rrBve0K;eAu1D;cre1grEsDtB;emBra0B;po09;ta2;ue2;mer04pleB;te,x;ni4ss4;in;aLeHizarGlFoCrB;and new,isk,okL;gCna fiSttom,urgeoB;is;us;ank,iE;re;autif9hiClov0nBst,yoC;eRt;nd;ul;ckCnkru0SrrB;en;!wards; priori,b0Ic0Fd05fra04g00hZlUma01ntiquTppQrKsIttracti02utheHvEwB;aCkB;wa0P;ke,re;ant garCerB;age;de;ntQ;leep,tonisB;hi3;ab,bitEroDtiB;fiB;ci4;ga2;raB;ry;are2etiLrB;oprB;ia1;at0;arEcohCeBiIl,oof;rt;olB;ic;mi3;ead;ainDgressiConiB;zi3;ve;st;id; IeGuFvB;aCerB;se;nc0;ed;lt;pt,qB;ua1;hoc,infinitB;um;cuCtu4u1;al;ra1;erLlKoIruHsCuB;nda2;e2oCtraA;ct;lu1rbi3;ng;te;pt;aBve;rd;aze,e;ra2;nt",Comparable:"true¦0:3Z;1:4G;2:43;3:2W;4:49;5:3V;a4Mb42c3Md3Be33f2Pg2Dh22i1Tj1Sk1Pl1Hm1Bn15o13p0Tqu0Rr0IsRtKuIvFw7y6za11;ell25ou4;aBe9hi1Wi7r6;o4y;ck0Mde,l6n1ry,se;d,y;a6i4Kt;k,ry;n1Rr6sI;m,y;a7e6ulgar;nge5rda2xi4;gue,in,st;g0n6pco3Kse5;like0ti1;aAen9hi8i7ough,r6;anqu2Oen1ue;dy,g3Sme0ny,r09;ck,n,rs2P;d40se;ll,me,rt,s6wd45;te5;aVcarUeThRiQkin0FlMmKoHpGqua1FtAu7w6;eet,ift;b7dd13per0Gr6;e,re2H;sta2Ft3;aAe9iff,r7u6;pXr1;a6ict,o4;ig3Fn0U;a1ep,rn;le,rk;e22i3Fright0;ci28ft,l7o6re,ur;n,thi4;emn,id;a6el0ooth;ll,rt;e8i6ow,y;ck,g35m6;!y;ek,nd3D;ck,l0mp3;a6iTort,rill,y;dy,ll0Xrp;cu0Rve0Rxy;ce,ed,y;d,fe,int0l1Vv14;aBe9i8o6ude;mantic,o1Isy,u6;gh,nd;ch,pe,tzy;a6d,mo0H;dy,l;gg7ndom,p6re,w;id;ed;ai2i6;ck,et;aEhoDi1QlCoBr8u6;ny,r6;e,p3;egna2ic7o6;fouYud;ey,k0;li04or,te1B;ain,easa2;ny;in5le;dd,f6i0ld,ranQ;fi10;aAe8i7o6;b3isy,rm15sy;ce,mb3;a6w;r,t;ive,rr01;aAe8ild,o7u6;nda19te;ist,o1;a6ek,llX;n,s0ty;d,tuQ;aBeAi9o6ucky;f0Un7o1Du6ve0w17y0T;d,sy;e0g;g1Tke0tt3ve0;an,wd;me,r6te;ge;e7i6;nd;en;ol0ui1P;cy,ll,n6;sBt6;e6ima8;llege2r6;es7media6;te;ti4;ecu6ta2;re;aEeBiAo8u6;ge,m6ng1R;b3id;ll6me0t;ow;gh,l0;a6f04sita2;dy,v6;en0y;nd1Hppy,r6te5;d,sh;aGenFhDiClBoofy,r6;a9e8is0o6ue1E;o6ss;vy;at,en,y;nd,y;ad,ib,ooI;a2d1;a6o6;st0;t3uiY;u1y;aIeeb3iDlat,oAr8u6;ll,n6r14;!ny;aHe6iend0;e,sh;a7r6ul;get5mG;my;erce8n6rm,t;an6e;ciC;! ;le;ir,ke,n0Fr,st,t,ulA;aAerie,mp9sse7v6xtre0Q;il;nti6;al;ty;r7s6;tern,y;ly,th0;aFeCi9r7u6;ll,mb;u6y;nk;r7vi6;ne;e,ty;a6ep,nD;d6f,r;!ly;mp,pp03rk;aHhDlAo8r7u6;dd0r0te;isp,uel;ar6ld,mmon,ol,st0ward0zy;se;e6ou1;a6vW;n,r;ar8e6il0;ap,e6;sy;mi4;gey,lm8r6;e5i4;ful;!i4;aNiLlIoEr8u6;r0sy;ly;aAi7o6;ad,wn;ef,g7llia2;nt;ht;sh,ve;ld,r7un6;cy;ed,i4;ng;a7o6ue;nd,o1;ck,nd;g,tt6;er;d,ld,w1;dy;bsu9ng8we6;so6;me;ry;rd",TextValue:"true¦bMeIfChundredNmMnin9one,qu8s6t0zeroN;enMh3rLw0;e0o;l0ntC;fGve;ir0ousandIree;d,t5;e0ix7;cond,ptEven6xtE;adrDintD;e0th;!t0;e9ie8y;i3o0;rt1ur0;!t2;ie4y;ft0rst,ve;e3h,ie2y;ight0lev2;!e1h,ie0y;th;en1;illion0;!th",Ordinal:"true¦bGeDf9hundredHmGnin7qu6s4t0zeroH;enGh1rFwe0;lfFn9;ir0ousandE;d,t4;e0ixt9;cond,ptAvent8xtA;adr9int9;et0th;e6ie8;i2o0;r0urt3;tie5;ft1rst;ight0lev1;e0h,ie2;en1;illion0;th",Cardinal:"true¦bGeDf7hundred,mGnine9one,qu6s4t0zero;en,h2rFw0;e0o;lve,n7;irt8ousand,ree;e0ix4;ptAven3xtA;adr9int9;i3o0;r1ur0;!t2;ty;ft0ve;e2y;ight0lev1;!e0y;en;illion",Expression:"true¦a02b01dXeVfuck,gShLlImHnGoDpBshAtsk,u7voi04w3y0;a1eLu0;ck,p;!a,hoo,y;h1ow,t0;af,f;e0oa;e,w;gh,h0;! 0h,m;huh,oh;eesh,hh,it;ff,hew,l0sst;ease,z;h1o0w,y;h,o,ps;!h;ah,ope;eh,mm;m1ol0;!s;ao,fao;a4e2i,mm,oly1urr0;ah;! mo6;e,ll0y;!o;ha0i;!ha;ah,ee,o0rr;l0odbye;ly;e0h,t cetera,ww;k,p;'oh,a0uh;m0ng;mit,n0;!it;ah,oo,ye; 1h0rgh;!em;la",Adverb:"true¦a07by 05d01eYfShQinPjustOkinda,mMnJoEpCquite,r9s5t2up1very,w0Bye0;p,s; to,wards5;h1o0wiO;o,t6ward;en,us;everal,o0uch;!me1rt0; of;hXtimes,w07;a1e0;alS;ndomRthN;ar excellDer0oint blank; Mhaps;f3n0;ce0ly;! 0;ag00moU; courHten;ewJo0; longEt 0;onHwithstanding;aybe,eanwhiAore0;!ovB;! aboS;deed,steT;en0;ce;or2u0;l9rther0;!moH; 0ev3;examp0good,suF;le;n mas1v0;er;se;e0irect1; 1finite0;ly;ju7trop;far,n0;ow; CbroBd nauseam,gAl5ny2part,side,t 0w3;be5l0mo5wor5;arge,ea4;mo1w0;ay;re;l 1mo0one,ready,so,ways;st;b1t0;hat;ut;ain;ad;lot,posteriori",Preposition:"true¦'o,-,aKbHcGdFexcept,fEinDmidPnotwithstandiQoBpRqua,sAt6u3vi2w0;/o,hereMith0;!in,oQ;a,s-a-vis;n1p0;!on;like,til;h0ill,owards;an,r0;ough0u;!oI;ans,ince,o that;',f0n1ut;!f;!to;or,rom;espite,own,u3;hez,irca;ar1e0oAy;low,sides,tween;ri6;',bo7cross,ft6lo5m3propos,round,s1t0;!op;! long 0;as;id0ong0;!st;ng;er;ut",Determiner:"true¦aAboth,d8e5few,l3mu7neiCown,plenty,some,th2various,wh0;at0ich0;evB;at,e3is,ose;a,e0;!ast,s;a1i6l0nough,very;!se;ch;e0u;!s;!n0;!o0y;th0;er"},gt=["Person","Place","Organization"],ft={Noun:{notA:["Verb","Adjective","Adverb"]},Singular:{isA:"Noun",notA:"Plural"},ProperNoun:{isA:"Noun"},Person:{isA:["ProperNoun","Singular"],notA:["Place","Organization","Date"]},FirstName:{isA:"Person"},MaleName:{isA:"FirstName",notA:["FemaleName","LastName"]},FemaleName:{isA:"FirstName",notA:["MaleName","LastName"]},LastName:{isA:"Person",notA:["FirstName"]},NickName:{isA:"Person",notA:["FirstName","LastName"]},Honorific:{isA:"Noun",notA:["FirstName","LastName","Value"]},Place:{isA:"Singular",notA:["Person","Organization"]},Country:{isA:["Place","ProperNoun"],notA:["City"]},City:{isA:["Place","ProperNoun"],notA:["Country"]},Region:{isA:["Place","ProperNoun"]},Address:{isA:"Place"},Organization:{isA:["Singular","ProperNoun"],notA:["Person","Place"]},SportsTeam:{isA:"Organization"},School:{isA:"Organization"},Company:{isA:"Organization"},Plural:{isA:"Noun",notA:["Singular"]},Uncountable:{isA:"Noun"},Pronoun:{isA:"Noun",notA:gt},Actor:{isA:"Noun",notA:gt},Activity:{isA:"Noun",notA:["Person","Place"]},Unit:{isA:"Noun",notA:gt},Demonym:{isA:["Noun","ProperNoun"],notA:gt},Possessive:{isA:"Noun"}},mt={Verb:{notA:["Noun","Adjective","Adverb","Value"]},PresentTense:{isA:"Verb",notA:["PastTense","Copula","FutureTense"]},Infinitive:{isA:"PresentTense",notA:["PastTense","Gerund"]},Gerund:{isA:"PresentTense",notA:["PastTense","Copula","FutureTense"]},PastTense:{isA:"Verb",notA:["FutureTense"]},FutureTense:{isA:"Verb"},Copula:{isA:"Verb"},Modal:{isA:"Verb",notA:["Infinitive"]},PerfectTense:{isA:"Verb",notA:"Gerund"},Pluperfect:{isA:"Verb"},Participle:{isA:"Verb"},PhrasalVerb:{isA:"Verb"},Particle:{isA:"PhrasalVerb"}},vt={Value:{notA:["Verb","Adjective","Adverb"]},Ordinal:{isA:"Value",notA:["Cardinal"]},Cardinal:{isA:"Value",notA:["Ordinal"]},RomanNumeral:{isA:"Cardinal",notA:["Ordinal","TextValue"]},TextValue:{isA:"Value",notA:["NumericValue"]},NumericValue:{isA:"Value",notA:["TextValue"]},Money:{isA:"Cardinal"},Percent:{isA:"Value"}},bt=["Noun","Verb","Adjective","Adverb","Value","QuestionWord"],yt={Adjective:{notA:["Noun","Verb","Adverb","Value"]},Comparable:{isA:["Adjective"]},Comparative:{isA:["Adjective"]},Superlative:{isA:["Adjective"],notA:["Comparative"]},NumberRange:{isA:["Contraction"]},Adverb:{notA:["Noun","Verb","Adjective","Value"]},Date:{notA:["Verb","Conjunction","Adverb","Preposition","Adjective"]},Month:{isA:["Date","Singular"],notA:["Year","WeekDay","Time"]},WeekDay:{isA:["Date","Noun"]},Time:{isA:["Date"],notA:["Value"]},Determiner:{notA:bt},Conjunction:{notA:bt},Preposition:{notA:bt},QuestionWord:{notA:["Determiner"]},Currency:{},Expression:{notA:["Noun","Adjective","Verb","Adverb"]},Abbreviation:{},Url:{notA:["HashTag","PhoneNumber","Verb","Adjective","Value","AtMention","Email"]},PhoneNumber:{notA:["HashTag","Verb","Adjective","Value","AtMention","Email"]},HashTag:{},AtMention:{isA:["Noun"],notA:["HashTag","Verb","Adjective","Value","Email"]},Emoji:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Emoticon:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Email:{notA:["HashTag","Verb","Adjective","Value","AtMention"]},Auxiliary:{notA:["Noun","Adjective","Value"]},Acronym:{notA:["Plural","RomanNumeral"]},Negative:{notA:["Noun","Adjective","Value"]},Condition:{notA:["Verb","Adjective","Noun","Value"]}},wt={Noun:"blue",Verb:"green",Negative:"green",Date:"red",Value:"red",Adjective:"magenta",Preposition:"cyan",Conjunction:"cyan",Determiner:"cyan",Adverb:"cyan"},kt=function(e){return Object.keys(e).forEach((function(t){e[t].color?e[t].color=e[t].color:wt[t]?e[t].color=wt[t]:e[t].isA.some((function(r){return!!wt[r]&&(e[t].color=wt[r],!0)}))})),e},At=function(e){return Object.keys(e).forEach((function(t){for(var r=e[t],n=r.isA.length,a=0;a=0;i--,a*=36){var o=e.charCodeAt(i)-48;o>10&&(o-=7),t+=o*a}return t},Et=function(e,t,r){var n=xt(t);return n1&&(r.hasCompound[i[0]]=!0),"Singular"===t){var o=a.toPlural(e,r);n[o]=n[o]||"Plural"}if("Infinitive"===t)for(var s=a.conjugate(e,r),u=Object.keys(s),l=0;l0&&void 0!==arguments[0]?arguments[0]:"",t=e[e.length-1];if(!0===Jt.hasOwnProperty(t))for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r={};return t&&t.irregulars&&!0===t.irregulars.verbs.hasOwnProperty(e)&&(r=Object.assign({},t.irregulars.verbs[e])),void 0===(r=Object.assign({},Wt(e),r)).Gerund&&(r.Gerund=Qt.Gerund(e)),void 0===r.PastTense&&(r.PastTense=Qt.PastTense(e)),void 0===r.PresentTense&&(r.PresentTense=Qt.PresentTense(e)),r},Xt=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/oud$/,/...p$/],Yt=[/ary$/],er={nice:"nicest",late:"latest",hard:"hardest",inner:"innermost",outer:"outermost",far:"furthest",worse:"worst",bad:"worst",good:"best",big:"biggest",large:"largest"},tr=[{reg:/y$/i,repl:"iest"},{reg:/([aeiou])t$/i,repl:"$1ttest"},{reg:/([aeou])de$/i,repl:"$1dest"},{reg:/nge$/i,repl:"ngest"},{reg:/([aeiou])te$/i,repl:"$1test"}],rr=[/ght$/,/nge$/,/ough$/,/ain$/,/uel$/,/[au]ll$/,/ow$/,/old$/,/oud$/,/e[ae]p$/],nr=[/ary$/,/ous$/],ar={grey:"greyer",gray:"grayer",green:"greener",yellow:"yellower",red:"redder",good:"better",well:"better",bad:"worse",sad:"sadder",big:"bigger"},ir=[{reg:/y$/i,repl:"ier"},{reg:/([aeiou])t$/i,repl:"$1tter"},{reg:/([aeou])de$/i,repl:"$1der"},{reg:/nge$/i,repl:"nger"}],or={toSuperlative:function(e){if(er.hasOwnProperty(e))return er[e];for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,r=t.irregulars.nouns;if(r.hasOwnProperty(e))return r[e];var n=cr(e);return null!==n?n:lr.test(e)?e+"es":e+"s"},dr=[[/([^v])ies$/i,"$1y"],[/ises$/i,"isis"],[/(kn|[^o]l|w)ives$/i,"$1ife"],[/^((?:ca|e|ha|(?:our|them|your)?se|she|wo)l|lea|loa|shea|thie)ves$/i,"$1f"],[/^(dwar|handkerchie|hoo|scar|whar)ves$/i,"$1f"],[/(antenn|formul|nebul|vertebr|vit)ae$/i,"$1a"],[/(octop|vir|radi|nucle|fung|cact|stimul)(i)$/i,"$1us"],[/(buffal|tomat|tornad)(oes)$/i,"$1o"],[/(eas)es$/i,"$1e"],[/(..[aeiou]s)es$/i,"$1"],[/(vert|ind|cort)(ices)$/i,"$1ex"],[/(matr|append)(ices)$/i,"$1ix"],[/(x|ch|ss|sh|z|o)es$/i,"$1"],[/men$/i,"man"],[/(n)ews$/i,"$1ews"],[/([ti])a$/i,"$1um"],[/([^aeiouy]|qu)ies$/i,"$1y"],[/(s)eries$/i,"$1eries"],[/(m)ovies$/i,"$1ovie"],[/([m|l])ice$/i,"$1ouse"],[/(cris|ax|test)es$/i,"$1is"],[/(alias|status)es$/i,"$1"],[/(ss)$/i,"$1"],[/(ics)$/i,"$1"],[/s$/i,""]],pr=function(e,t){var r,n=t.irregulars.nouns,a=(r=n,Object.keys(r).reduce((function(e,t){return e[r[t]]=t,e}),{}));if(a.hasOwnProperty(e))return a[e];for(var i=0;i1?a[i]&&"."!==a[i]&&r.tag(a[i],n,t.world):r.tag(e,n,t.world)}))}))}),Dr={tag:function(e,t){return e?(Cr(e,this,!1,t),this):this},tagSafe:function(e,t){return e?(Cr(e,this,!0,t),this):this},unTag:function(e,t){var r=this;return this.list.forEach((function(n){n.terms().forEach((function(n){return n.unTag(e,t,r.world)}))})),this},canBe:function(e){if(!e)return this;var t=this.world,r=this.list.reduce((function(r,n){return r.concat(n.canBe(e,t))}),[]);return this.buildFrom(r)}},jr={map:function(t){var r=this;if(!t)return this;var n=this.list.map((function(e,n){var a=r.buildFrom([e]);a.from=null;var i=t(a,n);return i&&i.list&&i.list[0]?i.list[0]:i}));return 0===(n=n.filter((function(e){return e}))).length?this.buildFrom(n):"object"!==e(n[0])||"Phrase"!==n[0].isA?n:this.buildFrom(n)},forEach:function(e,t){var r=this;return e?(this.list.forEach((function(n,a){var i=r.buildFrom([n]);!0===t&&(i.from=null),e(i,a)})),this):this},filter:function(e){var t=this;if(!e)return this;var r=this.list.filter((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return this.buildFrom(r)},find:function(e){var t=this;if(!e)return this;var r=this.list.find((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)}));return r?this.buildFrom([r]):void 0},some:function(e){var t=this;return e?this.list.some((function(r,n){var a=t.buildFrom([r]);return a.from=null,e(a,n)})):this},random:function(e){if(!this.found)return this;var t=Math.floor(Math.random()*this.list.length);if(void 0===e){var r=[this.list[t]];return this.buildFrom(r)}return t+e>this.length&&(t=(t=this.length-e)<0?0:t),this.slice(t,t+e)}},xr=function(e){return e.split(/[ -]/g)},Er=function(e,t,r){for(var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r={};return e.forEach((function(e,n){var a=!0;void 0!==t[n]&&(a=t[n]),e=(e=(e||"").toLowerCase()).replace(/[,;.!?]+$/,"");var i=xr(e).map((function(e){return e.trim()}));r[i[0]]=r[i[0]]||{},1===i.length?r[i[0]].value=a:(r[i[0]].more=r[i[0]].more||[],r[i[0]].more.push({rest:i.slice(1),value:a}))})),r}(e,t),a=[],i=function(e){for(var t=r.list[e],i=t.terms().map((function(e){return e.reduced})),o=function(e){void 0!==n[i[e]]&&(void 0!==n[i[e]].more&&n[i[e]].more.forEach((function(r){void 0!==i[e+r.rest.length]&&(!0===r.rest.every((function(t,r){return t===i[e+r+1]}))&&a.push({id:t.terms()[e].id,value:r.value,length:r.rest.length+1}))})),void 0!==n[i[e]].value&&a.push({id:t.terms()[e].id,value:n[i[e]].value,length:1}))},s=0;s1&&void 0!==arguments[1]?arguments[1]:{};return t?(!0===n&&(n={keepTags:!0}),!1===n&&(n={keepTags:!1}),n=n||{},this.uncache(),this.list.forEach((function(a){var i,o=t;if("function"==typeof t&&(o=t(a)),o&&"object"===e(o)&&"Doc"===o.isA)i=o.list,r.pool().merge(o.pool());else{if("string"!=typeof o)return;!1!==n.keepCase&&a.terms(0).isTitleCase()&&(o=Or(o)),i=ht(o,r.world,r.pool());var s=r.buildFrom(i);s.tagger(),i=s.list}if(!0===n.keepTags){var u=a.json({terms:{tags:!0}}).terms;i[0].terms().forEach((function(e,t){u[t]&&e.tagSafe(u[t].tags,"keptTag",r.world)}))}a.replace(i[0],r)})),this):this.delete()},replace:function(e,t,r){return void 0===t?this.replaceWith(e,r):(this.match(e).replaceWith(t,r),this)}},zr=N((function(e,t){t.append=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.append(n,t)})),this):this},t.insertAfter=t.append,t.insertAt=t.append,t.prepend=function(e){var t=this;return e?(this.uncache(),this.list.forEach((function(r){var n=ht(e,t.world,t.pool())[0];t.buildFrom([n]).tagger(),r.prepend(n,t)})),this):this},t.insertBefore=t.prepend,t.concat=function(){this.uncache();for(var e=this.list.slice(0),t=0;t0&&void 0!==arguments[0]?arguments[0]:{};if("number"==typeof t&&this.list[t])return this.list[t].json(r);!0===(t=n(t)).root&&this.list.forEach((function(t){t.terms().forEach((function(t){null===t.root&&t.setRoot(e.world)}))}));var a=this.list.map((function(r){return r.json(t,e.world)}));if((t.terms.offset||t.offset||t.terms.index||t.index)&&Ir(this,a,t),t.frequency||t.freq||t.count){var i={};this.list.forEach((function(e){var t=e.text("reduced");i[t]=i[t]||0,i[t]+=1})),this.list.forEach((function(e,t){a[t].count=i[e.text("reduced")]}))}if(t.unique){var o={};a=a.filter((function(e){return!0!==o[e.reduced]&&(o[e.reduced]=!0,!0)}))}return a},t.data=t.json})),Sr=(Mr.json,Mr.data,N((function(e){var t=function(e,t){for(e=e.toString();e.lengtht.count?-1:e.countn?1:0},length:function(e,t){var r=e.text().trim().length,n=t.text().trim().length;return rn?-1:0},wordCount:function(e,t){var r=e.wordCount(),n=t.wordCount();return rn?-1:0}};qr.alphabetical=qr.alpha,qr.wordcount=qr.wordCount;var Jr={index:!0,sequence:!0,seq:!0,sequential:!0,chron:!0,chronological:!0},Kr={sort:function(e){return"freq"===(e=e||"alpha")||"frequency"===e||"topk"===e?(r={},n={case:!0,punctuation:!1,whitespace:!0,unicode:!0},(t=this).list.forEach((function(e){var t=e.text(n);r[t]=r[t]||0,r[t]+=1})),t.list.sort((function(e,t){var a=r[e.text(n)],i=r[t.text(n)];return ai?-1:0})),t):Jr.hasOwnProperty(e)?function(e){var t={};return e.json({terms:{offset:!0}}).forEach((function(e){t[e.terms[0].id]=e.terms[0].offset.start})),e.list=e.list.sort((function(e,r){return t[e.start]>t[r.start]?1:t[e.start]0){a+=o;continue}}if(void 0===r[i]||!0!==r.hasOwnProperty(i))if(i===e[a].reduced||!0!==r.hasOwnProperty(e[a].reduced)){if(!0===hn.test(i)){var s=i.replace(hn,"");!0===r.hasOwnProperty(s)&&e[a].tag(r[s],"noprefix-lexicon",t)}}else e[a].tag(r[e[a].reduced],"lexicon",t);else e[a].tag(r[i],"lexicon",t)}return e},gn=/[\'‘’‛‵′`´]$/,fn=/^(m|k|cm|km|m)\/(s|h|hr)$/,mn=[[/^\w+@\w+\.[a-z]{2,3}$/,"Email"],[/^#[a-z0-9_\u00C0-\u00FF]{2,}$/,"HashTag"],[/^@\w{2,}$/,"AtMention"],[/^(https?:\/\/|www\.)\w+\.[a-z]{2,3}/,"Url"],[/^[\w./]+\.(com|net|gov|org|ly|edu|info|biz|ru|jp|de|in|uk|br)/,"Url"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])?(:[0-5][0-9])? ?(am|pm)$/,"Time"],[/^[012]?[0-9](:[0-5][0-9])(:[0-5][0-9])? ?(am|pm)?$/,"Time"],[/^[PMCE]ST$/,"Time"],[/^utc ?[+-]?[0-9]+?$/,"Time"],[/^[a-z0-9]*? o\'?clock$/,"Time"],[/^[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}$/,"Date"],[/^[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,4}$/,"Date"],[/^ma?c\'.*/,"LastName"],[/^o\'[drlkn].*/,"LastName"],[/^ma?cd[aeiou]/,"LastName"],[/^(lol)+[sz]$/,"Expression"],[/^woo+a*?h?$/,"Expression"],[/^(un|de|re)\\-[a-z\u00C0-\u00FF]{2}/,"Verb"],[/^[0-9]{1,4}\.[0-9]{1,2}\.[0-9]{1,4}$/,"Date"],[/^[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[0-9]{3}[ -]?[0-9]{3}-[0-9]{4}$/,"PhoneNumber"],[/^[-+]?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6][-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(k|m|b|bn)?\+?$/,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?[\$\xA2-\xA5\u058F\u060B\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BD\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6]\+?$/,["Money","Value"]],[/^[-+]?[0-9]([0-9,.])+?(usd|eur|jpy|gbp|cad|aud|chf|cny|hkd|nzd|kr|rub)$/i,["Money","Value"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?(st|nd|rd|th)$/,["Ordinal","NumericValue"]],[/^\.[0-9]+\+?$/,["Cardinal","NumericValue"]],[/^[-+]?[0-9]+(,[0-9]{3})*(\.[0-9]+)?%\+?$/,["Percent","Cardinal","NumericValue"]],[/^\.[0-9]+%$/,["Percent","Cardinal","NumericValue"]],[/^[0-9]{1,4}\/[0-9]{1,4}$/,"Fraction"],[/^[0-9.]{1,2}[-–][0-9]{1,2}$/,["Value","NumberRange"]],[/^[0-9.]{1,4}(st|nd|rd|th)?[-–][0-9\.]{1,4}(st|nd|rd|th)?$/,"NumberRange"],[/^[0-9.]+([a-z]{1,4})$/,"Value"]],vn=/^[IVXLCDM]{2,}$/,bn=/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,yn="Adjective",wn="Infinitive",kn="PresentTense",An="Singular",$n="PastTense",Bn="Expression",Pn="LastName",Gn={a:[[/.[aeiou]na$/,"Noun"],[/.[oau][wvl]ska$/,Pn],[/.[^aeiou]ica$/,An],[/^([hyj]a)+$/,Bn]],c:[[/.[^aeiou]ic$/,yn]],d:[[/[aeiou](pp|ll|ss|ff|gg|tt|rr|bb|nn|mm)ed$/,$n],[/.[aeo]{2}[bdgmnprvz]ed$/,$n],[/.[aeiou][sg]hed$/,$n],[/.[aeiou]red$/,$n],[/.[aeiou]r?ried$/,$n],[/.[bcdgtr]led$/,$n],[/.[aoui]f?led$/,$n],[/.[iao]sed$/,$n],[/[aeiou]n?[cs]ed$/,$n],[/[aeiou][rl]?[mnf]ed$/,$n],[/[aeiou][ns]?c?ked$/,$n],[/[aeiou][nl]?ged$/,$n],[/.[tdbwxz]ed$/,$n],[/[^aeiou][aeiou][tvx]ed$/,$n],[/.[cdlmnprstv]ied$/,$n],[/[^aeiou]ard$/,An],[/[aeiou][^aeiou]id$/,yn],[/.[vrl]id$/,yn]],e:[[/.[lnr]ize$/,wn],[/.[^aeiou]ise$/,wn],[/.[aeiou]te$/,wn],[/.[^aeiou][ai]ble$/,yn],[/.[^aeiou]eable$/,yn],[/.[ts]ive$/,yn]],h:[[/.[^aeiouf]ish$/,yn],[/.v[iy]ch$/,Pn],[/^ug?h+$/,Bn],[/^uh[ -]?oh$/,Bn]],i:[[/.[oau][wvl]ski$/,Pn]],k:[[/^(k){2}$/,Bn]],l:[[/.[gl]ial$/,yn],[/.[^aeiou]ful$/,yn],[/.[nrtumcd]al$/,yn],[/.[^aeiou][ei]al$/,yn]],m:[[/.[^aeiou]ium$/,An],[/[^aeiou]ism$/,An],[/^h*u*m+$/,Bn],[/^\d+ ?[ap]m$/,"Date"]],n:[[/.[lsrnpb]ian$/,yn],[/[^aeiou]ician$/,"Actor"],[/[aeiou][ktrp]in$/,"Gerund"]],o:[[/^no+$/,Bn],[/^(yo)+$/,Bn],[/^woo+[pt]?$/,Bn]],r:[[/.[bdfklmst]ler$/,"Noun"],[/.[ilk]er$/,"Comparative"],[/[aeiou][pns]er$/,An],[/[^i]fer$/,wn],[/.[^aeiou][ao]pher$/,"Actor"]],t:[[/.[di]est$/,"Superlative"],[/.[icldtgrv]ent$/,yn],[/[aeiou].*ist$/,yn],[/^[a-z]et$/,"Verb"]],s:[[/.[rln]ates$/,kn],[/.[^z]ens$/,"Verb"],[/.[lstrn]us$/,An],[/.[aeiou]sks$/,kn],[/.[aeiou]kes$/,kn],[/[aeiou][^aeiou]is$/,An],[/[a-z]\'s$/,"Noun"],[/^yes+$/,Bn]],v:[[/.[^aeiou][ai][kln]ov$/,Pn]],y:[[/.[cts]hy$/,yn],[/.[st]ty$/,yn],[/.[gk]y$/,yn],[/.[tnl]ary$/,yn],[/.[oe]ry$/,An],[/[rdntkbhs]ly$/,"Adverb"],[/...lly$/,"Adverb"],[/[bszmp]{2}y$/,yn],[/.(gg|bb|zz)ly$/,yn],[/.[aeiou]my$/,yn],[/[ea]{2}zy$/,yn],[/.[^aeiou]ity$/,An]]},Cn="Adjective",Dn="Infinitive",jn="PresentTense",xn="Singular",En="PastTense",Nn="Adverb",Fn="Plural",On="Verb",Tn="LastName",zn=[null,null,{ea:xn,ia:"Noun",ic:Cn,ly:Nn,"'n":On,"'t":On},{oed:En,ued:En,xed:En," so":Nn,"'ll":"Modal","'re":"Copula",azy:Cn,end:On,ped:En,ffy:Cn,ify:Dn,ing:"Gerund",ize:Dn,lar:Cn,mum:Cn,nes:jn,nny:Cn,oid:Cn,ous:Cn,que:Cn,rmy:Cn,rol:xn,sis:xn,zes:jn},{amed:En,aped:En,ched:En,lked:En,nded:En,cted:En,dged:En,akis:Tn,cede:Dn,chuk:Tn,czyk:Tn,ects:jn,ends:On,enko:Tn,ette:xn,fies:jn,fore:Nn,gate:Dn,gone:Cn,ices:Fn,ints:Fn,ions:Fn,less:Nn,llen:Cn,made:Cn,nsen:Tn,oses:jn,ould:"Modal",some:Cn,sson:Tn,tage:Dn,teen:"Value",tion:xn,tive:Cn,tors:"Noun",vice:xn},{tized:En,urned:En,eased:En,ances:Fn,bound:Cn,ettes:Fn,fully:Nn,ishes:jn,ities:Fn,marek:Tn,nssen:Tn,ology:"Noun",ports:Fn,rough:Cn,tches:jn,tieth:"Ordinal",tures:Fn,wards:Nn,where:Nn},{auskas:Tn,keeper:"Actor",logist:"Actor",teenth:"Value"},{opoulos:Tn,borough:"Place",sdottir:Tn}],Hn={":(":!0,":)":!0,":P":!0,":p":!0,":O":!0,":3":!0,":|":!0,":/":!0,":\\":!0,":$":!0,":*":!0,":@":!0,":-(":!0,":-)":!0,":-P":!0,":-p":!0,":-O":!0,":-3":!0,":-|":!0,":-/":!0,":-\\":!0,":-$":!0,":-*":!0,":-@":!0,":^(":!0,":^)":!0,":^P":!0,":^p":!0,":^O":!0,":^3":!0,":^|":!0,":^/":!0,":^\\":!0,":^$":!0,":^*":!0,":^@":!0,"):":!0,"(:":!0,"$:":!0,"*:":!0,")-:":!0,"(-:":!0,"$-:":!0,"*-:":!0,")^:":!0,"(^:":!0,"$^:":!0,"*^:":!0,"<3":!0,"2){var a=n.clean[n.clean.length-2];if("s"===a)return void n.tag(["Possessive","Noun"],"end-tick",r);"n"===a&&n.tag(["Gerund"],"chillin",r)}fn.test(n.text)&&n.tag("Unit","per-sec",r)},regex:function(e,t){for(var r=e.text,n=0;n=2&&vn.test(r)&&bn.test(r)&&e.tag("RomanNumeral","xvii",t)},suffix:function(e,t){!function(e,t){var r=e.clean.length,n=7;r<=n&&(n=r-1);for(var a=n;a>1;a-=1){var i=e.clean.substr(r-a,r);if(!0===zn[i.length].hasOwnProperty(i)){var o=zn[i.length][i];e.tagSafe(o,"suffix -"+i,t);break}}}(e,t),function(e,t){var r=e.clean,n=r[r.length-1];if(!0===Gn.hasOwnProperty(n))for(var a=Gn[n],i=0;i35)))}(n=(n=n.trim()).replace(/[.!?,]$/,""))&&(e.tag("Emoji","comma-emoji",t),e.text=n,e.pre=e.pre.replace(":",""),e.post=e.post.replace(":","")),e.text.match(Vn)&&(e.tag("Emoji","unicode-emoji",t),e.text=n),!0===(r=(r=n).replace(/^[:;]/,":"),Hn.hasOwnProperty(r))&&(e.tag("Emoticon","emoticon-emoji",t),e.text=n)}},Mn=function(e,t){var r=e.world;In.lexicon(t,r);for(var n=0;n3&&void 0!==r[n]&&!0===r.hasOwnProperty(n)&&e.tag(r[n],"stem-"+n,t)}}))},Zn={isSingular:[/(ax|test)is$/i,/(octop|vir|radi|nucle|fung|cact|stimul)us$/i,/(octop|vir)i$/i,/(rl)f$/i,/(alias|status)$/i,/(bu)s$/i,/(al|ad|at|er|et|ed|ad)o$/i,/(ti)um$/i,/(ti)a$/i,/sis$/i,/(?:(^f)fe|(lr)f)$/i,/hive$/i,/s[aeiou]+ns$/i,/(^aeiouy|qu)y$/i,/(x|ch|ss|sh|z)$/i,/(matr|vert|ind|cort)(ix|ex)$/i,/(m|l)ouse$/i,/(m|l)ice$/i,/(antenn|formul|nebul|vertebr|vit)a$/i,/.sis$/i,/^(?!talis|.*hu)(.*)man$/i],isPlural:[/(^v)ies$/i,/ises$/i,/ives$/i,/(antenn|formul|nebul|vertebr|vit)ae$/i,/(octop|vir|radi|nucle|fung|cact|stimul)i$/i,/(buffal|tomat|tornad)oes$/i,/(analy|ba|diagno|parenthe|progno|synop|the)ses$/i,/(vert|ind|cort)ices$/i,/(matr|append)ices$/i,/(x|ch|ss|sh|s|z|o)es$/i,/is$/i,/men$/i,/news$/i,/.tia$/i,/(^f)ves$/i,/(lr)ves$/i,/(^aeiouy|qu)ies$/i,/(m|l)ice$/i,/(cris|ax|test)es$/i,/(alias|status)es$/i,/ics$/i]},Xn=["Uncountable","Pronoun","Place","Value","Person","Month","WeekDay","Holiday"],Yn=[/ss$/,/sis$/,/[^aeiou][uo]s$/,/'s$/],ea=[/i$/,/ae$/],ta=function(e,t){if(e.tags.Noun&&!e.tags.Acronym){var r=e.clean;if(e.tags.Singular||e.tags.Plural)return;if(r.length<=3)return void e.tag("Singular","short-singular",t);if(Xn.find((function(t){return e.tags[t]})))return;if(Zn.isPlural.find((function(e){return e.test(r)})))return void e.tag("Plural","plural-rules",t);if(Zn.isSingular.find((function(e){return e.test(r)})))return void e.tag("Singular","singular-rules",t);if(!0===/s$/.test(r)){if(Yn.find((function(e){return e.test(r)})))return;return void e.tag("Plural","plural-fallback",t)}if(ea.find((function(e){return e.test(r)})))return;e.tag("Singular","singular-fallback",t)}},ra=["academy","administration","agence","agences","agencies","agency","airlines","airways","army","assoc","associates","association","assurance","authority","autorite","aviation","bank","banque","board","boys","brands","brewery","brotherhood","brothers","building society","bureau","cafe","caisse","capital","care","cathedral","center","central bank","centre","chemicals","choir","chronicle","church","circus","clinic","clinique","club","co","coalition","coffee","collective","college","commission","committee","communications","community","company","comprehensive","computers","confederation","conference","conseil","consulting","containers","corporation","corps","corp","council","crew","daily news","data","departement","department","department store","departments","design","development","directorate","division","drilling","education","eglise","electric","electricity","energy","ensemble","enterprise","enterprises","entertainment","estate","etat","evening news","faculty","federation","financial","fm","foundation","fund","gas","gazette","girls","government","group","guild","health authority","herald","holdings","hospital","hotel","hotels","inc","industries","institut","institute","institute of technology","institutes","insurance","international","interstate","investment","investments","investors","journal","laboratory","labs","liberation army","limited","local authority","local health authority","machines","magazine","management","marine","marketing","markets","media","memorial","mercantile exchange","ministere","ministry","military","mobile","motor","motors","musee","museum","news","news service","observatory","office","oil","optical","orchestra","organization","partners","partnership","people's party","petrol","petroleum","pharmacare","pharmaceutical","pharmaceuticals","pizza","plc","police","polytechnic","post","power","press","productions","quartet","radio","regional authority","regional health authority","reserve","resources","restaurant","restaurants","savings","school","securities","service","services","social club","societe","society","sons","standard","state police","state university","stock exchange","subcommittee","syndicat","systems","telecommunications","telegraph","television","times","tribunal","tv","union","university","utilities","workers"].reduce((function(e,t){return e[t]="Noun",e}),{}),na=function(e){return!!e.tags.Noun&&(!(e.tags.Pronoun||e.tags.Comma||e.tags.Possessive)&&!!(e.tags.Organization||e.tags.Acronym||e.tags.Place||e.titleCase()))},aa=/^[A-Z]('s|,)?$/,ia=/([A-Z]\.){2}[A-Z]?/i,oa={I:!0,A:!0},sa={neighbours:qn,case:Rn,stem:Qn,plural:ta,organizations:function(e,t){for(var r=0;r0?Ra=Ra.concat(t):Ra.push(e)})),Ra.forEach((function(e){var t,r,n;return e.required=(t=e.reg,r=[],n=[],t.forEach((function(e){!0!==e.optional&&!0!==e.negative&&(void 0!==e.tag&&r.push(e.tag),void 0!==e.word&&n.push(e.word))})),{tags:Fa(r),words:Fa(n)}),e}));var Wa=Ra,Ua=function(e){Wa.forEach((function(t){var r=[];t.required.words.forEach((function(t){r.push(e._cache.words[t]||[])})),t.required.tags.forEach((function(t){r.push(e._cache.tags[t]||[])}));var n=function(e){if(0===e.length)return[];var t={};e.forEach((function(e){e=Fa(e);for(var r=0;r5&&e.match("#Verb+").length>=2}));if(u.found){var l=u.splitAfter("#Noun .* #Verb .* #Noun+");n=n.splitOn(l.eq(0))}return"number"==typeof t&&(n=n.get(t)),new e(n.list,this,this.world)},e},ri=function(e){var r=function(e){a(i,e);var r=l(i);function i(e,n,a){var o;return t(this,i),(o=r.call(this,e,n,a)).contracted=null,o}return n(i,[{key:"expand",value:function(){return this.list.forEach((function(e){var t=e.terms(),r=t[0].isTitleCase();t.forEach((function(e,r){e.set(e.implicit||e.text),e.implicit=void 0,r0}}),Object.defineProperty(this,"length",{get:function(){return i.list.length}}),Object.defineProperty(this,"isA",{get:function(){return"Doc"}})}return n(e,[{key:"tagger",value:function(){return Za(this)}},{key:"pool",value:function(){return this.list.length>0?this.list[0].pool:this.all().list[0].pool}}]),e}();Fi.prototype.buildFrom=function(e){return e=e.map((function(e){return e.clone(!0)})),new Fi(e,this,this.world)},Fi.prototype.fromText=function(e){var t=ht(e,this.world,this.pool());return this.buildFrom(t)},Object.assign(Fi.prototype,Ni.misc),Object.assign(Fi.prototype,Ni.selections),Ei(Fi);var Oi={untag:"unTag",and:"match",notIf:"ifNo",only:"if",onlyIf:"if"};Object.keys(Oi).forEach((function(e){return Fi.prototype[e]=Fi.prototype[Oi[e]]}));var Ti=Fi,zi=function(e){var t=e.termList();return pn(t,e.world),e};return function e(t){var r=t,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0;t&&r.addWords(t);var n=ht(e,r),a=new Ti(n,null,r);return a.tagger(),a};return n.tokenize=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1?arguments[1]:void 0,n=r;t&&((n=n.clone()).words={},n.addWords(t));var a=ht(e,n),i=new Ti(a,null,n);return t&&zi(i),i},n.extend=function(e){return e(Ti,r,this,qe,se,Ke),this},n.fromJSON=function(e){var t=dt(e,r);return new Ti(t,null,r)},n.clone=function(){return e(r.clone())},n.verbose=function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return r.verbose(e),this},n.world=function(){return r},n.version="13.2.0",n.import=n.load,n}(new Ar)})); diff --git a/builds/compromise.mjs b/builds/compromise.mjs index ae68d9bea..f0b9d6cbb 100644 --- a/builds/compromise.mjs +++ b/builds/compromise.mjs @@ -1,4 +1,4 @@ -/* compromise 13.1.1 MIT */ +/* compromise 13.2.0 MIT */ function _typeof(obj) { "@babel/helpers - typeof"; @@ -68,6 +68,19 @@ function _setPrototypeOf(o, p) { return _setPrototypeOf(o, p); } +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } +} + function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -84,8 +97,25 @@ function _possibleConstructorReturn(self, call) { return _assertThisInitialized(self); } +function _createSuper(Derived) { + return function () { + var Super = _getPrototypeOf(Derived), + result; + + if (_isNativeReflectConstruct()) { + var NewTarget = _getPrototypeOf(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; +} + function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _arrayWithHoles(arr) { @@ -93,10 +123,7 @@ function _arrayWithHoles(arr) { } function _iterableToArrayLimit(arr, i) { - if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { - return; - } - + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; @@ -122,8 +149,25 @@ function _iterableToArrayLimit(arr, i) { return _arr; } +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(n); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } //this is a not-well-thought-out way to reduce our dependence on `object===object` stuff @@ -1187,9 +1231,7 @@ var tag = { canBe: canBe_1$1 }; -var Term = -/*#__PURE__*/ -function () { +var Term = /*#__PURE__*/function () { function Term() { var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; @@ -1791,7 +1833,7 @@ var prepend_1 = function prepend_1(newPhrase, doc) { return this; }; -var delete_1 = function delete_1(doc) { +var _delete$1 = function _delete$1(doc) { _delete(this, doc); return this; }; // stich-in newPhrase, stretch 'doc' + parents @@ -1851,7 +1893,7 @@ var splitOn = function splitOn(p) { var _04Insert = { append: append_1, prepend: prepend_1, - "delete": delete_1, + "delete": _delete$1, replace: replace, splitOn: splitOn }; @@ -2927,9 +2969,7 @@ Object.keys(aliases).forEach(function (k) { var Phrase_1 = Phrase; /** a key-value store of all terms in our Document */ -var Pool = -/*#__PURE__*/ -function () { +var Pool = /*#__PURE__*/function () { function Pool() { var words = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -3378,7 +3418,7 @@ var fromJSON = function fromJSON(json, world) { var fromJSON_1 = fromJSON; -var _version = '13.1.1'; +var _version = '13.2.0'; var _data = { "Comparative": "true¦better", @@ -5903,9 +5943,7 @@ var transforms$2 = { var _isVerbose = false; /** all configurable linguistic data */ -var World = -/*#__PURE__*/ -function () { +var World = /*#__PURE__*/function () { function World() { _classCallCheck(this, World); @@ -7153,6 +7191,7 @@ var replaceWith = function replaceWith(replace) { var tmpDoc = _this.buildFrom(newPhrases); tmpDoc.tagger(); + newPhrases = tmpDoc.list; } else { return; //don't even bother } // try to keep its old tags, if appropriate @@ -10698,6 +10737,12 @@ var _03Noun = [// ==== Plural ==== group: 0, tag: 'Noun', reason: 'running-a-show' +}, //the-only-reason +{ + match: '#Determiner #Adverb [#Infinitive]', + group: 0, + tag: 'Noun', + reason: 'the-reason' }, //the nice swim { match: '(the|this|those|these) #Adjective [#Verb]', @@ -10839,12 +10884,8 @@ var _03Noun = [// ==== Plural ==== tag: 'Noun', reason: 'is-pres-noun' }, // -{ - match: '[#Infinitive] #Copula', - group: 0, - tag: 'Noun', - reason: 'inf-copula' -}, //a close +// { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' }, +//a close { match: '#Determiner #Adverb? [close]', group: 0, @@ -11875,15 +11916,15 @@ var _02Tagger = tagger; var addMethod = function addMethod(Doc) { /** */ - var Abbreviations = - /*#__PURE__*/ - function (_Doc) { + var Abbreviations = /*#__PURE__*/function (_Doc) { _inherits(Abbreviations, _Doc); + var _super = _createSuper(Abbreviations); + function Abbreviations() { _classCallCheck(this, Abbreviations); - return _possibleConstructorReturn(this, _getPrototypeOf(Abbreviations).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Abbreviations, [{ @@ -11934,15 +11975,15 @@ var hasPeriod = /\./; var addMethod$1 = function addMethod(Doc) { /** */ - var Acronyms = - /*#__PURE__*/ - function (_Doc) { + var Acronyms = /*#__PURE__*/function (_Doc) { _inherits(Acronyms, _Doc); + var _super = _createSuper(Acronyms); + function Acronyms() { _classCallCheck(this, Acronyms); - return _possibleConstructorReturn(this, _getPrototypeOf(Acronyms).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Acronyms, [{ @@ -12054,17 +12095,17 @@ var Clauses = addMethod$2; var addMethod$3 = function addMethod(Doc) { /** */ - var Contractions = - /*#__PURE__*/ - function (_Doc) { + var Contractions = /*#__PURE__*/function (_Doc) { _inherits(Contractions, _Doc); + var _super = _createSuper(Contractions); + function Contractions(list, from, world) { var _this; _classCallCheck(this, Contractions); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Contractions).call(this, list, from, world)); + _this = _super.call(this, list, from, world); _this.contracted = null; return _this; } @@ -12143,15 +12184,15 @@ var addMethod$4 = function addMethod(Doc) { /** cool, fun, and nice */ - var Lists = - /*#__PURE__*/ - function (_Doc) { + var Lists = /*#__PURE__*/function (_Doc) { _inherits(Lists, _Doc); + var _super = _createSuper(Lists); + function Lists() { _classCallCheck(this, Lists); - return _possibleConstructorReturn(this, _getPrototypeOf(Lists).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Lists, [{ @@ -12563,15 +12604,15 @@ var methods_1 = methods$6; var addMethod$5 = function addMethod(Doc) { /** */ - var Nouns = - /*#__PURE__*/ - function (_Doc) { + var Nouns = /*#__PURE__*/function (_Doc) { _inherits(Nouns, _Doc); + var _super = _createSuper(Nouns); + function Nouns() { _classCallCheck(this, Nouns); - return _possibleConstructorReturn(this, _getPrototypeOf(Nouns).apply(this, arguments)); + return _super.apply(this, arguments); } return Nouns; @@ -12614,15 +12655,15 @@ var close = /\)/; var addMethod$6 = function addMethod(Doc) { /** anything between (these things) */ - var Parentheses = - /*#__PURE__*/ - function (_Doc) { + var Parentheses = /*#__PURE__*/function (_Doc) { _inherits(Parentheses, _Doc); + var _super = _createSuper(Parentheses); + function Parentheses() { _classCallCheck(this, Parentheses); - return _possibleConstructorReturn(this, _getPrototypeOf(Parentheses).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Parentheses, [{ @@ -12685,17 +12726,17 @@ var Parentheses = addMethod$6; var addMethod$7 = function addMethod(Doc) { /** */ - var Possessives = - /*#__PURE__*/ - function (_Doc) { + var Possessives = /*#__PURE__*/function (_Doc) { _inherits(Possessives, _Doc); + var _super = _createSuper(Possessives); + function Possessives(list, from, world) { var _this; _classCallCheck(this, Possessives); - _this = _possibleConstructorReturn(this, _getPrototypeOf(Possessives).call(this, list, from, world)); + _this = _super.call(this, list, from, world); _this.contracted = null; return _this; } @@ -12788,15 +12829,15 @@ var hasOpen = RegExp('(' + Object.keys(pairs).join('|') + ')'); var addMethod$8 = function addMethod(Doc) { /** "these things" */ - var Quotations = - /*#__PURE__*/ - function (_Doc) { + var Quotations = /*#__PURE__*/function (_Doc) { _inherits(Quotations, _Doc); + var _super = _createSuper(Quotations); + function Quotations() { _classCallCheck(this, Quotations); - return _possibleConstructorReturn(this, _getPrototypeOf(Quotations).apply(this, arguments)); + return _super.apply(this, arguments); } _createClass(Quotations, [{ @@ -13402,15 +13443,15 @@ var methods$7 = { var addMethod$9 = function addMethod(Doc) { /** */ - var Verbs = - /*#__PURE__*/ - function (_Doc) { + var Verbs = /*#__PURE__*/function (_Doc) { _inherits(Verbs, _Doc); + var _super = _createSuper(Verbs); + function Verbs() { _classCallCheck(this, Verbs); - return _possibleConstructorReturn(this, _getPrototypeOf(Verbs).apply(this, arguments)); + return _super.apply(this, arguments); } return Verbs; @@ -13436,7 +13477,12 @@ var addMethod$9 = function addMethod(Doc) { m.sort('index'); //handle slashes? //ensure there's actually a verb - m = m["if"]('#Verb'); //grab (n)th result + m = m["if"]('#Verb'); // the reason he will is ... + + if (m.has('(is|was)$')) { + m = m.splitBefore('(is|was)$'); + } //grab (n)th result + if (typeof n === 'number') { m = m.get(n); @@ -13453,15 +13499,15 @@ var Verbs = addMethod$9; var addMethod$a = function addMethod(Doc) { /** */ - var People = - /*#__PURE__*/ - function (_Doc) { + var People = /*#__PURE__*/function (_Doc) { _inherits(People, _Doc); + var _super = _createSuper(People); + function People() { _classCallCheck(this, People); - return _possibleConstructorReturn(this, _getPrototypeOf(People).apply(this, arguments)); + return _super.apply(this, arguments); } return People; @@ -13505,9 +13551,7 @@ var methods$8 = { }; /** a parsed text object */ -var Doc = -/*#__PURE__*/ -function () { +var Doc = /*#__PURE__*/function () { function Doc(list, from, world) { var _this = this; diff --git a/changelog.md b/changelog.md index ba7d4c943..9d71c0749 100644 --- a/changelog.md +++ b/changelog.md @@ -8,7 +8,11 @@ compromise uses semver, and pushes to npm frequently While all _Major_ releases should be reviewed, our only two _large_ releases are **v6** in 2016 and and **v12** in 2019. Others have been mostly incremental, or niche. -#### [Unreleased] 13.2.0 +#### [Unreleased] + +-move (some) contractions into tokenizer? + +#### 13.2.0 - deprecate `.money()` and favour overloaded method in compromise-numbers plugin - add `.percentages()` and `.fractions()` to compromise-numbers plugin @@ -22,6 +26,7 @@ While all _Major_ releases should be reviewed, our only two _large_ releases are - - remove conjugation and inflection functions - remove sourcemap from build process (too big) - improvements to `.numbers().units()` +- fix for linked-list runtime error #744 with contractions #### 13.1.1 diff --git a/package-lock.json b/package-lock.json index 99e692a41..8c944bb6e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "compromise", - "version": "13.1.0", + "version": "13.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,75 +14,50 @@ } }, "@babel/compat-data": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz", - "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", - "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.4", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", + "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", "dev": true, "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.9.5", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-annotate-as-pure": { @@ -92,19 +67,6 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -115,66 +77,30 @@ "requires": { "@babel/helper-explode-assignable-expression": "^7.8.3", "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-call-delegate": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz", - "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-compilation-targets": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz", - "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", + "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "browserslist": "^4.8.5", + "@babel/compat-data": "^7.8.6", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "levenary": "^1.1.1", "semver": "^5.5.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz", - "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", "dev": true, "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.6.0" + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { @@ -186,19 +112,6 @@ "@babel/helper-function-name": "^7.8.3", "@babel/types": "^7.8.3", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-explode-assignable-expression": { @@ -209,43 +122,17 @@ "requires": { "@babel/traverse": "^7.8.3", "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.8.3", "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.9.5" } }, "@babel/helper-get-function-arity": { @@ -255,19 +142,6 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-hoist-variables": { @@ -277,19 +151,6 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-member-expression-to-functions": { @@ -299,64 +160,30 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-transforms": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz", - "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-optimise-call-expression": { @@ -366,19 +193,6 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-plugin-utils": { @@ -407,44 +221,18 @@ "@babel/template": "^7.8.3", "@babel/traverse": "^7.8.3", "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-replace-supers": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz", - "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.8.3", "@babel/helper-optimise-call-expression": "^7.8.3", - "@babel/traverse": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/helper-simple-access": { @@ -455,19 +243,6 @@ "requires": { "@babel/template": "^7.8.3", "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-split-export-declaration": { @@ -477,21 +252,14 @@ "dev": true, "requires": { "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -502,60 +270,34 @@ "@babel/template": "^7.8.3", "@babel/traverse": "^7.8.3", "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==", + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -599,14 +341,25 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0" + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", + "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -620,9 +373,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -630,12 +383,12 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz", - "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-create-regexp-features-plugin": "^7.8.8", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -675,6 +428,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -729,28 +491,6 @@ "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-remap-async-to-generator": "^7.8.3" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-block-scoped-functions": { @@ -773,17 +513,17 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz", - "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-define-map": "^7.8.3", - "@babel/helper-function-name": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", "@babel/helper-optimise-call-expression": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", - "@babel/helper-replace-supers": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" } @@ -798,9 +538,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz", - "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -836,9 +576,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz", - "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -873,47 +613,47 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -946,12 +686,11 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz", - "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.8.3", "@babel/helper-get-function-arity": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3" } @@ -966,12 +705,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz", - "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { @@ -1041,27 +780,29 @@ } }, "@babel/preset-env": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", - "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.5.tgz", + "integrity": "sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.8.4", - "@babel/helper-compilation-targets": "^7.8.4", + "@babel/compat-data": "^7.9.0", + "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", "@babel/plugin-proposal-async-generator-functions": "^7.8.3", "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.5", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -1070,26 +811,26 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.5", "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.9.5", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-parameters": "^7.9.5", "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", "@babel/plugin-transform-reserved-words": "^7.8.3", "@babel/plugin-transform-shorthand-properties": "^7.8.3", "@babel/plugin-transform-spread": "^7.8.3", @@ -1097,188 +838,131 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.3", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.5", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", "semver": "^5.5.0" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", - "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", + "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", + "@babel/generator": "^7.9.5", + "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", - "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "@rollup/plugin-alias": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.0.1.tgz", - "integrity": "sha512-ReSy6iPl3GsWLMNeshXAfgItZFMoMOTYC7MZQQM5va4pqxiGgwl1xZUZfHW6zGyZPK+k8TBadxx+kdmepiUa+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.0.tgz", + "integrity": "sha512-IzoejtAqdfwAvx4D0bztAJFoL5Js36kJgnbO00zfI1B9jf9G80vWysyG0C4+E6w5uG5hz0EeetPpoBWKdNktCQ==", "dev": true, "requires": { "slash": "^3.0.0" } }, "@rollup/plugin-commonjs": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz", - "integrity": "sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", + "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.0", + "@rollup/pluginutils": "^3.0.8", + "commondir": "^1.0.1", "estree-walker": "^1.0.1", + "glob": "^7.1.2", "is-reference": "^1.1.2", "magic-string": "^0.25.2", "resolve": "^1.11.0" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "@rollup/plugin-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.2.tgz", - "integrity": "sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.3.tgz", + "integrity": "sha512-QMUT0HZNf4CX17LMdwaslzlYHUKTYGuuk34yYIgZrNdu+pMEfqMS55gck7HEeHBKXHM4cz5Dg1OVwythDdbbuQ==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.4" + "@rollup/pluginutils": "^3.0.8" } }, "@rollup/plugin-node-resolve": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz", - "integrity": "sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.6", + "@rollup/pluginutils": "^3.0.8", "@types/resolve": "0.0.8", "builtin-modules": "^3.1.0", "is-module": "^1.0.0", "resolve": "^1.14.2" - }, - "dependencies": { - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "@rollup/pluginutils": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.8.tgz", - "integrity": "sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", + "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", "dev": true, "requires": { - "estree-walker": "^1.0.1" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "micromatch": "^4.0.2" } }, "@types/estree": { @@ -1288,9 +972,9 @@ "dev": true }, "@types/node": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.1.tgz", - "integrity": "sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==", + "version": "13.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.2.tgz", + "integrity": "sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==", "dev": true }, "@types/resolve": { @@ -1301,46 +985,15 @@ "requires": { "@types/node": "*" } - }, - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", - "dev": true - }, - "amble": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/amble/-/amble-0.0.7.tgz", - "integrity": "sha512-+a947e5dICWr+cNNkws5PN3Z6qi7i/BvmtcRfsa2Ymzik4cghq1R/alewhdbejgj2IaXw5X/tgHCIkd4DyabNw==", - "dev": true, - "requires": { - "chalk": "2.4.0", - "gaze": "1.1.2", - "shelljs": "0.8.1" - }, - "dependencies": { - "chalk": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", - "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "shelljs": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", - "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - } + }, + "amble": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/amble/-/amble-1.0.0.tgz", + "integrity": "sha512-dUEuYiSe3bDYxt1gL/FWSlnS9E0GkHntnrC1gBWtRZaNHiwFy1c3sPSJYN+3Rf8qX63RdLYnEfwPZMoGnlOZOQ==", + "dev": true, + "requires": { + "chokidar": "^3.3.1", + "colorette": "^1.1.0" } }, "ansi-styles": { @@ -1352,10 +1005,35 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" @@ -1367,6 +1045,12 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1377,15 +1061,25 @@ "concat-map": "0.0.1" } }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "browserslist": { - "version": "4.8.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", - "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001023", - "electron-to-chromium": "^1.3.341", - "node-releases": "^1.1.47" + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer-from": { @@ -1407,9 +1101,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001027", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001027.tgz", - "integrity": "sha512-7xvKeErvXZFtUItTHgNtLgS9RJpVnwBlWX8jSo/BO8VsF6deszemZSkJJJA1KOKrXuzZH4WALpAJdq5EyfgMLg==", + "version": "1.0.30001046", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001046.tgz", + "integrity": "sha512-CsGjBRYWG6FvgbyGy+hBbaezpwiqIOLkxQPY4A4Ea49g1eNsnQuESB+n4QM0BKii1j80MyJ26Ir5ywTQkbRE4g==", "dev": true }, "chalk": { @@ -1423,6 +1117,22 @@ "supports-color": "^5.3.0" } }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1438,12 +1148,24 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "colorette": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", + "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==", + "dev": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1460,12 +1182,12 @@ } }, "core-js-compat": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz", - "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "^4.8.3", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -1493,17 +1215,33 @@ } }, "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", + "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", "dev": true, "requires": { + "es-abstract": "^1.17.5", + "es-get-iterator": "^1.1.0", "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", + "is-date-object": "^1.0.2", + "is-regex": "^1.0.5", + "isarray": "^2.0.5", + "object-is": "^1.1.2", "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "object.assign": "^4.1.0", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } } }, "define-properties": { @@ -1542,15 +1280,15 @@ "integrity": "sha512-9xUSSj7qcUxz+0r4X3+bwUNttEfGfK5AH+LVa1aTpqdAfrN5VhROYCfcF+up4hp5OL7IUKcZJJrzAGipQRDoiQ==" }, "electron-to-chromium": { - "version": "1.3.348", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.348.tgz", - "integrity": "sha512-6O0IInybavGdYtcbI4ryF/9e3Qi8/soi6C68ELRseJuTwQPKq39uGgVVeQHG28t69Sgsky09nXBRhUiFXsZyFQ==", + "version": "1.3.418", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz", + "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==", "dev": true }, "es-abstract": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.3.tgz", - "integrity": "sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -1566,6 +1304,29 @@ "string.prototype.trimright": "^2.1.1" } }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -1584,9 +1345,9 @@ "dev": true }, "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, "esutils": { @@ -1595,6 +1356,24 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -1604,27 +1383,31 @@ "is-callable": "^1.1.3" } }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -1632,9 +1415,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1645,23 +1428,21 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1720,6 +1501,27 @@ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", "dev": true }, + "is-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", + "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "dev": true + }, "is-callable": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", @@ -1732,12 +1534,45 @@ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, "is-reference": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", @@ -1756,6 +1591,18 @@ "has": "^1.0.3" } }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -1765,6 +1612,30 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", + "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.0", + "es-abstract": "^1.17.4", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1805,12 +1676,12 @@ "dev": true }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "leven": { @@ -1828,6 +1699,16 @@ "leven": "^3.1.0" } }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -1844,9 +1725,9 @@ } }, "magic-string": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.6.tgz", - "integrity": "sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g==", + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" @@ -1858,6 +1739,16 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1868,9 +1759,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "ms": { @@ -1880,21 +1771,16 @@ "dev": true }, "node-releases": { - "version": "1.1.48", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.48.tgz", - "integrity": "sha512-Hr8BbmUl1ujAST0K0snItzEA5zkJTQup8VNTKNfT6Zw8vTJkIiagUPNfxHmgDOyfFYNfKAul40sD0UEYTvwebw==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "object-inspect": { "version": "1.7.0", @@ -1903,10 +1789,14 @@ "dev": true }, "object-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", - "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } }, "object-keys": { "version": "1.1.1", @@ -1935,6 +1825,36 @@ "wrappy": "1" } }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1947,6 +1867,21 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -1959,6 +1894,15 @@ "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", "dev": true }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -1975,21 +1919,28 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" } }, "regexp.prototype.flags": { @@ -2003,17 +1954,17 @@ } }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { @@ -2023,9 +1974,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz", - "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -2040,12 +1991,12 @@ } }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resumer": { @@ -2058,20 +2009,18 @@ } }, "rollup": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.31.0.tgz", - "integrity": "sha512-9C6ovSyNeEwvuRuUUmsTpJcXac1AwSL1a3x+O5lpmQKZqi5mmrjauLeqIjvREC+yNRR8fPdzByojDng+af3nVw==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.7.2.tgz", + "integrity": "sha512-SdtTZVMMVSPe7SNv4exUyPXARe5v/p3TeeG3LRA5WabLPJt4Usi3wVrvVlyAUTG40JJmqS6zbIHt2vWTss2prw==", "dev": true, "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" + "fsevents": "~2.1.2" } }, "rollup-plugin-babel": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", - "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -2085,9 +2034,9 @@ "dev": true }, "rollup-plugin-terser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz", - "integrity": "sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", + "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", @@ -2104,6 +2053,14 @@ "dev": true, "requires": { "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } }, "safe-buffer": { @@ -2125,9 +2082,9 @@ "dev": true }, "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { "glob": "^7.0.0", @@ -2135,6 +2092,16 @@ "rechoir": "^0.6.2" } }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2148,9 +2115,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -2191,24 +2158,46 @@ "function-bind": "^1.1.1" } }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "dev": true, "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "supports-color": { @@ -2275,63 +2264,42 @@ } }, "tape": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.0.tgz", - "integrity": "sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw==", - "dev": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.0", - "object-inspect": "~1.7.0", - "resolve": "~1.14.2", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.0.0.tgz", + "integrity": "sha512-+fi4WiHuvxpKL6GpcvnG5PXfzopgw9h1JM9CJdpEPAbyU3r3VjRgt059fD6Up2/u6BQXmmxKmUMm6mXQP+HS3w==", + "dev": true, + "requires": { + "deep-equal": "^2.0.3", + "defined": "^1.0.0", + "dotignore": "^0.1.2", + "for-each": "^0.3.3", + "function-bind": "^1.1.1", + "glob": "^7.1.6", + "has": "^1.0.3", + "inherits": "^2.0.4", + "is-regex": "^1.0.5", + "minimist": "^1.2.5", + "object-inspect": "^1.7.0", + "object-is": "^1.1.2", + "object.assign": "^4.1.0", + "resolve": "^1.17.0", + "resumer": "^0.0.0", + "string.prototype.trim": "^1.2.1", + "through": "^2.3.8" }, "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true - }, - "resolve": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", - "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } } } }, "terser": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", - "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "version": "4.6.12", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz", + "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==", "dev": true, "requires": { "commander": "^2.20.0", @@ -2359,6 +2327,15 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -2382,15 +2359,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "util-deprecate": { @@ -2399,6 +2376,45 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "which-boxed-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", + "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", + "dev": true, + "requires": { + "is-bigint": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-symbol": "^1.0.2" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", + "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "es-abstract": "^1.17.5", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 2ab761f73..ac4a0c92a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Spencer Kelly (http://spencermounta.in)", "name": "compromise", "description": "modest natural language processing", - "version": "13.1.1", + "version": "13.2.0", "main": "./builds/compromise.js", "unpkg": "./builds/compromise.min.js", "module": "./builds/compromise.mjs", @@ -54,21 +54,21 @@ "efrt-unpack": "2.2.0" }, "devDependencies": { - "@babel/core": "7.8.4", - "@babel/preset-env": "7.8.4", - "@rollup/plugin-alias": "3.0.1", - "@rollup/plugin-commonjs": "11.0.2", - "@rollup/plugin-json": "4.0.2", - "@rollup/plugin-node-resolve": "7.1.1", - "amble": "0.0.7", + "@babel/core": "7.9.0", + "@babel/preset-env": "7.9.5", + "@rollup/plugin-alias": "3.1.0", + "@rollup/plugin-commonjs": "11.1.0", + "@rollup/plugin-json": "4.0.3", + "@rollup/plugin-node-resolve": "7.1.3", + "amble": "1.0.0", "efrt": "2.2.2", - "rollup": "1.31.0", - "rollup-plugin-babel": "4.3.3", + "rollup": "2.7.2", + "rollup-plugin-babel": "4.4.0", "rollup-plugin-filesize-check": "0.0.1", - "rollup-plugin-terser": "5.2.0", - "shelljs": "0.8.3", + "rollup-plugin-terser": "5.3.0", + "shelljs": "0.8.4", "tap-dancer": "0.2.0", - "tape": "4.13.0" + "tape": "5.0.0" }, "eslintIgnore": [ "builds/*.js", diff --git a/rollup.config.js b/rollup.config.js index 5ecdb101a..8d33e8b8d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -41,7 +41,7 @@ export default [ ], }), terser(), - sizeCheck({ expect: 96, warn: 5 }), + sizeCheck({ expect: 82, warn: 5 }), ], }, { diff --git a/scratch.js b/scratch.js index 7e82a3fce..bdcced6c8 100644 --- a/scratch.js +++ b/scratch.js @@ -3,6 +3,6 @@ nlp.verbose(true) // let txt = require('./scripts/test/speed/_sotu-text.js') // nlp.extend(require('./plugins/numbers/src')) -// nlp(`the only reason`).debug() -nlp(`They cite a lack of imbalances that provide early warning signals of a downturn.`).debug() -// nlp(`he doesn't continue is because`).verbs().toPastTense().debug() +let doc = nlp(`he doesn't continue is because`) +doc.verbs().toPastTense() +doc.debug() diff --git a/src/02-tagger/04-correction/matches/03-noun.js b/src/02-tagger/04-correction/matches/03-noun.js index 105ebfe82..bf40e2db6 100644 --- a/src/02-tagger/04-correction/matches/03-noun.js +++ b/src/02-tagger/04-correction/matches/03-noun.js @@ -94,7 +94,7 @@ module.exports = [ //is mark hughes { match: '#Copula [#Infinitive] #Noun', group: 0, tag: 'Noun', reason: 'is-pres-noun' }, // - { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' }, + // { match: '[#Infinitive] #Copula', group: 0, tag: 'Noun', reason: 'inf-copula' }, //a close { match: '#Determiner #Adverb? [close]', group: 0, tag: 'Adjective', reason: 'a-close' }, // what the hell diff --git a/src/Subset/Verbs/index.js b/src/Subset/Verbs/index.js index b7a57b66a..041e46855 100644 --- a/src/Subset/Verbs/index.js +++ b/src/Subset/Verbs/index.js @@ -1,6 +1,6 @@ const methods = require('./methods') -const addMethod = function(Doc) { +const addMethod = function (Doc) { /** */ class Verbs extends Doc {} // add-in our methods @@ -9,7 +9,7 @@ const addMethod = function(Doc) { // aliases Verbs.prototype.negate = Verbs.prototype.toNegative - Doc.prototype.verbs = function(n) { + Doc.prototype.verbs = function (n) { let match = this.match('(#Adverb|#Auxiliary|#Verb|#Negative|#Particle)+') // try to ignore leading and trailing adverbs match = match.not('^#Adverb+') @@ -27,6 +27,11 @@ const addMethod = function(Doc) { //ensure there's actually a verb m = m.if('#Verb') + // the reason he will is ... + if (m.has('(is|was)$')) { + m = m.splitBefore('(is|was)$') + } + //grab (n)th result if (typeof n === 'number') { m = m.get(n) diff --git a/src/_version.js b/src/_version.js index ebf8ad1b1..b05c55cf9 100644 --- a/src/_version.js +++ b/src/_version.js @@ -1 +1 @@ -module.exports = '13.1.1' \ No newline at end of file +module.exports = '13.2.0' \ No newline at end of file diff --git a/tests/misc.test.js b/tests/misc.test.js index 5aeaebb8f..59b3870d1 100644 --- a/tests/misc.test.js +++ b/tests/misc.test.js @@ -31,6 +31,7 @@ test('barely a term', function (t) { t.end() }) +//#744 test('replacement with a contraction', function (t) { let doc = nlp('a b c d') t.equal(doc.text(), 'a b c d', 'before replace') @@ -39,7 +40,7 @@ test('replacement with a contraction', function (t) { doc = nlp("The only reason he doesn't continue is because of how tired he feels.", { reason: 'Noun' }) doc.verbs().toPastTense() - t.equal(doc.text(), "The only reason he didn't continue is because of how tired he felt.", 'conjugate-contraction') + t.equal(doc.text(), 'The only reason he did not continue was because of how tired he felt.', 'conjugate-contraction') t.end() }) From ee261d3eeeba580db466d8db5d78681775fbb28e Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:36:05 -0400 Subject: [PATCH 21/24] publish redact and numbers plugins --- plugins/numbers/builds/compromise-numbers.js | 145 +++++++++++++----- .../numbers/builds/compromise-numbers.js.map | 2 +- .../numbers/builds/compromise-numbers.min.js | 2 +- plugins/numbers/builds/compromise-numbers.mjs | 145 +++++++++++++----- plugins/numbers/package.json | 2 +- plugins/redact/builds/compromise-redact.js | 6 +- plugins/redact/builds/compromise-redact.mjs | 2 +- plugins/redact/package.json | 2 +- plugins/redact/rollup.config.js | 76 +++++++++ 9 files changed, 294 insertions(+), 88 deletions(-) create mode 100644 plugins/redact/rollup.config.js diff --git a/plugins/numbers/builds/compromise-numbers.js b/plugins/numbers/builds/compromise-numbers.js index 2579aede4..257a4bc52 100644 --- a/plugins/numbers/builds/compromise-numbers.js +++ b/plugins/numbers/builds/compromise-numbers.js @@ -1,4 +1,4 @@ -/* compromise-numbers 0.0.5 MIT */ +/* compromise-numbers 1.0.0 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -42,6 +42,19 @@ return _setPrototypeOf(o, p); } + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } + } + function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); @@ -58,6 +71,23 @@ return _assertThisInitialized(self); } + function _createSuper(Derived) { + return function () { + var Super = _getPrototypeOf(Derived), + result; + + if (_isNativeReflectConstruct()) { + var NewTarget = _getPrototypeOf(this).constructor; + + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + + return _possibleConstructorReturn(this, result); + }; + } + var tens = 'twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty'; var teens = 'eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen'; // this is a bit of a mess @@ -919,7 +949,10 @@ /** two of what? */ units: function units() { - return this.lookAhead('^(#Unit|#Noun)'); + var m = this.lookAhead('(#Unit|#Noun)+'); + m = m.splitAfter('@hasComma').first(); + m = m.not('#Pronoun'); + return m.first(); }, /** return only ordinal numbers */ @@ -1075,6 +1108,7 @@ } var str = makeNumber_1(obj, val.has('#TextValue'), val.has('#Ordinal')); + val = val.not('#Currency'); val.replaceWith(str, true); // handle plural/singular unit _agreeUnits(agree, val, obj); @@ -1099,6 +1133,7 @@ obj.num += n; var str = makeNumber_1(obj, val.has('#TextValue'), val.has('#Ordinal')); + val = val.not('#Currency'); val.replaceWith(str, true); // handle plural/singular unit _agreeUnits(agree, val, obj); @@ -1122,18 +1157,6 @@ this.add(-1, agree); return this; }, - /// ---- - - /** return things like 1/3rd */ - fractions: function fractions(n) { - var m = this.match('#Fraction'); - - if (typeof n === 'number') { - m = m.get(n); - } - - return m; - }, /** return things like CCXX*/ romanNumerals: function romanNumerals(n) { @@ -1143,19 +1166,6 @@ m = m.get(n); } - return m; - }, - - /** return things like $4.50*/ - money: function money(n) { - var m = this.splitOn('@hasComma'); - m = m.match('#Money+ #Currency?'); - m = m.numbers(); - - if (typeof n === 'number') { - m = m.get(n); - } - return m; } }; // aliases @@ -1179,7 +1189,10 @@ doc.match('#Value and a (half|quarter)').tag('Value', 'value-and-a-half'); //one hundred and seven dollars - doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money'); + doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money'); // doc.debug() + // $5.032 is invalid money + + doc.match('#Money').not('#TextValue').match('/\\.[0-9]{3}$/').unTag('#Money', 'three-decimal money'); }; var tagger_1 = tagger; @@ -1195,22 +1208,22 @@ /** adds .numbers() method */ - var addMethod = function addMethod(Doc, world) { + var plugin = function plugin(Doc, world) { // add tags to our tagset world.addTags(tags); // additional tagging before running the number-parser world.postProcess(tagger_1); /** a list of number values, and their units */ - var Numbers = - /*#__PURE__*/ - function (_Doc) { + var Numbers = /*#__PURE__*/function (_Doc) { _inherits(Numbers, _Doc); + var _super = _createSuper(Numbers); + function Numbers() { _classCallCheck(this, Numbers); - return _possibleConstructorReturn(this, _getPrototypeOf(Numbers).apply(this, arguments)); + return _super.apply(this, arguments); } return Numbers; @@ -1218,19 +1231,71 @@ Object.assign(Numbers.prototype, methods_1); - /** find all numbers and values */ - Doc.prototype.numbers = function (n) { - var match = find(this, n); - return new Numbers(match.list, this, this.world); - }; // alias for reverse-compatibility + var Money = /*#__PURE__*/function (_Numbers) { + _inherits(Money, _Numbers); + + var _super2 = _createSuper(Money); + function Money() { + _classCallCheck(this, Money); + + return _super2.apply(this, arguments); + } + + return Money; + }(Numbers); + + var Fraction = /*#__PURE__*/function (_Numbers2) { + _inherits(Fraction, _Numbers2); + + var _super3 = _createSuper(Fraction); + + function Fraction() { + _classCallCheck(this, Fraction); + + return _super3.apply(this, arguments); + } + + return Fraction; + }(Numbers); + + var docMethods = { + /** find all numbers and values */ + numbers: function numbers(n) { + var m = find(this, n); + return new Numbers(m.list, this, this.world); + }, + + /** numbers that are percentages*/ + percentages: function percentages(n) { + var m = find(this, n); + m = m["if"]('/%$/'); + return new Numbers(m.list, this, this.world); + }, + + /** number + currency pair */ + money: function money(n) { + // let nums = findNumbers(this, n) + var m = this.match('#Money+ #Currency?'); // m = m.concat(nums.hasAfter('#Currency')) //'5 dollars' + + return new Money(m.list, this, this.world); + }, + fractions: function fractions(n) { + var nums = find(this, n); + var m = nums["if"]('#Fraction'); //2/3 + + return new Fraction(m.list, this, this.world); + } + }; // aliases - Doc.prototype.values = Doc.prototype.numbers; + docMethods.values = docMethods.numbers; + docMethods.percents = docMethods.percentages; + Object.assign(Doc.prototype, docMethods); return Doc; }; - var src = addMethod; + var src = plugin; return src; diff --git a/plugins/numbers/builds/compromise-numbers.js.map b/plugins/numbers/builds/compromise-numbers.js.map index 7a46a5de0..2cc97eb72 100644 --- a/plugins/numbers/builds/compromise-numbers.js.map +++ b/plugins/numbers/builds/compromise-numbers.js.map @@ -1 +1 @@ -{"version":3,"file":"compromise-numbers.js","sources":["../src/find.js","../src/convert/toNumber/findModifiers.js","../src/convert/toNumber/data.js","../src/convert/toNumber/validate.js","../src/convert/toNumber/parseDecimals.js","../src/convert/toNumber/parseNumeric.js","../src/convert/toNumber/index.js","../src/parse.js","../src/_agreeUnits.js","../src/convert/_toString.js","../src/convert/toText/index.js","../src/convert/toOrdinal/numOrdinal.js","../src/convert/toOrdinal/textOrdinal.js","../src/convert/_symbols.js","../src/convert/makeNumber.js","../src/methods.js","../src/tagger.js","../src/tags.js","../src/index.js"],"sourcesContent":["const tens = 'twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty'\nconst teens = 'eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen'\n\n// this is a bit of a mess\nconst findNumbers = function(doc, n) {\n let match = doc.match('#Value+')\n\n //\"50 83\"\n if (match.has('#NumericValue #NumericValue')) {\n //a comma may mean two numbers\n if (match.has('#Value @hasComma #Value')) {\n match.splitAfter('@hasComma')\n } else {\n match = match.splitAfter('#NumericValue')\n }\n }\n //three-length\n if (match.has('#Value #Value #Value') && !match.has('#Multiple')) {\n //twenty-five-twenty\n if (match.has('(' + tens + ') #Cardinal #Cardinal')) {\n match = match.splitAfter('(' + tens + ') #Cardinal')\n }\n }\n\n //two-length ones\n if (match.has('#Value #Value')) {\n //june 21st 1992 is two seperate values\n if (match.has('#NumericValue #NumericValue')) {\n match = match.splitOn('#Year')\n }\n //sixty fifteen\n if (match.has('(' + tens + ') (' + teens + ')')) {\n match = match.splitAfter('(' + tens + ')')\n }\n //\"72 82\"\n let double = match.match('#Cardinal #Cardinal')\n if (double.found && !match.has('(point|decimal)')) {\n //not 'two hundred'\n if (!double.has('#Cardinal (#Multiple|point|decimal)')) {\n //one proper way, 'twenty one', or 'hundred one'\n if (!double.has('(' + tens + ') #Cardinal') && !double.has('#Multiple #Value')) {\n // double = double.firstTerm()\n double.terms().forEach(d => {\n match = match.splitOn(d)\n })\n }\n }\n }\n //seventh fifth\n if (match.match('#Ordinal #Ordinal').match('#TextValue').found && !match.has('#Multiple')) {\n //the one proper way, 'twenty first'\n if (!match.has('(' + tens + ') #Ordinal')) {\n match = match.splitAfter('#Ordinal')\n }\n }\n //fifth five\n if (match.has('#Ordinal #Cardinal')) {\n match = match.splitBefore('#Cardinal+')\n }\n //five 2017 (support '5 hundred', and 'twenty 5'\n if (match.has('#TextValue #NumericValue') && !match.has('(' + tens + '|#Multiple)')) {\n match = match.splitBefore('#NumericValue+')\n }\n }\n //5-8\n if (match.has('#NumberRange')) {\n match = match.splitAfter('#NumberRange')\n }\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return match\n}\nmodule.exports = findNumbers\n","//support global multipliers, like 'half-million' by doing 'million' then multiplying by 0.5\nconst findModifiers = str => {\n const mults = [\n {\n reg: /^(minus|negative)[\\s\\-]/i,\n mult: -1,\n },\n {\n reg: /^(a\\s)?half[\\s\\-](of\\s)?/i,\n mult: 0.5,\n },\n // {\n // reg: /^(a\\s)?quarter[\\s\\-]/i,\n // mult: 0.25\n // }\n ]\n for (let i = 0; i < mults.length; i++) {\n if (mults[i].reg.test(str) === true) {\n return {\n amount: mults[i].mult,\n str: str.replace(mults[i].reg, ''),\n }\n }\n }\n return {\n amount: 1,\n str: str,\n }\n}\n\nmodule.exports = findModifiers\n","module.exports = {\n ones: {\n zeroth: 0,\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eighth: 8,\n ninth: 9,\n zero: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6,\n seven: 7,\n eight: 8,\n nine: 9,\n },\n teens: {\n tenth: 10,\n eleventh: 11,\n twelfth: 12,\n thirteenth: 13,\n fourteenth: 14,\n fifteenth: 15,\n sixteenth: 16,\n seventeenth: 17,\n eighteenth: 18,\n nineteenth: 19,\n ten: 10,\n eleven: 11,\n twelve: 12,\n thirteen: 13,\n fourteen: 14,\n fifteen: 15,\n sixteen: 16,\n seventeen: 17,\n eighteen: 18,\n nineteen: 19,\n },\n tens: {\n twentieth: 20,\n thirtieth: 30,\n fortieth: 40,\n fourtieth: 40,\n fiftieth: 50,\n sixtieth: 60,\n seventieth: 70,\n eightieth: 80,\n ninetieth: 90,\n twenty: 20,\n thirty: 30,\n forty: 40,\n fourty: 40,\n fifty: 50,\n sixty: 60,\n seventy: 70,\n eighty: 80,\n ninety: 90,\n },\n multiples: {\n hundredth: 100,\n thousandth: 1000,\n millionth: 1e6,\n billionth: 1e9,\n trillionth: 1e12,\n quadrillionth: 1e15,\n quintillionth: 1e18,\n sextillionth: 1e21,\n septillionth: 1e24,\n hundred: 100,\n thousand: 1000,\n million: 1e6,\n billion: 1e9,\n trillion: 1e12,\n quadrillion: 1e15,\n quintillion: 1e18,\n sextillion: 1e21,\n septillion: 1e24,\n grand: 1000,\n },\n}\n","const words = require('./data')\n\n//prevent things like 'fifteen ten', and 'five sixty'\nconst isValid = (w, has) => {\n if (words.ones.hasOwnProperty(w)) {\n if (has.ones || has.teens) {\n return false\n }\n } else if (words.teens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n } else if (words.tens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n }\n return true\n}\nmodule.exports = isValid\n","const words = require('./data')\n\n//concatenate into a string with leading '0.'\nconst parseDecimals = function(arr) {\n let str = '0.'\n for (let i = 0; i < arr.length; i++) {\n let w = arr[i]\n if (words.ones.hasOwnProperty(w) === true) {\n str += words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n str += words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n str += words.tens[w]\n } else if (/^[0-9]$/.test(w) === true) {\n str += w\n } else {\n return 0\n }\n }\n return parseFloat(str)\n}\n\nmodule.exports = parseDecimals\n","//parse a string like \"4,200.1\" into Number 4200.1\nconst parseNumeric = str => {\n //remove ordinal - 'th/rd'\n str = str.replace(/1st$/, '1')\n str = str.replace(/2nd$/, '2')\n str = str.replace(/3rd$/, '3')\n str = str.replace(/([4567890])r?th$/, '$1')\n //remove prefixes\n str = str.replace(/^[$€¥£¢]/, '')\n //remove suffixes\n str = str.replace(/[%$€¥£¢]$/, '')\n //remove commas\n str = str.replace(/,/g, '')\n //split '5kg' from '5'\n str = str.replace(/([0-9])([a-z\\u00C0-\\u00FF]{1,2})$/, '$1')\n return str\n}\n\nmodule.exports = parseNumeric\n","const findModifiers = require('./findModifiers')\nconst words = require('./data')\nconst isValid = require('./validate')\nconst parseDecimals = require('./parseDecimals')\nconst parseNumeric = require('./parseNumeric')\nconst improperFraction = /^([0-9,\\. ]+)\\/([0-9,\\. ]+)$/\n\n//some numbers we know\nconst casualForms = {\n // 'a few': 3,\n 'a couple': 2,\n 'a dozen': 12,\n 'two dozen': 24,\n zero: 0,\n}\n\n// a 'section' is something like 'fifty-nine thousand'\n// turn a section into something we can add to - like 59000\nconst section_sum = obj => {\n return Object.keys(obj).reduce((sum, k) => {\n sum += obj[k]\n return sum\n }, 0)\n}\n\n//turn a string into a number\nconst parse = function(str) {\n //convert some known-numbers\n if (casualForms.hasOwnProperty(str) === true) {\n return casualForms[str]\n }\n //'a/an' is 1\n if (str === 'a' || str === 'an') {\n return 1\n }\n const modifier = findModifiers(str)\n str = modifier.str\n let last_mult = null\n let has = {}\n let sum = 0\n let isNegative = false\n const terms = str.split(/[ -]/)\n for (let i = 0; i < terms.length; i++) {\n let w = terms[i]\n w = parseNumeric(w)\n if (!w || w === 'and') {\n continue\n }\n if (w === '-' || w === 'negative') {\n isNegative = true\n continue\n }\n if (w.charAt(0) === '-') {\n isNegative = true\n w = w.substr(1)\n }\n //decimal mode\n if (w === 'point') {\n sum += section_sum(has)\n sum += parseDecimals(terms.slice(i + 1, terms.length))\n sum *= modifier.amount\n return sum\n }\n //improper fraction\n const fm = w.match(improperFraction)\n if (fm) {\n const num = parseFloat(fm[1].replace(/[, ]/g, ''))\n const denom = parseFloat(fm[2].replace(/[, ]/g, ''))\n if (denom) {\n sum += num / denom || 0\n }\n continue\n }\n //prevent mismatched units, like 'seven eleven'\n if (isValid(w, has) === false) {\n return null\n }\n //buildOut section, collect 'has' values\n if (/^[0-9\\.]+$/.test(w)) {\n has['ones'] = parseFloat(w) //not technically right\n } else if (words.ones.hasOwnProperty(w) === true) {\n has['ones'] = words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n has['teens'] = words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n has['tens'] = words.tens[w]\n } else if (words.multiples.hasOwnProperty(w) === true) {\n let mult = words.multiples[w]\n\n //something has gone wrong : 'two hundred five hundred'\n if (mult === last_mult) {\n return null\n }\n //support 'hundred thousand'\n //this one is tricky..\n if (mult === 100 && terms[i + 1] !== undefined) {\n // has['hundreds']=\n const w2 = terms[i + 1]\n if (words.multiples[w2]) {\n mult *= words.multiples[w2] //hundredThousand/hundredMillion\n i += 1\n }\n }\n //natural order of things\n //five thousand, one hundred..\n if (last_mult === null || mult < last_mult) {\n sum += (section_sum(has) || 1) * mult\n last_mult = mult\n has = {}\n } else {\n //maybe hundred .. thousand\n sum += section_sum(has)\n last_mult = mult\n sum = (sum || 1) * mult\n has = {}\n }\n }\n }\n //dump the remaining has values\n sum += section_sum(has)\n //post-process add modifier\n sum *= modifier.amount\n sum *= isNegative ? -1 : 1\n //dont return 0, if it went straight-through\n if (sum === 0 && Object.keys(has).length === 0) {\n return null\n }\n return sum\n}\n\nmodule.exports = parse\n","const toNumber = require('./convert/toNumber')\n\n// get a numeric value from this phrase\nconst parseNumber = function(p) {\n let str = p.text('reduced')\n // is it in '3,123' format?\n let hasComma = /[0-9],[0-9]/.test(p.text('text'))\n str = str.replace(/,/g, '')\n\n //parse a numeric-number (easy)\n let arr = str.split(/^([^0-9]*)([0-9.,]*)([^0-9]*)$/)\n if (arr && arr[2] && p.terms().length < 2) {\n let num = parseFloat(arr[2] || str)\n //ensure that num is an actual number\n if (typeof num !== 'number') {\n num = null\n }\n // strip an ordinal off the suffix\n let suffix = arr[3] || ''\n if (suffix === 'st' || suffix === 'nd' || suffix === 'rd' || suffix === 'th') {\n suffix = ''\n }\n // support M for million, k for thousand\n if (suffix === 'm' || suffix === 'M') {\n num *= 1000000\n suffix = ''\n }\n if (suffix === 'k' || suffix === 'k') {\n num *= 1000\n suffix = ''\n }\n return {\n hasComma: hasComma,\n prefix: arr[1] || '',\n num: num,\n suffix: suffix,\n }\n }\n //parse a text-numer (harder)\n let num = toNumber(str)\n return {\n hasComma: hasComma,\n prefix: '',\n num: num,\n suffix: '',\n }\n}\nmodule.exports = parseNumber\n","// handle 'one bottle', 'two bottles'\nconst agreeUnits = function(agree, val, obj) {\n if (agree === false) {\n return\n }\n let unit = val.lookAhead('^(#Unit|#Noun)')\n // don't do these\n if (unit.has('(#Address|#Money|#Percent)') || val.has('#Ordinal')) {\n return\n }\n if (obj.num === 1) {\n unit.nouns().toSingular()\n } else if (unit.has('#Singular')) {\n unit.nouns().toPlural()\n }\n}\nmodule.exports = agreeUnits\n","/**\n * turn big numbers, like 2.3e+22, into a string with a ton of trailing 0's\n * */\nconst numToString = function(n) {\n if (n < 1000000) {\n return String(n)\n }\n let str\n if (typeof n === 'number') {\n str = n.toFixed(0)\n } else {\n str = n\n }\n if (str.indexOf('e+') === -1) {\n return str\n }\n return str\n .replace('.', '')\n .split('e+')\n .reduce(function(p, b) {\n return p + Array(b - p.length + 2).join(0)\n })\n}\nmodule.exports = numToString\n// console.log(numToString(2.5e+22));\n","const toString = require('../_toString')\n/**\n * turns an integer/float into.ber, like 'fifty-five'\n */\n\nconst tens_mapping = [\n ['ninety', 90],\n ['eighty', 80],\n ['seventy', 70],\n ['sixty', 60],\n ['fifty', 50],\n ['forty', 40],\n ['thirty', 30],\n ['twenty', 20],\n]\nconst ones_mapping = [\n '',\n 'one',\n 'two',\n 'three',\n 'four',\n 'five',\n 'six',\n 'seven',\n 'eight',\n 'nine',\n 'ten',\n 'eleven',\n 'twelve',\n 'thirteen',\n 'fourteen',\n 'fifteen',\n 'sixteen',\n 'seventeen',\n 'eighteen',\n 'nineteen',\n]\n\nconst sequence = [\n [1e24, 'septillion'],\n [1e20, 'hundred sextillion'],\n [1e21, 'sextillion'],\n [1e20, 'hundred quintillion'],\n [1e18, 'quintillion'],\n [1e17, 'hundred quadrillion'],\n [1e15, 'quadrillion'],\n [1e14, 'hundred trillion'],\n [1e12, 'trillion'],\n [1e11, 'hundred billion'],\n [1e9, 'billion'],\n [1e8, 'hundred million'],\n [1e6, 'million'],\n [100000, 'hundred thousand'],\n [1000, 'thousand'],\n [100, 'hundred'],\n [1, 'one'],\n]\n\n//turn number into an array of magnitudes, like [[5, million], [2, hundred]]\nconst breakdown_magnitudes = function(num) {\n let working = num\n let have = []\n sequence.forEach(a => {\n if (num >= a[0]) {\n let howmany = Math.floor(working / a[0])\n working -= howmany * a[0]\n if (howmany) {\n have.push({\n unit: a[1],\n count: howmany,\n })\n }\n }\n })\n return have\n}\n\n//turn numbers from 100-0 into their text\nconst breakdown_hundred = function(num) {\n let arr = []\n if (num > 100) {\n return arr //something bad happened..\n }\n for (let i = 0; i < tens_mapping.length; i++) {\n if (num >= tens_mapping[i][1]) {\n num -= tens_mapping[i][1]\n arr.push(tens_mapping[i][0])\n }\n }\n //(hopefully) we should only have 20-0 now\n if (ones_mapping[num]) {\n arr.push(ones_mapping[num])\n }\n return arr\n}\n\n/** print-out 'point eight nine'*/\nconst handle_decimal = num => {\n const names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']\n let arr = []\n //parse it out like a string, because js math is such shit\n let str = toString(num)\n let decimal = str.match(/\\.([0-9]+)/)\n if (!decimal || !decimal[0]) {\n return arr\n }\n arr.push('point')\n let decimals = decimal[0].split('')\n for (let i = 0; i < decimals.length; i++) {\n arr.push(names[decimals[i]])\n }\n return arr\n}\n\n/** turns an integer into a textual number */\nconst to_text = function(num) {\n // handle zero, quickly\n if (num === 0 || num === '0') {\n return 'zero' // no?\n }\n //big numbers, north of sextillion, aren't gonna work well..\n //keep them small..\n if (num > 1e21) {\n num = toString(num)\n }\n let arr = []\n //handle negative numbers\n if (num < 0) {\n arr.push('minus')\n num = Math.abs(num)\n }\n //break-down into units, counts\n let units = breakdown_magnitudes(num)\n //build-up the string from its components\n for (let i = 0; i < units.length; i++) {\n let unit_name = units[i].unit\n if (unit_name === 'one') {\n unit_name = ''\n //put an 'and' in here\n if (arr.length > 1) {\n arr.push('and')\n }\n }\n arr = arr.concat(breakdown_hundred(units[i].count))\n arr.push(unit_name)\n }\n //also support decimals - 'point eight'\n arr = arr.concat(handle_decimal(num))\n //remove empties\n arr = arr.filter(s => s)\n if (arr.length === 0) {\n arr[0] = ''\n }\n return arr.join(' ')\n}\n\nmodule.exports = to_text\n\n// console.log(to_text(-1000.8));\n","const toString = require('../_toString')\n\n/**\n * turn a number like 5 into an ordinal like 5th\n */\nconst numOrdinal = function(num) {\n if (!num && num !== 0) {\n return null\n }\n //the teens are all 'th'\n let tens = num % 100\n if (tens > 10 && tens < 20) {\n return String(num) + 'th'\n }\n //the rest of 'em\n const mapping = {\n 0: 'th',\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n }\n let str = toString(num)\n let last = str.slice(str.length - 1, str.length)\n if (mapping[last]) {\n str += mapping[last]\n } else {\n str += 'th'\n }\n return str\n}\n\nmodule.exports = numOrdinal\n","const textValue = require('../toText')\n// const toString = require('../_toString')\n\nconst irregulars = {\n one: 'first',\n two: 'second',\n three: 'third',\n five: 'fifth',\n eight: 'eighth',\n nine: 'ninth',\n twelve: 'twelfth',\n twenty: 'twentieth',\n thirty: 'thirtieth',\n forty: 'fortieth',\n fourty: 'fourtieth',\n fifty: 'fiftieth',\n sixty: 'sixtieth',\n seventy: 'seventieth',\n eighty: 'eightieth',\n ninety: 'ninetieth',\n}\n\n/**\n * convert a javascript number to 'twentieth' format\n * */\nconst textOrdinal = num => {\n let words = textValue(num).split(' ')\n //convert the last number to an ordinal\n let last = words[words.length - 1]\n if (irregulars.hasOwnProperty(last)) {\n words[words.length - 1] = irregulars[last]\n } else {\n words[words.length - 1] = last.replace(/y$/, 'i') + 'th'\n }\n return words.join(' ')\n}\n\nmodule.exports = textOrdinal\n","const prefixes = {\n '¢': 'cents',\n $: 'dollars',\n '£': 'pounds',\n '¥': 'yen',\n '€': 'euros',\n '₡': 'colón',\n '฿': 'baht',\n '₭': 'kip',\n '₩': 'won',\n '₹': 'rupees',\n '₽': 'ruble',\n '₺': 'liras',\n}\nconst suffixes = {\n '%': 'percent',\n s: 'seconds',\n cm: 'centimetres',\n km: 'kilometres',\n}\nmodule.exports = {\n prefixes: prefixes,\n suffixes: suffixes,\n}\n","const toString = require('./_toString')\nconst toText = require('./toText')\nconst numOrdinal = require('./toOrdinal/numOrdinal')\nconst textOrdinal = require('./toOrdinal/textOrdinal')\nconst symbols = require('./_symbols')\nconst prefixes = symbols.prefixes\nconst suffixes = symbols.suffixes\n\nconst isCurrency = {\n usd: true,\n eur: true,\n jpy: true,\n gbp: true,\n cad: true,\n aud: true,\n chf: true,\n cny: true,\n hkd: true,\n nzd: true,\n kr: true,\n rub: true,\n}\n// convert $ to 'dollars', etc\nconst prefixToText = function(obj) {\n // turn 5% to 'five percent'\n if (prefixes.hasOwnProperty(obj.prefix)) {\n obj.suffix += prefixes[obj.prefix]\n obj.prefix = ''\n }\n //turn 5km to 'five kilometres'\n if (suffixes.hasOwnProperty(obj.suffix)) {\n obj.suffix = suffixes[obj.suffix]\n }\n //uppercase lost case for 'USD', etc\n if (isCurrency.hasOwnProperty(obj.suffix)) {\n obj.suffix = obj.suffix.toUpperCase()\n }\n // add a space, if it exists\n if (obj.suffix) {\n obj.suffix = ' ' + obj.suffix\n }\n return obj\n}\n\n//business-logic for converting a cardinal-number to other forms\nconst makeNumber = function(obj, isText, isOrdinal) {\n let num = String(obj.num)\n if (isText) {\n obj = prefixToText(obj)\n if (isOrdinal) {\n //ordinal-text\n num = textOrdinal(num)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n //cardinal-text\n num = toText(num)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n //ordinal-number\n if (isOrdinal) {\n num = numOrdinal(num)\n // support '5th percent'\n obj = prefixToText(obj)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n // support comma format\n if (obj.hasComma === true) {\n num = obj.num.toLocaleString()\n }\n // cardinal-number\n num = toString(num) // support very large numbers\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n}\nmodule.exports = makeNumber\n","const parseNumber = require('./parse')\nconst agreeUnits = require('./_agreeUnits')\nconst makeNumber = require('./convert/makeNumber')\nconst toNumber = require('./convert/toNumber')\n\nlet methods = {\n /** overloaded json method with additional number information */\n json: function(options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach(doc => {\n let json = doc.json(options)[0]\n let obj = parseNumber(doc)\n json.prefix = obj.prefix\n json.number = obj.num\n json.suffix = obj.suffix\n json.cardinal = makeNumber(obj, false, false)\n json.ordinal = makeNumber(obj, false, true)\n json.textCardinal = makeNumber(obj, true, false)\n json.textOrdinal = makeNumber(obj, true, true)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** two of what? */\n units: function() {\n return this.lookAhead('^(#Unit|#Noun)')\n },\n /** return only ordinal numbers */\n isOrdinal: function() {\n return this.if('#Ordinal')\n },\n /** return only cardinal numbers*/\n isCardinal: function() {\n return this.if('#Cardinal')\n },\n /** convert to numeric form like '8' or '8th' */\n toNumber: function() {\n this.forEach(val => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, false, val.has('#Ordinal'))\n val.replaceWith(str, true)\n val.tag('NumericValue')\n })\n return this\n },\n /** add commas, or nicer formatting for numbers */\n toLocaleString: function() {\n this.forEach(val => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n obj.num = obj.num.toLocaleString()\n let str = makeNumber(obj, false, val.has('#Ordinal'))\n val.replaceWith(str, true)\n })\n return this\n },\n /** convert to text form - like 'eight' or 'eigth'*/\n toText: function() {\n this.forEach(val => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, true, val.has('#Ordinal'))\n val.replaceWith(str, true)\n val.tag('TextValue')\n })\n return this\n },\n /** convert to cardinal form, like 'eight', or '8' */\n toCardinal: function(agree) {\n let m = this.if('#Ordinal')\n m.forEach(val => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), false)\n val.replaceWith(str, true)\n val.tag('Cardinal')\n // turn unit into plural -> 'seven beers'\n agreeUnits(agree, val, obj)\n })\n return this\n },\n /** convert to ordinal form, like 'eighth', or '8th' */\n toOrdinal: function() {\n let m = this.if('#Cardinal')\n m.forEach(val => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), true)\n val.replaceWith(str, true)\n val.tag('Ordinal')\n // turn unit into singular -> 'seventh beer'\n let unit = this.lookAhead('^#Plural')\n if (unit.found) {\n unit.nouns().toSingular()\n }\n })\n return this\n },\n /** return only numbers that are == n */\n isEqual: function(n) {\n return this.filter(val => {\n let num = parseNumber(val).num\n return num === n\n })\n },\n /** return only numbers that are > n*/\n greaterThan: function(n) {\n return this.filter(val => {\n let num = parseNumber(val).num\n return num > n\n })\n },\n /** return only numbers that are < n*/\n lessThan: function(n) {\n return this.filter(val => {\n let num = parseNumber(val).num\n return num < n\n })\n },\n /** return only numbers > min and < max */\n between: function(min, max) {\n return this.filter(val => {\n let num = parseNumber(val).num\n return num > min && num < max\n })\n },\n /** set these number to n */\n set: function(n, agree) {\n if (n === undefined) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = toNumber(n)\n }\n this.forEach(val => {\n let obj = parseNumber(val)\n obj.num = n\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal'))\n val.replaceWith(str, true)\n // handle plural/singular unit\n agreeUnits(agree, val, obj)\n })\n return this\n },\n add: function(n, agree) {\n if (!n) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = toNumber(n)\n }\n this.forEach(val => {\n let obj = parseNumber(val)\n\n if (obj.num === null) {\n return\n }\n obj.num += n\n let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal'))\n val.replaceWith(str, true)\n // handle plural/singular unit\n agreeUnits(agree, val, obj)\n })\n return this\n },\n /** decrease each number by n*/\n subtract: function(n, agree) {\n return this.add(n * -1, agree)\n },\n /** increase each number by 1 */\n increment: function(agree) {\n this.add(1, agree)\n return this\n },\n /** decrease each number by 1 */\n decrement: function(agree) {\n this.add(-1, agree)\n return this\n },\n\n /// ----\n\n /** return things like 1/3rd */\n fractions: function(n) {\n let m = this.match('#Fraction')\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n },\n\n /** return things like CCXX*/\n romanNumerals: function(n) {\n let m = this.match('#RomanNumeral').numbers()\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n },\n\n /** return things like $4.50*/\n money: function(n) {\n let m = this.splitOn('@hasComma')\n m = m.match('#Money+ #Currency?')\n m = m.numbers()\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n },\n}\n// aliases\nmethods.toNice = methods.toLocaleString\nmethods.isBetween = methods.between\nmethods.minus = methods.subtract\nmethods.plus = methods.add\nmethods.equals = methods.isEqual\n\nmodule.exports = methods\n","const multiples =\n '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n// improved tagging for numbers\nconst tagger = function(doc) {\n doc.match(multiples).tag('#Multiple')\n // in the 400s\n doc.match('the [/[0-9]+s$/]').tag('#Plural')\n //half a million\n doc.match('half a? #Value').tag('Value', 'half-a-value') //(quarter not ready)\n //five and a half\n doc.match('#Value and a (half|quarter)').tag('Value', 'value-and-a-half')\n //one hundred and seven dollars\n doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money')\n}\nmodule.exports = tagger\n","module.exports = {\n Fraction: {\n isA: 'Value',\n },\n Multiple: {\n isA: 'Value',\n },\n}\n","const findNumbers = require('./find')\nconst methods = require('./methods')\nconst tagger = require('./tagger')\nconst tags = require('./tags')\n\n/** adds .numbers() method */\nconst addMethod = function(Doc, world) {\n // add tags to our tagset\n world.addTags(tags)\n\n // additional tagging before running the number-parser\n world.postProcess(tagger)\n\n /** a list of number values, and their units */\n class Numbers extends Doc {}\n //aliases\n Object.assign(Numbers.prototype, methods)\n\n /** find all numbers and values */\n Doc.prototype.numbers = function(n) {\n let match = findNumbers(this, n)\n return new Numbers(match.list, this, this.world)\n }\n // alias for reverse-compatibility\n Doc.prototype.values = Doc.prototype.numbers\n return Doc\n}\nmodule.exports = addMethod\n"],"names":["tens","teens","findNumbers","doc","n","match","has","splitAfter","splitOn","double","found","terms","forEach","d","splitBefore","get","findModifiers","str","mults","reg","mult","i","length","test","amount","replace","ones","zeroth","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","zero","one","two","three","four","five","six","seven","eight","nine","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twentieth","thirtieth","fortieth","fourtieth","fiftieth","sixtieth","seventieth","eightieth","ninetieth","twenty","thirty","forty","fourty","fifty","sixty","seventy","eighty","ninety","multiples","hundredth","thousandth","millionth","billionth","trillionth","quadrillionth","quintillionth","sextillionth","septillionth","hundred","thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","grand","isValid","w","words","hasOwnProperty","parseDecimals","arr","parseFloat","parseNumeric","improperFraction","casualForms","section_sum","obj","Object","keys","reduce","sum","k","parse","modifier","last_mult","isNegative","split","charAt","substr","slice","fm","num","denom","undefined","w2","parseNumber","p","text","hasComma","suffix","prefix","toNumber","agreeUnits","agree","val","unit","lookAhead","nouns","toSingular","toPlural","numToString","String","toFixed","indexOf","b","Array","join","tens_mapping","ones_mapping","sequence","breakdown_magnitudes","working","have","a","howmany","Math","floor","push","count","breakdown_hundred","handle_decimal","names","toString","decimal","decimals","to_text","abs","units","unit_name","concat","filter","s","numOrdinal","mapping","last","irregulars","textOrdinal","textValue","prefixes","$","suffixes","cm","km","symbols","isCurrency","usd","eur","jpy","gbp","cad","aud","chf","cny","hkd","nzd","kr","rub","prefixToText","toUpperCase","makeNumber","isText","isOrdinal","toText","toLocaleString","methods","json","options","normal","trim","res","number","cardinal","ordinal","textCardinal","isCardinal","replaceWith","tag","toCardinal","m","toOrdinal","isEqual","greaterThan","lessThan","between","min","max","set","add","subtract","increment","decrement","fractions","romanNumerals","numbers","money","toNice","isBetween","minus","plus","equals","tagger","Fraction","isA","Multiple","addMethod","Doc","world","addTags","tags","postProcess","Numbers","assign","prototype","list","values"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"compromise-numbers.js","sources":["../src/find.js","../src/convert/toNumber/findModifiers.js","../src/convert/toNumber/data.js","../src/convert/toNumber/validate.js","../src/convert/toNumber/parseDecimals.js","../src/convert/toNumber/parseNumeric.js","../src/convert/toNumber/index.js","../src/parse.js","../src/_agreeUnits.js","../src/convert/_toString.js","../src/convert/toText/index.js","../src/convert/toOrdinal/numOrdinal.js","../src/convert/toOrdinal/textOrdinal.js","../src/convert/_symbols.js","../src/convert/makeNumber.js","../src/methods.js","../src/tagger.js","../src/tags.js","../src/index.js"],"sourcesContent":["const tens = 'twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty'\nconst teens = 'eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen'\n\n// this is a bit of a mess\nconst findNumbers = function(doc, n) {\n let match = doc.match('#Value+')\n\n //\"50 83\"\n if (match.has('#NumericValue #NumericValue')) {\n //a comma may mean two numbers\n if (match.has('#Value @hasComma #Value')) {\n match.splitAfter('@hasComma')\n } else {\n match = match.splitAfter('#NumericValue')\n }\n }\n //three-length\n if (match.has('#Value #Value #Value') && !match.has('#Multiple')) {\n //twenty-five-twenty\n if (match.has('(' + tens + ') #Cardinal #Cardinal')) {\n match = match.splitAfter('(' + tens + ') #Cardinal')\n }\n }\n\n //two-length ones\n if (match.has('#Value #Value')) {\n //june 21st 1992 is two seperate values\n if (match.has('#NumericValue #NumericValue')) {\n match = match.splitOn('#Year')\n }\n //sixty fifteen\n if (match.has('(' + tens + ') (' + teens + ')')) {\n match = match.splitAfter('(' + tens + ')')\n }\n //\"72 82\"\n let double = match.match('#Cardinal #Cardinal')\n if (double.found && !match.has('(point|decimal)')) {\n //not 'two hundred'\n if (!double.has('#Cardinal (#Multiple|point|decimal)')) {\n //one proper way, 'twenty one', or 'hundred one'\n if (!double.has('(' + tens + ') #Cardinal') && !double.has('#Multiple #Value')) {\n // double = double.firstTerm()\n double.terms().forEach(d => {\n match = match.splitOn(d)\n })\n }\n }\n }\n //seventh fifth\n if (match.match('#Ordinal #Ordinal').match('#TextValue').found && !match.has('#Multiple')) {\n //the one proper way, 'twenty first'\n if (!match.has('(' + tens + ') #Ordinal')) {\n match = match.splitAfter('#Ordinal')\n }\n }\n //fifth five\n if (match.has('#Ordinal #Cardinal')) {\n match = match.splitBefore('#Cardinal+')\n }\n //five 2017 (support '5 hundred', and 'twenty 5'\n if (match.has('#TextValue #NumericValue') && !match.has('(' + tens + '|#Multiple)')) {\n match = match.splitBefore('#NumericValue+')\n }\n }\n //5-8\n if (match.has('#NumberRange')) {\n match = match.splitAfter('#NumberRange')\n }\n //grab (n)th result\n if (typeof n === 'number') {\n match = match.get(n)\n }\n return match\n}\nmodule.exports = findNumbers\n","//support global multipliers, like 'half-million' by doing 'million' then multiplying by 0.5\nconst findModifiers = str => {\n const mults = [\n {\n reg: /^(minus|negative)[\\s\\-]/i,\n mult: -1,\n },\n {\n reg: /^(a\\s)?half[\\s\\-](of\\s)?/i,\n mult: 0.5,\n },\n // {\n // reg: /^(a\\s)?quarter[\\s\\-]/i,\n // mult: 0.25\n // }\n ]\n for (let i = 0; i < mults.length; i++) {\n if (mults[i].reg.test(str) === true) {\n return {\n amount: mults[i].mult,\n str: str.replace(mults[i].reg, ''),\n }\n }\n }\n return {\n amount: 1,\n str: str,\n }\n}\n\nmodule.exports = findModifiers\n","module.exports = {\n ones: {\n zeroth: 0,\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n fifth: 5,\n sixth: 6,\n seventh: 7,\n eighth: 8,\n ninth: 9,\n zero: 0,\n one: 1,\n two: 2,\n three: 3,\n four: 4,\n five: 5,\n six: 6,\n seven: 7,\n eight: 8,\n nine: 9,\n },\n teens: {\n tenth: 10,\n eleventh: 11,\n twelfth: 12,\n thirteenth: 13,\n fourteenth: 14,\n fifteenth: 15,\n sixteenth: 16,\n seventeenth: 17,\n eighteenth: 18,\n nineteenth: 19,\n ten: 10,\n eleven: 11,\n twelve: 12,\n thirteen: 13,\n fourteen: 14,\n fifteen: 15,\n sixteen: 16,\n seventeen: 17,\n eighteen: 18,\n nineteen: 19,\n },\n tens: {\n twentieth: 20,\n thirtieth: 30,\n fortieth: 40,\n fourtieth: 40,\n fiftieth: 50,\n sixtieth: 60,\n seventieth: 70,\n eightieth: 80,\n ninetieth: 90,\n twenty: 20,\n thirty: 30,\n forty: 40,\n fourty: 40,\n fifty: 50,\n sixty: 60,\n seventy: 70,\n eighty: 80,\n ninety: 90,\n },\n multiples: {\n hundredth: 100,\n thousandth: 1000,\n millionth: 1e6,\n billionth: 1e9,\n trillionth: 1e12,\n quadrillionth: 1e15,\n quintillionth: 1e18,\n sextillionth: 1e21,\n septillionth: 1e24,\n hundred: 100,\n thousand: 1000,\n million: 1e6,\n billion: 1e9,\n trillion: 1e12,\n quadrillion: 1e15,\n quintillion: 1e18,\n sextillion: 1e21,\n septillion: 1e24,\n grand: 1000,\n },\n}\n","const words = require('./data')\n\n//prevent things like 'fifteen ten', and 'five sixty'\nconst isValid = (w, has) => {\n if (words.ones.hasOwnProperty(w)) {\n if (has.ones || has.teens) {\n return false\n }\n } else if (words.teens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n } else if (words.tens.hasOwnProperty(w)) {\n if (has.ones || has.teens || has.tens) {\n return false\n }\n }\n return true\n}\nmodule.exports = isValid\n","const words = require('./data')\n\n//concatenate into a string with leading '0.'\nconst parseDecimals = function(arr) {\n let str = '0.'\n for (let i = 0; i < arr.length; i++) {\n let w = arr[i]\n if (words.ones.hasOwnProperty(w) === true) {\n str += words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n str += words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n str += words.tens[w]\n } else if (/^[0-9]$/.test(w) === true) {\n str += w\n } else {\n return 0\n }\n }\n return parseFloat(str)\n}\n\nmodule.exports = parseDecimals\n","//parse a string like \"4,200.1\" into Number 4200.1\nconst parseNumeric = str => {\n //remove ordinal - 'th/rd'\n str = str.replace(/1st$/, '1')\n str = str.replace(/2nd$/, '2')\n str = str.replace(/3rd$/, '3')\n str = str.replace(/([4567890])r?th$/, '$1')\n //remove prefixes\n str = str.replace(/^[$€¥£¢]/, '')\n //remove suffixes\n str = str.replace(/[%$€¥£¢]$/, '')\n //remove commas\n str = str.replace(/,/g, '')\n //split '5kg' from '5'\n str = str.replace(/([0-9])([a-z\\u00C0-\\u00FF]{1,2})$/, '$1')\n return str\n}\n\nmodule.exports = parseNumeric\n","const findModifiers = require('./findModifiers')\nconst words = require('./data')\nconst isValid = require('./validate')\nconst parseDecimals = require('./parseDecimals')\nconst parseNumeric = require('./parseNumeric')\nconst improperFraction = /^([0-9,\\. ]+)\\/([0-9,\\. ]+)$/\n\n//some numbers we know\nconst casualForms = {\n // 'a few': 3,\n 'a couple': 2,\n 'a dozen': 12,\n 'two dozen': 24,\n zero: 0,\n}\n\n// a 'section' is something like 'fifty-nine thousand'\n// turn a section into something we can add to - like 59000\nconst section_sum = obj => {\n return Object.keys(obj).reduce((sum, k) => {\n sum += obj[k]\n return sum\n }, 0)\n}\n\n//turn a string into a number\nconst parse = function(str) {\n //convert some known-numbers\n if (casualForms.hasOwnProperty(str) === true) {\n return casualForms[str]\n }\n //'a/an' is 1\n if (str === 'a' || str === 'an') {\n return 1\n }\n const modifier = findModifiers(str)\n str = modifier.str\n let last_mult = null\n let has = {}\n let sum = 0\n let isNegative = false\n const terms = str.split(/[ -]/)\n for (let i = 0; i < terms.length; i++) {\n let w = terms[i]\n w = parseNumeric(w)\n if (!w || w === 'and') {\n continue\n }\n if (w === '-' || w === 'negative') {\n isNegative = true\n continue\n }\n if (w.charAt(0) === '-') {\n isNegative = true\n w = w.substr(1)\n }\n //decimal mode\n if (w === 'point') {\n sum += section_sum(has)\n sum += parseDecimals(terms.slice(i + 1, terms.length))\n sum *= modifier.amount\n return sum\n }\n //improper fraction\n const fm = w.match(improperFraction)\n if (fm) {\n const num = parseFloat(fm[1].replace(/[, ]/g, ''))\n const denom = parseFloat(fm[2].replace(/[, ]/g, ''))\n if (denom) {\n sum += num / denom || 0\n }\n continue\n }\n //prevent mismatched units, like 'seven eleven'\n if (isValid(w, has) === false) {\n return null\n }\n //buildOut section, collect 'has' values\n if (/^[0-9\\.]+$/.test(w)) {\n has['ones'] = parseFloat(w) //not technically right\n } else if (words.ones.hasOwnProperty(w) === true) {\n has['ones'] = words.ones[w]\n } else if (words.teens.hasOwnProperty(w) === true) {\n has['teens'] = words.teens[w]\n } else if (words.tens.hasOwnProperty(w) === true) {\n has['tens'] = words.tens[w]\n } else if (words.multiples.hasOwnProperty(w) === true) {\n let mult = words.multiples[w]\n\n //something has gone wrong : 'two hundred five hundred'\n if (mult === last_mult) {\n return null\n }\n //support 'hundred thousand'\n //this one is tricky..\n if (mult === 100 && terms[i + 1] !== undefined) {\n // has['hundreds']=\n const w2 = terms[i + 1]\n if (words.multiples[w2]) {\n mult *= words.multiples[w2] //hundredThousand/hundredMillion\n i += 1\n }\n }\n //natural order of things\n //five thousand, one hundred..\n if (last_mult === null || mult < last_mult) {\n sum += (section_sum(has) || 1) * mult\n last_mult = mult\n has = {}\n } else {\n //maybe hundred .. thousand\n sum += section_sum(has)\n last_mult = mult\n sum = (sum || 1) * mult\n has = {}\n }\n }\n }\n //dump the remaining has values\n sum += section_sum(has)\n //post-process add modifier\n sum *= modifier.amount\n sum *= isNegative ? -1 : 1\n //dont return 0, if it went straight-through\n if (sum === 0 && Object.keys(has).length === 0) {\n return null\n }\n return sum\n}\n\nmodule.exports = parse\n","const toNumber = require('./convert/toNumber')\n\n// get a numeric value from this phrase\nconst parseNumber = function(p) {\n let str = p.text('reduced')\n // is it in '3,123' format?\n let hasComma = /[0-9],[0-9]/.test(p.text('text'))\n str = str.replace(/,/g, '')\n\n //parse a numeric-number (easy)\n let arr = str.split(/^([^0-9]*)([0-9.,]*)([^0-9]*)$/)\n if (arr && arr[2] && p.terms().length < 2) {\n let num = parseFloat(arr[2] || str)\n //ensure that num is an actual number\n if (typeof num !== 'number') {\n num = null\n }\n // strip an ordinal off the suffix\n let suffix = arr[3] || ''\n if (suffix === 'st' || suffix === 'nd' || suffix === 'rd' || suffix === 'th') {\n suffix = ''\n }\n // support M for million, k for thousand\n if (suffix === 'm' || suffix === 'M') {\n num *= 1000000\n suffix = ''\n }\n if (suffix === 'k' || suffix === 'k') {\n num *= 1000\n suffix = ''\n }\n return {\n hasComma: hasComma,\n prefix: arr[1] || '',\n num: num,\n suffix: suffix,\n }\n }\n //parse a text-numer (harder)\n let num = toNumber(str)\n return {\n hasComma: hasComma,\n prefix: '',\n num: num,\n suffix: '',\n }\n}\nmodule.exports = parseNumber\n","// handle 'one bottle', 'two bottles'\nconst agreeUnits = function(agree, val, obj) {\n if (agree === false) {\n return\n }\n let unit = val.lookAhead('^(#Unit|#Noun)')\n // don't do these\n if (unit.has('(#Address|#Money|#Percent)') || val.has('#Ordinal')) {\n return\n }\n if (obj.num === 1) {\n unit.nouns().toSingular()\n } else if (unit.has('#Singular')) {\n unit.nouns().toPlural()\n }\n}\nmodule.exports = agreeUnits\n","/**\n * turn big numbers, like 2.3e+22, into a string with a ton of trailing 0's\n * */\nconst numToString = function(n) {\n if (n < 1000000) {\n return String(n)\n }\n let str\n if (typeof n === 'number') {\n str = n.toFixed(0)\n } else {\n str = n\n }\n if (str.indexOf('e+') === -1) {\n return str\n }\n return str\n .replace('.', '')\n .split('e+')\n .reduce(function(p, b) {\n return p + Array(b - p.length + 2).join(0)\n })\n}\nmodule.exports = numToString\n// console.log(numToString(2.5e+22));\n","const toString = require('../_toString')\n/**\n * turns an integer/float into.ber, like 'fifty-five'\n */\n\nconst tens_mapping = [\n ['ninety', 90],\n ['eighty', 80],\n ['seventy', 70],\n ['sixty', 60],\n ['fifty', 50],\n ['forty', 40],\n ['thirty', 30],\n ['twenty', 20],\n]\nconst ones_mapping = [\n '',\n 'one',\n 'two',\n 'three',\n 'four',\n 'five',\n 'six',\n 'seven',\n 'eight',\n 'nine',\n 'ten',\n 'eleven',\n 'twelve',\n 'thirteen',\n 'fourteen',\n 'fifteen',\n 'sixteen',\n 'seventeen',\n 'eighteen',\n 'nineteen',\n]\n\nconst sequence = [\n [1e24, 'septillion'],\n [1e20, 'hundred sextillion'],\n [1e21, 'sextillion'],\n [1e20, 'hundred quintillion'],\n [1e18, 'quintillion'],\n [1e17, 'hundred quadrillion'],\n [1e15, 'quadrillion'],\n [1e14, 'hundred trillion'],\n [1e12, 'trillion'],\n [1e11, 'hundred billion'],\n [1e9, 'billion'],\n [1e8, 'hundred million'],\n [1e6, 'million'],\n [100000, 'hundred thousand'],\n [1000, 'thousand'],\n [100, 'hundred'],\n [1, 'one'],\n]\n\n//turn number into an array of magnitudes, like [[5, million], [2, hundred]]\nconst breakdown_magnitudes = function(num) {\n let working = num\n let have = []\n sequence.forEach(a => {\n if (num >= a[0]) {\n let howmany = Math.floor(working / a[0])\n working -= howmany * a[0]\n if (howmany) {\n have.push({\n unit: a[1],\n count: howmany,\n })\n }\n }\n })\n return have\n}\n\n//turn numbers from 100-0 into their text\nconst breakdown_hundred = function(num) {\n let arr = []\n if (num > 100) {\n return arr //something bad happened..\n }\n for (let i = 0; i < tens_mapping.length; i++) {\n if (num >= tens_mapping[i][1]) {\n num -= tens_mapping[i][1]\n arr.push(tens_mapping[i][0])\n }\n }\n //(hopefully) we should only have 20-0 now\n if (ones_mapping[num]) {\n arr.push(ones_mapping[num])\n }\n return arr\n}\n\n/** print-out 'point eight nine'*/\nconst handle_decimal = num => {\n const names = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']\n let arr = []\n //parse it out like a string, because js math is such shit\n let str = toString(num)\n let decimal = str.match(/\\.([0-9]+)/)\n if (!decimal || !decimal[0]) {\n return arr\n }\n arr.push('point')\n let decimals = decimal[0].split('')\n for (let i = 0; i < decimals.length; i++) {\n arr.push(names[decimals[i]])\n }\n return arr\n}\n\n/** turns an integer into a textual number */\nconst to_text = function(num) {\n // handle zero, quickly\n if (num === 0 || num === '0') {\n return 'zero' // no?\n }\n //big numbers, north of sextillion, aren't gonna work well..\n //keep them small..\n if (num > 1e21) {\n num = toString(num)\n }\n let arr = []\n //handle negative numbers\n if (num < 0) {\n arr.push('minus')\n num = Math.abs(num)\n }\n //break-down into units, counts\n let units = breakdown_magnitudes(num)\n //build-up the string from its components\n for (let i = 0; i < units.length; i++) {\n let unit_name = units[i].unit\n if (unit_name === 'one') {\n unit_name = ''\n //put an 'and' in here\n if (arr.length > 1) {\n arr.push('and')\n }\n }\n arr = arr.concat(breakdown_hundred(units[i].count))\n arr.push(unit_name)\n }\n //also support decimals - 'point eight'\n arr = arr.concat(handle_decimal(num))\n //remove empties\n arr = arr.filter(s => s)\n if (arr.length === 0) {\n arr[0] = ''\n }\n return arr.join(' ')\n}\n\nmodule.exports = to_text\n\n// console.log(to_text(-1000.8));\n","const toString = require('../_toString')\n\n/**\n * turn a number like 5 into an ordinal like 5th\n */\nconst numOrdinal = function(num) {\n if (!num && num !== 0) {\n return null\n }\n //the teens are all 'th'\n let tens = num % 100\n if (tens > 10 && tens < 20) {\n return String(num) + 'th'\n }\n //the rest of 'em\n const mapping = {\n 0: 'th',\n 1: 'st',\n 2: 'nd',\n 3: 'rd',\n }\n let str = toString(num)\n let last = str.slice(str.length - 1, str.length)\n if (mapping[last]) {\n str += mapping[last]\n } else {\n str += 'th'\n }\n return str\n}\n\nmodule.exports = numOrdinal\n","const textValue = require('../toText')\n// const toString = require('../_toString')\n\nconst irregulars = {\n one: 'first',\n two: 'second',\n three: 'third',\n five: 'fifth',\n eight: 'eighth',\n nine: 'ninth',\n twelve: 'twelfth',\n twenty: 'twentieth',\n thirty: 'thirtieth',\n forty: 'fortieth',\n fourty: 'fourtieth',\n fifty: 'fiftieth',\n sixty: 'sixtieth',\n seventy: 'seventieth',\n eighty: 'eightieth',\n ninety: 'ninetieth',\n}\n\n/**\n * convert a javascript number to 'twentieth' format\n * */\nconst textOrdinal = num => {\n let words = textValue(num).split(' ')\n //convert the last number to an ordinal\n let last = words[words.length - 1]\n if (irregulars.hasOwnProperty(last)) {\n words[words.length - 1] = irregulars[last]\n } else {\n words[words.length - 1] = last.replace(/y$/, 'i') + 'th'\n }\n return words.join(' ')\n}\n\nmodule.exports = textOrdinal\n","const prefixes = {\n '¢': 'cents',\n $: 'dollars',\n '£': 'pounds',\n '¥': 'yen',\n '€': 'euros',\n '₡': 'colón',\n '฿': 'baht',\n '₭': 'kip',\n '₩': 'won',\n '₹': 'rupees',\n '₽': 'ruble',\n '₺': 'liras',\n}\nconst suffixes = {\n '%': 'percent',\n s: 'seconds',\n cm: 'centimetres',\n km: 'kilometres',\n}\nmodule.exports = {\n prefixes: prefixes,\n suffixes: suffixes,\n}\n","const toString = require('./_toString')\nconst toText = require('./toText')\nconst numOrdinal = require('./toOrdinal/numOrdinal')\nconst textOrdinal = require('./toOrdinal/textOrdinal')\nconst symbols = require('./_symbols')\nconst prefixes = symbols.prefixes\nconst suffixes = symbols.suffixes\n\nconst isCurrency = {\n usd: true,\n eur: true,\n jpy: true,\n gbp: true,\n cad: true,\n aud: true,\n chf: true,\n cny: true,\n hkd: true,\n nzd: true,\n kr: true,\n rub: true,\n}\n// convert $ to 'dollars', etc\nconst prefixToText = function(obj) {\n // turn 5% to 'five percent'\n if (prefixes.hasOwnProperty(obj.prefix)) {\n obj.suffix += prefixes[obj.prefix]\n obj.prefix = ''\n }\n //turn 5km to 'five kilometres'\n if (suffixes.hasOwnProperty(obj.suffix)) {\n obj.suffix = suffixes[obj.suffix]\n }\n //uppercase lost case for 'USD', etc\n if (isCurrency.hasOwnProperty(obj.suffix)) {\n obj.suffix = obj.suffix.toUpperCase()\n }\n // add a space, if it exists\n if (obj.suffix) {\n obj.suffix = ' ' + obj.suffix\n }\n return obj\n}\n\n//business-logic for converting a cardinal-number to other forms\nconst makeNumber = function(obj, isText, isOrdinal) {\n let num = String(obj.num)\n if (isText) {\n obj = prefixToText(obj)\n if (isOrdinal) {\n //ordinal-text\n num = textOrdinal(num)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n //cardinal-text\n num = toText(num)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n //ordinal-number\n if (isOrdinal) {\n num = numOrdinal(num)\n // support '5th percent'\n obj = prefixToText(obj)\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n }\n // support comma format\n if (obj.hasComma === true) {\n num = obj.num.toLocaleString()\n }\n // cardinal-number\n num = toString(num) // support very large numbers\n return `${obj.prefix || ''}${num}${obj.suffix || ''}`\n}\nmodule.exports = makeNumber\n","const parseNumber = require('./parse')\nconst agreeUnits = require('./_agreeUnits')\nconst makeNumber = require('./convert/makeNumber')\nconst toNumber = require('./convert/toNumber')\n\nlet methods = {\n /** overloaded json method with additional number information */\n json: function (options) {\n let n = null\n if (typeof options === 'number') {\n n = options\n options = null\n }\n options = options || { text: true, normal: true, trim: true, terms: true }\n let res = []\n this.forEach((doc) => {\n let json = doc.json(options)[0]\n let obj = parseNumber(doc)\n json.prefix = obj.prefix\n json.number = obj.num\n json.suffix = obj.suffix\n json.cardinal = makeNumber(obj, false, false)\n json.ordinal = makeNumber(obj, false, true)\n json.textCardinal = makeNumber(obj, true, false)\n json.textOrdinal = makeNumber(obj, true, true)\n res.push(json)\n })\n if (n !== null) {\n return res[n]\n }\n return res\n },\n /** two of what? */\n units: function () {\n let m = this.lookAhead('(#Unit|#Noun)+')\n m = m.splitAfter('@hasComma').first()\n m = m.not('#Pronoun')\n return m.first()\n },\n /** return only ordinal numbers */\n isOrdinal: function () {\n return this.if('#Ordinal')\n },\n /** return only cardinal numbers*/\n isCardinal: function () {\n return this.if('#Cardinal')\n },\n /** convert to numeric form like '8' or '8th' */\n toNumber: function () {\n this.forEach((val) => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, false, val.has('#Ordinal'))\n val.replaceWith(str, true)\n val.tag('NumericValue')\n })\n return this\n },\n /** add commas, or nicer formatting for numbers */\n toLocaleString: function () {\n this.forEach((val) => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n obj.num = obj.num.toLocaleString()\n let str = makeNumber(obj, false, val.has('#Ordinal'))\n val.replaceWith(str, true)\n })\n return this\n },\n /** convert to text form - like 'eight' or 'eigth'*/\n toText: function () {\n this.forEach((val) => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, true, val.has('#Ordinal'))\n val.replaceWith(str, true)\n val.tag('TextValue')\n })\n return this\n },\n /** convert to cardinal form, like 'eight', or '8' */\n toCardinal: function (agree) {\n let m = this.if('#Ordinal')\n m.forEach((val) => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), false)\n val.replaceWith(str, true)\n val.tag('Cardinal')\n // turn unit into plural -> 'seven beers'\n agreeUnits(agree, val, obj)\n })\n return this\n },\n /** convert to ordinal form, like 'eighth', or '8th' */\n toOrdinal: function () {\n let m = this.if('#Cardinal')\n m.forEach((val) => {\n let obj = parseNumber(val)\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), true)\n val.replaceWith(str, true)\n val.tag('Ordinal')\n // turn unit into singular -> 'seventh beer'\n let unit = this.lookAhead('^#Plural')\n if (unit.found) {\n unit.nouns().toSingular()\n }\n })\n return this\n },\n /** return only numbers that are == n */\n isEqual: function (n) {\n return this.filter((val) => {\n let num = parseNumber(val).num\n return num === n\n })\n },\n /** return only numbers that are > n*/\n greaterThan: function (n) {\n return this.filter((val) => {\n let num = parseNumber(val).num\n return num > n\n })\n },\n /** return only numbers that are < n*/\n lessThan: function (n) {\n return this.filter((val) => {\n let num = parseNumber(val).num\n return num < n\n })\n },\n /** return only numbers > min and < max */\n between: function (min, max) {\n return this.filter((val) => {\n let num = parseNumber(val).num\n return num > min && num < max\n })\n },\n /** set these number to n */\n set: function (n, agree) {\n if (n === undefined) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = toNumber(n)\n }\n this.forEach((val) => {\n let obj = parseNumber(val)\n obj.num = n\n if (obj.num === null) {\n return\n }\n let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal'))\n val = val.not('#Currency')\n val.replaceWith(str, true)\n // handle plural/singular unit\n agreeUnits(agree, val, obj)\n })\n return this\n },\n add: function (n, agree) {\n if (!n) {\n return this // don't bother\n }\n if (typeof n === 'string') {\n n = toNumber(n)\n }\n this.forEach((val) => {\n let obj = parseNumber(val)\n\n if (obj.num === null) {\n return\n }\n obj.num += n\n let str = makeNumber(obj, val.has('#TextValue'), val.has('#Ordinal'))\n val = val.not('#Currency')\n val.replaceWith(str, true)\n // handle plural/singular unit\n agreeUnits(agree, val, obj)\n })\n return this\n },\n /** decrease each number by n*/\n subtract: function (n, agree) {\n return this.add(n * -1, agree)\n },\n /** increase each number by 1 */\n increment: function (agree) {\n this.add(1, agree)\n return this\n },\n /** decrease each number by 1 */\n decrement: function (agree) {\n this.add(-1, agree)\n return this\n },\n /** return things like CCXX*/\n romanNumerals: function (n) {\n let m = this.match('#RomanNumeral').numbers()\n if (typeof n === 'number') {\n m = m.get(n)\n }\n return m\n },\n}\n// aliases\nmethods.toNice = methods.toLocaleString\nmethods.isBetween = methods.between\nmethods.minus = methods.subtract\nmethods.plus = methods.add\nmethods.equals = methods.isEqual\n\nmodule.exports = methods\n","const multiples =\n '(hundred|thousand|million|billion|trillion|quadrillion|quintillion|sextillion|septillion)'\n\n// improved tagging for numbers\nconst tagger = function (doc) {\n doc.match(multiples).tag('#Multiple')\n // in the 400s\n doc.match('the [/[0-9]+s$/]').tag('#Plural')\n //half a million\n doc.match('half a? #Value').tag('Value', 'half-a-value') //(quarter not ready)\n //five and a half\n doc.match('#Value and a (half|quarter)').tag('Value', 'value-and-a-half')\n //one hundred and seven dollars\n doc.match('#Money and #Money #Currency?').tag('Money', 'money-and-money')\n // doc.debug()\n // $5.032 is invalid money\n doc\n .match('#Money')\n .not('#TextValue')\n .match('/\\\\.[0-9]{3}$/')\n .unTag('#Money', 'three-decimal money')\n}\nmodule.exports = tagger\n","module.exports = {\n Fraction: {\n isA: 'Value',\n },\n Multiple: {\n isA: 'Value',\n },\n}\n","const findNumbers = require('./find')\nconst methods = require('./methods')\nconst tagger = require('./tagger')\nconst tags = require('./tags')\n\n/** adds .numbers() method */\nconst plugin = function (Doc, world) {\n // add tags to our tagset\n world.addTags(tags)\n\n // additional tagging before running the number-parser\n world.postProcess(tagger)\n\n /** a list of number values, and their units */\n class Numbers extends Doc {}\n //aliases\n Object.assign(Numbers.prototype, methods)\n\n class Money extends Numbers {}\n class Fraction extends Numbers {}\n\n const docMethods = {\n /** find all numbers and values */\n numbers: function (n) {\n let m = findNumbers(this, n)\n return new Numbers(m.list, this, this.world)\n },\n /** numbers that are percentages*/\n percentages: function (n) {\n let m = findNumbers(this, n)\n m = m.if('/%$/')\n return new Numbers(m.list, this, this.world)\n },\n /** number + currency pair */\n money: function (n) {\n // let nums = findNumbers(this, n)\n let m = this.match('#Money+ #Currency?')\n // m = m.concat(nums.hasAfter('#Currency')) //'5 dollars'\n return new Money(m.list, this, this.world)\n },\n fractions: function (n) {\n let nums = findNumbers(this, n)\n let m = nums.if('#Fraction') //2/3\n return new Fraction(m.list, this, this.world)\n },\n }\n // aliases\n docMethods.values = docMethods.numbers\n docMethods.percents = docMethods.percentages\n\n Object.assign(Doc.prototype, docMethods)\n\n return Doc\n}\nmodule.exports = plugin\n"],"names":["tens","teens","findNumbers","doc","n","match","has","splitAfter","splitOn","double","found","terms","forEach","d","splitBefore","get","findModifiers","str","mults","reg","mult","i","length","test","amount","replace","ones","zeroth","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","zero","one","two","three","four","five","six","seven","eight","nine","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twentieth","thirtieth","fortieth","fourtieth","fiftieth","sixtieth","seventieth","eightieth","ninetieth","twenty","thirty","forty","fourty","fifty","sixty","seventy","eighty","ninety","multiples","hundredth","thousandth","millionth","billionth","trillionth","quadrillionth","quintillionth","sextillionth","septillionth","hundred","thousand","million","billion","trillion","quadrillion","quintillion","sextillion","septillion","grand","isValid","w","words","hasOwnProperty","parseDecimals","arr","parseFloat","parseNumeric","improperFraction","casualForms","section_sum","obj","Object","keys","reduce","sum","k","parse","modifier","last_mult","isNegative","split","charAt","substr","slice","fm","num","denom","undefined","w2","parseNumber","p","text","hasComma","suffix","prefix","toNumber","agreeUnits","agree","val","unit","lookAhead","nouns","toSingular","toPlural","numToString","String","toFixed","indexOf","b","Array","join","tens_mapping","ones_mapping","sequence","breakdown_magnitudes","working","have","a","howmany","Math","floor","push","count","breakdown_hundred","handle_decimal","names","toString","decimal","decimals","to_text","abs","units","unit_name","concat","filter","s","numOrdinal","mapping","last","irregulars","textOrdinal","textValue","prefixes","$","suffixes","cm","km","symbols","isCurrency","usd","eur","jpy","gbp","cad","aud","chf","cny","hkd","nzd","kr","rub","prefixToText","toUpperCase","makeNumber","isText","isOrdinal","toText","toLocaleString","methods","json","options","normal","trim","res","number","cardinal","ordinal","textCardinal","m","not","isCardinal","replaceWith","tag","toCardinal","toOrdinal","isEqual","greaterThan","lessThan","between","min","max","set","add","subtract","increment","decrement","romanNumerals","numbers","toNice","isBetween","minus","plus","equals","tagger","unTag","Fraction","isA","Multiple","plugin","Doc","world","addTags","tags","postProcess","Numbers","assign","prototype","Money","docMethods","list","percentages","money","fractions","nums","values","percents"],"mappings":"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"} \ No newline at end of file diff --git a/plugins/numbers/builds/compromise-numbers.min.js b/plugins/numbers/builds/compromise-numbers.min.js index 838dab85e..16e987736 100644 --- a/plugins/numbers/builds/compromise-numbers.min.js +++ b/plugins/numbers/builds/compromise-numbers.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).compromiseNumbers=t()}(this,(function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e){return(t=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function r(e,t){return!t||"object"!=typeof t&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}var i="twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|fourty",u=function(e,t){var n=e.match("#Value+");if(n.has("#NumericValue #NumericValue")&&(n.has("#Value @hasComma #Value")?n.splitAfter("@hasComma"):n=n.splitAfter("#NumericValue")),n.has("#Value #Value #Value")&&!n.has("#Multiple")&&n.has("("+i+") #Cardinal #Cardinal")&&(n=n.splitAfter("("+i+") #Cardinal")),n.has("#Value #Value")){n.has("#NumericValue #NumericValue")&&(n=n.splitOn("#Year")),n.has("("+i+") (eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen)")&&(n=n.splitAfter("("+i+")"));var r=n.match("#Cardinal #Cardinal");r.found&&!n.has("(point|decimal)")&&(r.has("#Cardinal (#Multiple|point|decimal)")||r.has("("+i+") #Cardinal")||r.has("#Multiple #Value")||r.terms().forEach((function(e){n=n.splitOn(e)}))),n.match("#Ordinal #Ordinal").match("#TextValue").found&&!n.has("#Multiple")&&(n.has("("+i+") #Ordinal")||(n=n.splitAfter("#Ordinal"))),n.has("#Ordinal #Cardinal")&&(n=n.splitBefore("#Cardinal+")),n.has("#TextValue #NumericValue")&&!n.has("("+i+"|#Multiple)")&&(n=n.splitBefore("#NumericValue+"))}return n.has("#NumberRange")&&(n=n.splitAfter("#NumberRange")),"number"==typeof t&&(n=n.get(t)),n},a=function(e){for(var t=[{reg:/^(minus|negative)[\s\-]/i,mult:-1},{reg:/^(a\s)?half[\s\-](of\s)?/i,mult:.5}],n=0;n100)return t;for(var n=0;n=g[n][1]&&(e-=g[n][1],t.push(g[n][0]));return x[e]&&t.push(x[e]),t},w=function(e){if(0===e||"0"===e)return"zero";e>1e21&&(e=v(e));var t=[];e<0&&(t.push("minus"),e=Math.abs(e));for(var n=function(e){var t=e,n=[];return O.forEach((function(r){if(e>=r[0]){var i=Math.floor(t/r[0]);t-=i*r[0],i&&n.push({unit:r[1],count:i})}})),n}(e),r=0;r1&&t.push("and")),(t=t.concat(b(n[r].count))).push(i)}return 0===(t=(t=t.concat(function(e){var t=["zero","one","two","three","four","five","six","seven","eight","nine"],n=[],r=v(e).match(/\.([0-9]+)/);if(!r||!r[0])return n;n.push("point");for(var i=r[0].split(""),u=0;u10&&t<20)return String(e)+"th";var n={0:"th",1:"st",2:"nd",3:"rd"},r=v(e),i=r.slice(r.length-1,r.length);return r+=n[i]?n[i]:"th"},C={one:"first",two:"second",three:"third",five:"fifth",eight:"eighth",nine:"ninth",twelve:"twelfth",twenty:"twentieth",thirty:"thirtieth",forty:"fortieth",fourty:"fourtieth",fifty:"fiftieth",sixty:"sixtieth",seventy:"seventieth",eighty:"eightieth",ninety:"ninetieth"},P=function(e){var t=w(e).split(" "),n=t[t.length-1];return C.hasOwnProperty(n)?t[t.length-1]=C[n]:t[t.length-1]=n.replace(/y$/,"i")+"th",t.join(" ")},N={"¢":"cents",$:"dollars","£":"pounds","¥":"yen","€":"euros","₡":"colón","฿":"baht","₭":"kip","₩":"won","₹":"rupees","₽":"ruble","₺":"liras"},$={"%":"percent",s:"seconds",cm:"centimetres",km:"kilometres"},j={usd:!0,eur:!0,jpy:!0,gbp:!0,cad:!0,aud:!0,chf:!0,cny:!0,hkd:!0,nzd:!0,kr:!0,rub:!0},E=function(e){return N.hasOwnProperty(e.prefix)&&(e.suffix+=N[e.prefix],e.prefix=""),$.hasOwnProperty(e.suffix)&&(e.suffix=$[e.suffix]),j.hasOwnProperty(e.suffix)&&(e.suffix=e.suffix.toUpperCase()),e.suffix&&(e.suffix=" "+e.suffix),e},M=function(e,t,n){var r=String(e.num);return t?(e=E(e),n?(r=P(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||"")):(r=w(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||""))):n?(r=V(r),e=E(e),"".concat(e.prefix||"").concat(r).concat(e.suffix||"")):(!0===e.hasComma&&(r=e.num.toLocaleString()),r=v(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||""))},q={json:function(e){var t=null;"number"==typeof e&&(t=e,e=null),e=e||{text:!0,normal:!0,trim:!0,terms:!0};var n=[];return this.forEach((function(t){var r=t.json(e)[0],i=m(t);r.prefix=i.prefix,r.number=i.num,r.suffix=i.suffix,r.cardinal=M(i,!1,!1),r.ordinal=M(i,!1,!0),r.textCardinal=M(i,!0,!1),r.textOrdinal=M(i,!0,!0),n.push(r)})),null!==t?n[t]:n},units:function(){return this.lookAhead("^(#Unit|#Noun)")},isOrdinal:function(){return this.if("#Ordinal")},isCardinal:function(){return this.if("#Cardinal")},toNumber:function(){return this.forEach((function(e){var t=m(e);if(null!==t.num){var n=M(t,!1,e.has("#Ordinal"));e.replaceWith(n,!0),e.tag("NumericValue")}})),this},toLocaleString:function(){return this.forEach((function(e){var t=m(e);if(null!==t.num){t.num=t.num.toLocaleString();var n=M(t,!1,e.has("#Ordinal"));e.replaceWith(n,!0)}})),this},toText:function(){return this.forEach((function(e){var t=m(e);if(null!==t.num){var n=M(t,!0,e.has("#Ordinal"));e.replaceWith(n,!0),e.tag("TextValue")}})),this},toCardinal:function(e){return this.if("#Ordinal").forEach((function(t){var n=m(t);if(null!==n.num){var r=M(n,t.has("#TextValue"),!1);t.replaceWith(r,!0),t.tag("Cardinal"),y(e,t,n)}})),this},toOrdinal:function(){var e=this;return this.if("#Cardinal").forEach((function(t){var n=m(t);if(null!==n.num){var r=M(n,t.has("#TextValue"),!0);t.replaceWith(r,!0),t.tag("Ordinal");var i=e.lookAhead("^#Plural");i.found&&i.nouns().toSingular()}})),this},isEqual:function(e){return this.filter((function(t){return m(t).num===e}))},greaterThan:function(e){return this.filter((function(t){return m(t).num>e}))},lessThan:function(e){return this.filter((function(t){return m(t).nume&&r100)return t;for(var n=0;n=O[n][1]&&(e-=O[n][1],t.push(O[n][0]));return b[e]&&t.push(b[e]),t},P=function(e){if(0===e||"0"===e)return"zero";e>1e21&&(e=w(e));var t=[];e<0&&(t.push("minus"),e=Math.abs(e));for(var n=function(e){var t=e,n=[];return V.forEach((function(r){if(e>=r[0]){var i=Math.floor(t/r[0]);t-=i*r[0],i&&n.push({unit:r[1],count:i})}})),n}(e),r=0;r1&&t.push("and")),(t=t.concat(C(n[r].count))).push(i)}return 0===(t=(t=t.concat(function(e){var t=["zero","one","two","three","four","five","six","seven","eight","nine"],n=[],r=w(e).match(/\.([0-9]+)/);if(!r||!r[0])return n;n.push("point");for(var i=r[0].split(""),u=0;u10&&t<20)return String(e)+"th";var n={0:"th",1:"st",2:"nd",3:"rd"},r=w(e),i=r.slice(r.length-1,r.length);return r+=n[i]?n[i]:"th"},j={one:"first",two:"second",three:"third",five:"fifth",eight:"eighth",nine:"ninth",twelve:"twelfth",twenty:"twentieth",thirty:"thirtieth",forty:"fortieth",fourty:"fourtieth",fifty:"fiftieth",sixty:"sixtieth",seventy:"seventieth",eighty:"eightieth",ninety:"ninetieth"},M=function(e){var t=P(e).split(" "),n=t[t.length-1];return j.hasOwnProperty(n)?t[t.length-1]=j[n]:t[t.length-1]=n.replace(/y$/,"i")+"th",t.join(" ")},N={"¢":"cents",$:"dollars","£":"pounds","¥":"yen","€":"euros","₡":"colón","฿":"baht","₭":"kip","₩":"won","₹":"rupees","₽":"ruble","₺":"liras"},A={"%":"percent",s:"seconds",cm:"centimetres",km:"kilometres"},E={usd:!0,eur:!0,jpy:!0,gbp:!0,cad:!0,aud:!0,chf:!0,cny:!0,hkd:!0,nzd:!0,kr:!0,rub:!0},T=function(e){return N.hasOwnProperty(e.prefix)&&(e.suffix+=N[e.prefix],e.prefix=""),A.hasOwnProperty(e.suffix)&&(e.suffix=A[e.suffix]),E.hasOwnProperty(e.suffix)&&(e.suffix=e.suffix.toUpperCase()),e.suffix&&(e.suffix=" "+e.suffix),e},q=function(e,t,n){var r=String(e.num);return t?(e=T(e),n?(r=M(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||"")):(r=P(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||""))):n?(r=$(r),e=T(e),"".concat(e.prefix||"").concat(r).concat(e.suffix||"")):(!0===e.hasComma&&(r=e.num.toLocaleString()),r=w(r),"".concat(e.prefix||"").concat(r).concat(e.suffix||""))},k={json:function(e){var t=null;"number"==typeof e&&(t=e,e=null),e=e||{text:!0,normal:!0,trim:!0,terms:!0};var n=[];return this.forEach((function(t){var r=t.json(e)[0],i=g(t);r.prefix=i.prefix,r.number=i.num,r.suffix=i.suffix,r.cardinal=q(i,!1,!1),r.ordinal=q(i,!1,!0),r.textCardinal=q(i,!0,!1),r.textOrdinal=q(i,!0,!0),n.push(r)})),null!==t?n[t]:n},units:function(){var e=this.lookAhead("(#Unit|#Noun)+");return(e=(e=e.splitAfter("@hasComma").first()).not("#Pronoun")).first()},isOrdinal:function(){return this.if("#Ordinal")},isCardinal:function(){return this.if("#Cardinal")},toNumber:function(){return this.forEach((function(e){var t=g(e);if(null!==t.num){var n=q(t,!1,e.has("#Ordinal"));e.replaceWith(n,!0),e.tag("NumericValue")}})),this},toLocaleString:function(){return this.forEach((function(e){var t=g(e);if(null!==t.num){t.num=t.num.toLocaleString();var n=q(t,!1,e.has("#Ordinal"));e.replaceWith(n,!0)}})),this},toText:function(){return this.forEach((function(e){var t=g(e);if(null!==t.num){var n=q(t,!0,e.has("#Ordinal"));e.replaceWith(n,!0),e.tag("TextValue")}})),this},toCardinal:function(e){return this.if("#Ordinal").forEach((function(t){var n=g(t);if(null!==n.num){var r=q(n,t.has("#TextValue"),!1);t.replaceWith(r,!0),t.tag("Cardinal"),x(e,t,n)}})),this},toOrdinal:function(){var e=this;return this.if("#Cardinal").forEach((function(t){var n=g(t);if(null!==n.num){var r=q(n,t.has("#TextValue"),!0);t.replaceWith(r,!0),t.tag("Ordinal");var i=e.lookAhead("^#Plural");i.found&&i.nouns().toSingular()}})),this},isEqual:function(e){return this.filter((function(t){return g(t).num===e}))},greaterThan:function(e){return this.filter((function(t){return g(t).num>e}))},lessThan:function(e){return this.filter((function(t){return g(t).nume&&r (http://spencermounta.in)", "main": "./builds/compromise-numbers.js", "unpkg": "./builds/compromise-numbers.min.js", diff --git a/plugins/redact/builds/compromise-redact.js b/plugins/redact/builds/compromise-redact.js index 18561917c..bd9fa9800 100644 --- a/plugins/redact/builds/compromise-redact.js +++ b/plugins/redact/builds/compromise-redact.js @@ -1,9 +1,9 @@ -/* compromise-redact 0.0.1 MIT */ +/* compromise-redact 0.0.2 MIT */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.compromiseRedact = factory()); -}(this, (function () { 'use strict'; +}(this, function () { 'use strict'; var randChar = function randChar(_char) { var len = Math.random() * 10; @@ -76,5 +76,5 @@ return src; -}))); +})); //# sourceMappingURL=compromise-redact.js.map diff --git a/plugins/redact/builds/compromise-redact.mjs b/plugins/redact/builds/compromise-redact.mjs index 328d48abc..81224db4e 100644 --- a/plugins/redact/builds/compromise-redact.mjs +++ b/plugins/redact/builds/compromise-redact.mjs @@ -1,4 +1,4 @@ -/* compromise-redact 0.0.1 MIT */ +/* compromise-redact 0.0.2 MIT */ var randChar = function randChar(_char) { var len = Math.random() * 10; len = Math.ceil(len); diff --git a/plugins/redact/package.json b/plugins/redact/package.json index 8c803fd8a..1681f25d6 100644 --- a/plugins/redact/package.json +++ b/plugins/redact/package.json @@ -1,7 +1,7 @@ { "name": "compromise-redact", "description": "plugin for nlp-compromise", - "version": "0.0.1", + "version": "0.0.2", "author": "Spencer Kelly (http://spencermounta.in)", "main": "./builds/compromise-redact.js", "unpkg": "./builds/compromise-redact.min.js", diff --git a/plugins/redact/rollup.config.js b/plugins/redact/rollup.config.js new file mode 100644 index 000000000..2e35f43b7 --- /dev/null +++ b/plugins/redact/rollup.config.js @@ -0,0 +1,76 @@ +import commonjs from '@rollup/plugin-commonjs' +import json from '@rollup/plugin-json' +import resolve from '@rollup/plugin-node-resolve' +import { terser } from 'rollup-plugin-terser' +import babel from 'rollup-plugin-babel' +import sizeCheck from 'rollup-plugin-filesize-check' +const name = 'compromise-redact' + +import { version } from './package.json' +const banner = `/* ${name} ${version} MIT */` + +export default [ + { + input: 'src/index.js', + output: [ + { + file: `builds/${name}.mjs`, + format: 'esm', + banner: banner, + }, + ], + plugins: [ + resolve(), + json(), + commonjs(), + babel({ + babelrc: false, + presets: ['@babel/preset-env'], + }), + sizeCheck(), + ], + }, + { + input: 'src/index.js', + output: [ + { + file: `builds/${name}.js`, + format: 'umd', + sourcemap: true, + name: 'compromiseRedact', + banner: banner, + }, + ], + plugins: [ + resolve(), + json(), + commonjs(), + babel({ + babelrc: false, + presets: ['@babel/preset-env'], + }), + sizeCheck(), + ], + }, + { + input: 'src/index.js', + output: [ + { + file: `builds/${name}.min.js`, + format: 'umd', + name: 'compromiseRedact', + }, + ], + plugins: [ + resolve(), + json(), + commonjs(), + babel({ + babelrc: false, + presets: ['@babel/preset-env'], + }), + terser(), + sizeCheck(), + ], + }, +] From bc1f428d4000f21cba53562880d03574b73aa905 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:43:44 -0400 Subject: [PATCH 22/24] add package-lock for redact --- plugins/redact/package-lock.json | 2058 ++++++++++++++++++++++++++++++ 1 file changed, 2058 insertions(+) create mode 100644 plugins/redact/package-lock.json diff --git a/plugins/redact/package-lock.json b/plugins/redact/package-lock.json new file mode 100644 index 000000000..ffc472dc1 --- /dev/null +++ b/plugins/redact/package-lock.json @@ -0,0 +1,2058 @@ +{ + "name": "compromise-redact", + "version": "0.0.2", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz", + "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==", + "dev": true, + "requires": { + "browserslist": "^4.9.1", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", + "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.8.4", + "@babel/helpers": "^7.8.4", + "@babel/parser": "^7.8.4", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.4", + "@babel/types": "^7.8.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", + "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz", + "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.6", + "browserslist": "^4.9.1", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz", + "integrity": "sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz", + "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.8.4", + "@babel/helper-compilation-targets": "^7.8.4", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.8.3", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.8.4", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.8.3", + "@babel/plugin-transform-modules-systemjs": "^7.8.3", + "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.4", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.3", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/types": "^7.8.3", + "browserslist": "^4.8.5", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/runtime": { + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", + "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.5", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.1.tgz", + "integrity": "sha512-SaVUoaLDg3KnIXC5IBNIspr1APTYDzk05VaYcI6qz+0XX3ZlSCwAkfAhNSOxfd5GAdcm/63Noi4TowOY9MpcDg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + } + }, + "@rollup/plugin-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.1.tgz", + "integrity": "sha512-soxllkhOGgchswBAAaTe7X9G80U2tjjHvXv0sBrriLJcC/89PkP59iTrKPOfbz3SjX088mKDmMhAscuyLz8ZSg==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.5.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.0.0.tgz", + "integrity": "sha512-+vOx2+WMBMFotYKM3yYeDGZxIvcQ7yO4g+SuKDFsjKaq8Lw3EPgfB6qNlp8Z/3ceDCEhHvC9/b+PgBGwDQGbzQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1" + } + }, + "@rollup/pluginutils": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", + "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "micromatch": "^4.0.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "13.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.2.tgz", + "integrity": "sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001047", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001047.tgz", + "integrity": "sha512-eaZFO+zPTGCCi5EBK0Ri8f2qXJ1lLH0Ic/UM2wrfc0bQkSiwGEk75tZEu2Gns7uvTMKcADLh0+QdTjzcRt3owA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "electron-to-chromium": { + "version": "1.3.418", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.418.tgz", + "integrity": "sha512-i2QrQtHes5fK/F9QGG5XacM5WKEuR322fxTYF9e8O9Gu0mc0WmjjwGpV8c7Htso6Zf2Di18lc3SIPxmMeRFBug==", + "dev": true + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "re-emitter": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/re-emitter/-/re-emitter-1.1.3.tgz", + "integrity": "sha1-+p4xn/3u6zWycpbvDz03TawvUqc=", + "dev": true + }, + "readable-stream": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, + "requires": { + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, + "rollup": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.30.1.tgz", + "integrity": "sha512-Uus8mwQXwaO+ZVoNwBcXKhT0AvycFCBW/W8VZtkpVGsotRllWk9oldfCjqWmTnFRI0y7x6BnEqSqc65N+/YdBw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + } + }, + "rollup-plugin-babel": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", + "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-filesize-check": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-filesize-check/-/rollup-plugin-filesize-check-0.0.1.tgz", + "integrity": "sha512-FlFjye7Vk3tmI9HevcU+nrhIyzvARXG5cua1NQJXFlrp+lRht0qmQ1AgXdUrHpfnHmro/r1qopmjokfvavh36g==", + "dev": true + }, + "rollup-plugin-terser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz", + "integrity": "sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "split": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", + "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", + "dev": true, + "requires": { + "through": "2" + } + }, + "string.prototype.trim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", + "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tap-dancer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tap-dancer/-/tap-dancer-0.2.0.tgz", + "integrity": "sha512-SKUl8jHmYf/7rugeFTwYGpguRi43zqOTVZOfeh3DKCAlazZerdXd11ER5kNVbsbdWc5FB8wwjlZhjTc0W69iGQ==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "tap-out": "3.0.0" + } + }, + "tap-out": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tap-out/-/tap-out-3.0.0.tgz", + "integrity": "sha512-JzlrjCL3anqI9xHGPfYb6Mo+6nYs60m0tDy6i0sWhYDlrBDVerYPNWoUo1buK3YeWQFdm42KQv8wu9qLf1tL5A==", + "dev": true, + "requires": { + "re-emitter": "1.1.3", + "readable-stream": "2.2.9", + "split": "1.0.0", + "trim": "0.0.1" + } + }, + "tape": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.0.tgz", + "integrity": "sha512-J/hvA+GJnuWJ0Sj8Z0dmu3JgMNU+MmusvkCT7+SN4/2TklW18FNCp/UuHIEhPZwHfy4sXfKYgC7kypKg4umbOw==", + "dev": true, + "requires": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.0", + "object-inspect": "~1.7.0", + "resolve": "~1.14.2", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "dependencies": { + "resolve": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "terser": { + "version": "4.6.12", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.12.tgz", + "integrity": "sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} From 2c864df4974328d85cd2977fa4eda1f8ba8d8bce Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:46:16 -0400 Subject: [PATCH 23/24] drop node 8 building for new rollup features --- .github/workflows/build-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index f4c11c549..672153f15 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - node-version: [8.x, 10.x, 13.x] + node-version: [10.x, 13.x] steps: - uses: actions/checkout@v2 From db8bdba77ebe91f674e9556b9d20ad913ecc4cd2 Mon Sep 17 00:00:00 2001 From: spencer kelly Date: Sat, 25 Apr 2020 12:55:43 -0400 Subject: [PATCH 24/24] remove babel from redact plugin --- plugins/redact/package.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/redact/package.json b/plugins/redact/package.json index 1681f25d6..dafbbce01 100644 --- a/plugins/redact/package.json +++ b/plugins/redact/package.json @@ -37,8 +37,6 @@ }, "dependencies": {}, "devDependencies": { - "@babel/core": "7.8.4", - "@babel/preset-env": "7.8.4", "@rollup/plugin-commonjs": "11.0.1", "@rollup/plugin-json": "4.0.1", "@rollup/plugin-node-resolve": "7.0.0",